Comment utiliser une DLL asm en C++ [Résolu]

Signaler
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
-
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
-
Salut tt le monde,
Je suis tres intereser par le dll suivante: http://www.asmfr.com/code.aspx?ID=23840
J'ai besoin de deux fonctions qui sont inclu dans cette dll:
HshStr et Hash2Str
J'ai essayer ca pour l'inclure dans mon projet C++ mais ca me genere des erreurs a la compilation:
 Pour les declarer:
 __declspec(dllimport) int __stdcall HashStr(char *StrToHash, char *OutBuff, int BuffSize);
 __declspec(dllimport) void __stdcall ConvertHash2Str(char *InHash, char *OutHash)
int HashStr(char *StrToHash, char *OutBuff, int BuffSize);
void ConvertHash2Str(char *InHash, char *OutHash);

et j'ai inclu le .obj dans le projet

a la compilation j'ai les erreurs suivantes:
 .drectve `-defaultlib:\masm32\lib\kernel32.lib ' unrecognized 
 .drectve `-defaultlib:\masm32\lib\advapi32.lib ' unrecognized 
 .drectve `-entry:LibMain@12 ' unrecognized
 D:\MD5\Main.o(.text+0x42) In function `Z3md5Pc': 
[Linker error] undefined reference to [mailto:`_Z7HashStrPcS_i@12' `_Z7HashStrPcS_i@12']
 [Linker error] undefined reference to [mailto:`_Z15ConvertHash2StrPcS_@8' `_Z15ConvertHash2StrPcS_@8']
 D:\MD5\Main.o(.text+0x42) ld returned 1 exit status
 D:\MD5\Makefile.win [Build Error]  ["MD5] Error 1

Voila, je vous en supplie aidez moi j'en peu plus la.
merci.
Neo_Fr

8 réponses

Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Finalement j'ai trouvé un solution:
On ajoute le fichier asm dans le projet et on rajouter ca en haut de main.cpp:

#ifdef __cplusplus
extern "C" {
#endif
int __stdcall HashStr(char *StrToHash, char *OutBuff, int BuffSize);
void __stdcall ConvertHash2Str(char *InHash, char *OutHash);
#ifdef __cplusplus
}
#endif

Voila ca marche nickel...
Neo_Fr
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
pas un obj mais avec le lib qu'il faut linker.
Ensuite tu mets ceci dans un h ou en haut du module qui s'en sert:
void __stdcall ConvertHash2Str(char *InHash, char *OutHash);

Comilos standards MS ou Borland no probleme.

ciao...
BruNews, MVP VC++
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Merci sa ma enlever des erreurs mais je ne comprend pas il me reste toujours:
 D:\MD5\Main.o(.text+0x42) In function `Z3md5Pc':
  [Linker error] undefined reference to [mailto:`_Z7HashStrPcS_i@12' `_Z7HashStrPcS_i@12']
  [Linker error] undefined reference to [mailto:`_Z15ConvertHash2StrPcS_@8' `_Z15ConvertHash2StrPcS_@8']

alors que j'ai bien ajouter HashLib.lib dans la partie éditeur de liens
 (je suis sous Dev-C++)
Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
J'ai essayer de recompiler le projet avec VC++ mais j'ai tjrs trois erreurs:
Main.obj : error LNK2001: unresolved external symbol "void __stdcall ConvertHash2Str(char *,char *)" ([mailto:?ConvertHash2Str@@YGXPAD0@Z ?ConvertHash2Str@@YGXPAD0@Z])

Main.obj : error LNK2001: unresolved external symbol "int __stdcall HashStr(char *,char *,int)" ([mailto:?HashStr@@YGHPAD0H@Z ?HashStr@@YGHPAD0H@Z])

j'ai bien ajouter le .lib...
Neo_Fr
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Pourquoi tiens-tu à réutiliser cette dll ?
Tu as tout le code alors remets le dans un fichier C (facile c'est du pseudo asm), ainsi no probleme et tu éviteras de te trimballer une dll pour si peu.

ciao...
BruNews, MVP VC++
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Tu veux dire que je peux directement inclure de l'asm dand du C tout en gardant la
vitesse de l'asm??
si oui comment.

Neo_Fr
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
De l'asm dans un module C, bien evidemment:
http://www.cppfrance.com/code.aspx?ID=36938

Par contre faut (encore....) remettre les idées en place:
Un compilo C produit de l'asm en partant du listing C, c'est cela qui sera assemblé et linké alors asm direct à la mano ou par le compilo c'est idem.
Il est clair que par contre ce doit être du vrai asm, pas le sabir qu'autorise MASM (comme dans la source dll) et tant mieux car le compilo produira nettement plus efficace comme code.

ciao...
BruNews, MVP VC++
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Je débute en C et je ne connait rien en asm alors si il fo modifier le source de la dll
je crois que ca va pas etre possible a moins que quelqu'un m'explique ce qu'il faut faire c'est pour sa que je suis tres interesser de pouvoir utiliser directement la dll.

Neo_Fr