Utiliser une fonction ASM compilée (sous MASM) sous Dev-C++ ?

Signaler
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
Bonjour,





j'essaye désespérément d'intégrer une fonction assembleur (compilée sous MASM) dans Dev-C++ (v4.9.9.2)





Voici mon code C :





/**************** Code C ****************/





#include <windows.h>


#include "rc_dlg.h"





extern long STDCALL myfnt(long);





/* prototype for the dialog box function. */


static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);





int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)


{


DialogBoxParam(hThisInstance, MAKEINTRESOURCE(IDD_DLG1), NULL, (DLGPROC) DialogFunc, 0);


}





BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)


{


char s[255];





switch (msg) {


case WM_INITDIALOG:


wsprintf(s, "Valeur : %d", myfnt(10));


MessageBox( 0, s, "Title", 0);





return TRUE;


case WM_CLOSE:


EndDialog(hwndDlg,0);


return TRUE;


}


return FALSE;


}





/**************** Code ASM ****************/





Et voici mon code assembleur (compilé avec MASM)





.386


.model flat, stdcall ;32 bit memory model


option casemap :none ;case sensitive





.code





myfnt proc public arg1:dword


add arg1, 10


mov eax, arg1


myfnt endp





end





/*****************************************/








A la compilation, j'ai ceci comme erreur :


[Linker error] undefined reference to `_Z5myfntl@4'


ld returned 1 exit status


D:\tmp\Makefile.win [Build Error] [test.exe] Error 1





J'ai ajouté dans les options de mon projet l'emplacement de mon fichier
asm compilé function.o (dans "Project options", onglet "Parameters" et
zone "Linker")





Qu'est ce qui ne va pas ?





Merci d'avance pour votre aide.

2 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
salut,

pour moi, il faut compiler le fichier ASM avec l'option /coff...

et mettre extern "C" long STDCALL myfnt(long);

et si ca marche pas, dans l'ASM tu rajoutes un _ devant myfnt

et si ca marche toujours pas, on verra...

ShareVB
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Salut ShareVB,


J'avais fini par trouver la solution et c'est en effet c'est ce qu'il faut faire.



Merci et A+