Utilisation d'un dll [Résolu]

Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
- - Dernière réponse : JSilvere
Messages postés
161
Date d'inscription
lundi 28 février 2011
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" ()
Afficher la suite 

Votre réponse

20/30 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
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

Merci Renfield 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
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

Merci Renfield 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3
Merci
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

Merci Renfield 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
14319
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
11 décembre 2018
0
Merci
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
Commenter la réponse de NHenry
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
Je ne vois pas ce que tu veux dire :s
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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)
Commenter la réponse de JSilvere
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
N'y a-t'il aucun moyen d'appeler ma dll si elle n'a pas été compilé avec __stdcall?
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de JSilvere
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield
Messages postés
161
Date d'inscription
lundi 28 février 2011
Dernière intervention
11 février 2013
0
Merci
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.
Commenter la réponse de JSilvere
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.