Aidez moi à traduire une petite fonction assembleur en C (API Windows)
skirby
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
17 avril 2005 à 22:43
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
-
25 avril 2005 à 12:44
Bonjour à tous,
J'essaye désespérément de traduire une fonction ASM en C. Le but de
cette fonction est de pouvoir utiliser une ressource compilé dans mon
exécutable.
Ce n'est pas moi qui ai écrit cette fonction en assembleur mais elle fonctionne très bien.
Voici la fonction en question :
INVOKE GetModuleHandle, NULL
mov hInstance, eax
; Charge et utilise une resource
push esi
INVOKE FindResource, hInstance, RESOURCE_FILE, RT_RCDATA
push eax
INVOKE SizeofResource, hInstance, eax
mov nResourceSize, eax
pop eax
INVOKE LoadResource, hInstance, eax
INVOKE LockResource, eax
mov esi, eax
mov eax, nResourceSize
add eax, SIZEOF nResourceSize
INVOKE GlobalAlloc, GPTR, eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov pResource, eax
mov ecx, nResourceSize
mov dword ptr [eax], ecx
add eax, SIZEOF nResourceSize
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov edi, eax
rep movsb ; peut être remplacé par ;INVOKE RtlMoveMemory,edi,esi,nResourceSize
pop esi
INVOKE UseResource, pResource
Voici ce que j'ai pu écrire en C mais cela ne semble pas fonctionner :
HINSTANCE g_hInst;
LPVOID pMusic, pMusicTmp;
g_hInst = hThisInstance; // Provient de mon WinMain
HRSRC res = FindResource(g_hInst, MAKEINTRESOURCE(XM_FILE), RT_RCDATA);
DWORD nResourceSize = SizeofResource(g_hInst, res);
HGLOBAL loadRes = LoadResource(g_hInst, res);
LPVOID lockRes = LockResource(loadRes);
pResourceTmp pResource GlobalAlloc(GPTR, nResourceSize + sizeof(nResourceSize));
pResourceTmp = (void*)(nResourceSize);
MoveMemory(&pResource + sizeof(nResourceSize), lockRes, nResourceSize);
UseResource(pResource);
C'est la partie assembleur délimité par des ; qui me pose des problèmes. Je ne sais pas comment l'écrire en C.
Merci d'avance pour votre aide car la je galère vraiment