Utilisation d'un dll

Résolu
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013 - 7 mars 2011 à 17:22
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013 - 14 mars 2011 à 10:30
Bonjours,
Je souhaite créer un programme permettant de récupérer des fichier à distances dans une régulation.

Ce programme existe déjà mais pas sous VB, j'ai récupéré le fichier h de se programme afin de créer son équivalent sous VB6.

Je dispose aussi de fichier .dll qui permettent d'effectuer la récupération des fichier, et quand j'essaie de les utiliser j'ai un message d'erreur comme quoi le fichier n'existe pas à l'emplacement ou je l'ai déclaré.

Declare Function Cscan Lib "C:\Cscan.dll" ()

30 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 mars 2011 à 09:32
pour savoir ce que contient la dll, le mieux est de regarder dans la dll, non ?

comme je te l'ai indiqué, utilises un soft listant les fonctions exportées, comme par exemple le dependency walker

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2011 à 13:12
Int en C donc Long en VB (4 octets)

a voir peut etre si cette dll requiert des sous-dll. Si non trouvées, cela pourrait expliquer le message d'erreur

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mars 2011 à 11:40
http://msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx

ERROR_INVALID_ORDINAL
182 (0xB6)
The operating system cannot run %1.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
7 mars 2011 à 19:36
Bonjour,

Quel est le texte exacte de l'erreur ?
Es-tu sûr que la DLL est bien à la racine du disque C ?
Il est préférable soit de mettre la DLL dans le dossier System de Windows, soit de le mettre dans le dossier de ton application, afin d'éviter toutes référence statique au fichier.

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
8 mars 2011 à 08:50
Oui je suis sur de leurs emplacement.

Je viens de déplacer les dll dans le dossier contenant mon projet et j'ai fais un programme de test comportant juste un bouton de commande :
Option Explicit

Declare Function FxServe Lib "C:\Users\Silvére\Desktop\VB\programmes\essai dll\FxServe.dll" ()
Declare Function Cscan Lib "C:\Users\Silvére\Desktop\VB\programmes\essai dll\Cscan.dll" ()



Private Sub Command1_Click()

Cscan

End Sub



Le message d'erreur affiché quand j'appuie sur la command1 est :
Point d'entrée Cscan d'une DLL introuvable dans C:\Users\Silvére\Desktop\VB\programmes\essai dll\Cscan.dll
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 mars 2011 à 12:37
Fonction mal nommée...

a voir les exports de ta dll

utilise par exemple le dependancy walker (depends.exe)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
8 mars 2011 à 12:41
Je ne vois pas ce que tu veux dire :s
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 mars 2011 à 14:13
es-tu sur que la dll Cscan exporte bien une fonction nommée Cscan ?
idem pour l'autre dll

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
9 mars 2011 à 08:40
Alors en fait la dll Cscan permet de remplacer mScom32 pour l'utilisation de ma seconde dll (normalement si j'arrive a faire ce que l'on m'a demandé)

Et quand à la dll FxServe, je dispose d'un point h de cette dll, il devrais pouvoir me permettre de savoir quelles fonctions elle contient non? (j'ai beaucoup de mal a décripter ce point h)
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
9 mars 2011 à 10:54
Ok oui je viens de l'ouvrir avec le programme que tu viens de me conseillé :)

Une fois ma dll ouverte je commence a me rendre conte que cette méthode est inexploitable vu le contenue plus qu'important de cette dll....

Dans mon fichier en .h j'ai les fonction à appeler pour effectuer mon programme normalement...[
#ifdef FXPSERVERDLL_EXPORTS
#define FXPSERVERDLL_API __declspec(dllexport)
#else
#define FXPSERVERDLL_API __declspec(dllimport)
#endif
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 mars 2011 à 11:01
inexploitable ?

suffit de regarder dans un premier temps si la fonction dont tu as fait le Declare dans VB est bien présente dans la liste des fonctions exportées.

le risque est que le nom soit décoré, genre

FScan@0

et que ceci rendre la chose complexe a exploiter.

