Comment utiliser une DLL asm en C++

Résolu
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 4 janv. 2007 à 01:14
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 6 janv. 2007 à 14:02
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

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
6 janv. 2007 à 14:02
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
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 janv. 2007 à 03:15
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++
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
4 janv. 2007 à 03:41
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
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
4 janv. 2007 à 13:01
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
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 janv. 2007 à 13:31
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++
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
4 janv. 2007 à 14:40
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 janv. 2007 à 14:56
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++
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
4 janv. 2007 à 18:38
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
0
Rejoignez-nous