2010-11-13 5 views
1

Je crée une DLL pour Windows Mobile 6.x. J'ai besoin d'obtenir HMODULE de ma propre DLL, mais jusqu'ici je n'ai pas réussi. Pour les DLL Windows standard cela semble être assez simple, comme la signature DllMain est:DLL HMODULE pour Windows Mobile DLL

BOOL DllMain(HMODULE, DWORD, LPVOID)

Et vous pouvez juste prendre le premier paramètre et l'enregistrer dans une variable globale. Cependant la signature pour les DLL Windows Mobile est (pour des raisons que je ne comprends pas):

BOOL DllMain(HANDLE, DWORD, LPVOID)

Où ou comment puis-je obtenir HMODULE pour ma DLL dans ce cas? Merci beaucoup pour votre réponse.

Répondre

1

Ce POIGNÉE est le HMODULE. Ils sont tous deux typedefed de void *.

EDIT

Je viens de tester cela et cela a fonctionné comme prévu:

#include "windows.h" 


BOOL APIENTRY DllMain(HANDLE hModule, 
         DWORD ul_reason_for_call, 
         LPVOID lpReserved 
        ) 
{ 
    HMODULE module = (HMODULE)hModule; 
    RETAILMSG(TRUE, (_T("module = 0x%08x\r\n", module)); 

    return TRUE; 
} 
+0

Non, ils ne sont pas dans le SDK Windows Mobile. Extraits de winnt.h: 'typedef void * HANDLE; #define DECLARE_HANDLE (nom) struct nom ## __ {int unused; } typedef struct nom ## __ * nom' et de windef.h: 'DECLARE_HANDLE (HINSTANCE); typedef HINSTANCE HMODULE; ' Cette erreur de lancement de code lors de la compilation: ' Module HMODULE; Poignée de poignée; module = handle; ' – Omikr0n

+0

De http://msdn.microsoft.com/en-us/library/aa910684.aspx:« L'HINSTANCE d'une DLL est le même que le HMODULE de la DLL, hinstDLL peut être utilisé dans appels ultérieurs à la fonction GetModuleFileName et autres fonctions nécessitant un handle de module. ". Bien qu'il ne suive pas les règles C ou C++, il est fort probable que vous partagiez ces deux types en toute sécurité. Les déclarations basées sur la structure sont là pour empêcher le code de le faire par accident (par exemple confondre HWNDs avec HANDLEs). –

+0

Pourriez-vous clarifier comment devrais-je lancer? En utilisant à la fois ** module = (HMODULE) handle; ** et ** module = reinterpret_cast (handle); ** Je me retrouve avec la valeur NULL dans le module, alors que le handle n'était pas NULL. – Omikr0n