2010-01-24 14 views
14

He creado una DLL en VC++ como proyecto Win32¿Cómo puedo obtener HINSTANCE de una DLL?

función DllMain es

BOOL APIENTRY DllMain(HMODULE hModule, 
         DWORD ul_reason_for_call, 
         LPVOID lpReserved 
        ) 
{ 
    return TRUE; 
} 

Ahora necesito HINSTANCE de la DLL, que deben suministrarse a las funciones de Win32.

¿Son iguales HMODULE y HINSTANCE?

¿Cómo puedo obtener HINSTANCE?

Respuesta

21

Un extracto del libro de Windows a través de C/C++ [1]

Nota Como resultado, HMODULE sy HINSTANCE s son exactamente lo mismo. Si la documentación de una función indica que se requiere un HMODULE, puede pasar un HINSTANCE y viceversa. Hay dos tipos de datos porque en Windows de 16 bits HMODULE s y HINSTANCE s identificaron cosas diferentes

[1] Richter, Jeffery y Nasarre, Christophe, Windows a través de C/C++, quinta ed , Redmond: Microsoft Press 2008, pp. 74

+2

Más información aquí: http://blogs.msdn.com/oldnewthing/archive/2004/06/14/155107.aspx – Chad

+2

Win32, HINSTANCE y HMODULE son simplemente la dirección base del módulo. – Chad

3

Creo que estos son los mismos. Si quieres HINSTANCE del proceso en ejecución (EXE), se debe utilizar

GetModuleHandle(NULL); 
+4

Esto no devuelve el 'HMODULE' de a ** D LL **, que es lo que el OP estaba pidiendo. – IInspectable

+0

Esto no funciona para un dll. – rmcclellan

1

Llamar a GetModuleHandle (NULL) desde un dll devolverá el Hinstanc del EXE que inició el DLL; para obtener el HINSTANCE para la DLL Curently intento de funcionamiento de este consejo: función DllMain

http://www.dotnet247.com/247reference/msgs/13/65259.aspx

+4

El sitio web vinculado ha sido eliminado. Aquí hay otro artículo útil sobre el mismo tema: http://www.codeguru.com/cpp/w-p/dll/tips/article.php/c3635 –

4

Microsoft enlazador específico

#include "windows.h" 
EXTERN_C IMAGE_DOS_HEADER __ImageBase; 
#pragma warning(disable: 4047) 
HINSTANCE hInstance = (HINSTANCE)&__ImageBase; 
#pragma warning(default: 4047) 
+0

¿Qué pasa si el DLL se reubica? – karliwson

Cuestiones relacionadas