second risque, que ta dll ne soit pas compilée avec __stdcall comme norme de passage des arguments. Du coup, dl incompatible avec la méthode d'appel utilisée par VB...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
11 mars 2011 à 11:31
N'y a-t'il aucun moyen d'appeler ma dll si elle n'a pas été compilé avec __stdcall?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2011 à 11:54
si, mais c'est plus compliqué...
ce parametre permet d'indiquer comment sont passés les parametres, qui les libère eventuellement de la pile, etc.

VB ne sais gérer que les __stdcall.

si ta dll passe par du __cdecl, fastcall ou autre, faudra ruser

mais ta dll est bien avec __stdcall, pour ce que j'ai pu en voir.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
11 mars 2011 à 11:57
J'ai maintenant bien identifié les fonctions de ma dll, et à peu près ce que je doit y mettre pour qu'elles fonctionnent.

Voila comment je les ai déclarés:

Option Explicit

Public pRequest As String
Public pDataptr As String


Public Declare Sub FxpCommand Lib "C:\Program Files\Cscape\FxServe.dll" Alias "?FxpCommand@@YGHPBDPAPAEPAHPAUHWND__@@@Z" (ByVal pRequest As String, ByVal pDataptr As String)
Public Declare Sub fxpGetErrorString Lib "C:\Program Files\Cscape\FxServe.dll" Alias "?FxpGetErrorString@@YGPBDH@Z" (ByVal nErrorCode As Integer)
Public Declare Sub setStopTransferState Lib "C:\Program Files\Cscape\FxServe.dll" Alias "?setStopTransferState@@YGXH@Z" (ByVal bStop As Boolean)
Public Declare Sub getStopTransferState Lib "C:\Program Files\Cscape\FxServe.dll" Alias "?getStopTransferState@@YGHXZ" ()


Le problème quand j'en appel une dans mon programme (dans form1) le message d'erreur apparait :

Erreur d'exécution '48':

Fichier introuvable: C:\Program Files\Cscape\FxServe.dll
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2011 à 12:07
Fichier introuvable...
le message semble clair, non ?

pense bien a changer ces Sub en Function

nErrorCode As Integer

gaffe, a voir si ton fichier .h déclare bien un short

sinon faut un Long en VB


Public pRequest As String
Public pDataptr As String

ne servent a rien, aucun lien avec les APIS déclarées

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
11 mars 2011 à 12:23
Fichier introuvable c'est explicite, mais pourtant ce message n'a pas lieu d'être car ce fichier est bien présent à cet endroit et je n'ai pas fais de faute de frape car j'ai utilisé un copier/colé du cheminement dans "propriété" de ma dll...

Je viens de tester de nouveau avec mes fonctions déclarés en "function" au lieu de "sub" en finissant ma déclaration par ) As Long

Donc si vous pensez avoir une idée du pourquoi du comment j'ai ce message d'erreur ....

Sinon nErrorCode est déclaré Int dans mon fichier H donc....

Et j'ai déclarer les deux variables car je les définit dans mon forme1 pour appeler ma fonction FXPcommand
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
11 mars 2011 à 14:38
OK pour le int sous C a convertir en Long merci

Sinon ce n'est pas le cas, il y as 3 fonctions manquantes dans une sous-sous-sous dll, mais cela n'interfère pas car je peu accéder au fonctions de la dll contenant la sou-sous dll ou il manque les 3 fonctions

Si quelqu'un à une autre idée du pourquoi j'ai ce message Fichier introuvable je suis plus que preneur
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2011 à 15:21
As tu un message d'erreru quelconque en ouvrant cette dll dans le dependency walker ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
JSilvere Messages postés 161 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 11 février 2013
11 mars 2011 à 15:29
Non aucun

Par conte dans la fenètre en bas de dependency walker, quand ma dll FxServe est ouverte, j'ai ces deux lignes en rouge :
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 mars 2011 à 15:32
c'est a cela que je fais allusion.
du coup, le LoadLibrary que tente VB se plante.

semble manquer une dll

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Rejoignez-nous