Aidez moi à traduire une petite fonction assembleur en C (API Windows)

Utilisateur anonyme - 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

4 réponses

ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
18 avril 2005 à 14:42
Salut,
les ; il n'y a pas de quoi fouetter un chat si on ne peut pas les traduire.
Ce sont des commentaires,les suprimer ou les passer sur une ligne ne comportant que des commentaires.
// commentairesJe doute un peu des emboités.
Le ; en C marque la fin d'une instruction
Pas de {} marquant des proc ?
winmain { avec le
code dedans}.
Je ne suis pas une référence en C,peut être que sur le forum du C ?
ToutEnMasm
0
Utilisateur anonyme
18 avril 2005 à 17:24
Salut ToutEnMasm,



je sais bien que les ; sont des commentaires. J'ai mis dans mon message:




C'est la partie assembleur délimité par des ; qui me pose des problèmes. Je ne sais pas comment l'écrire en C.






Les = emboités, je ne doute pas dessus.



En fait, j'aimerais simplement avoir l'équivalent du code entre les ;;;; en C

C'est surtout la commande: mov dword ptr [eax], ecx qui me pose problème car en C, la fonction LockResource retourne un LPVOID donc un pointeur.


Comment accéder à la valeur pointée d'un pointeur pour la modifier ???
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
25 avril 2005 à 12:42
salut,

tu n'as pas besoin de la traduire, c fait automatiquement
par (&pResource + sizeof(nResourceSize)).

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
25 avril 2005 à 12:44
re,

en c, tu fait ( *monpointeur = ma valeur );
en asm, tu fait ( mov [monpointeur],valeur );

@++
0
Rejoignez-nous