El HINSTANCE de una aplicación win32 se pasa a WinMain, pero ¿hay alguna otra manera de determinar el HINSTANCE actual (en caso de que no pudieses saberlo, soy muy nuevo para la programación de win32)? Necesito crear una ventana dentro de una biblioteca y (dado que la biblioteca es multiplataforma), id prefiere no tener que pasarla.¿Determinar el HINSTANCE actual?
Respuesta
Si falla la memoria, GetModuleHandle(NULL);
devuelve el identificador de instancia.
Si está utilizando MFC, puede usar AfxGetInstanceHandle.
Si no está utilizando MFC que puede utilizar: GetWindowLong (CVent, GWL_HINSTANCE)
__ImageBase es su amigo, especialmente en el caso de las bibliotecas.
Nota que el puesto relacionado el blog (por R. Chen, aunque no es el mismo puesto como el vinculado por Brian Bondy) vale la pena leer (incluyendo los comentarios!)
Ignorando el engorroso [GetModuleHandleEx] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683200.aspx) con 'GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS', esta es realmente la única forma ** confiable ** de encontrar el mango del módulo, y debería ser la respuesta aceptada. – IInspectable
La función AfxGetStaticModuleState() hace el truco . Si lo llama dentro de un dll, las funciones devuelven el manejador al dll, si la llamada dentro de un exe devuelve el manejador al ejecutable.
DWORD size;
TCHAR fileName [MAX_PATH];
HMODULE hModule = AfxGetStaticModuleState()->m_hCurrentInstanceHandle;
::GetModuleFileName (hModule, fileName, size);
La pregunta está etiquetada * winapi *. No hay 'AfxGetStaticModuleState' en la API de Windows. – IInspectable
- 1. Reenviar declarar HINSTANCE y amigos
- 2. ¿Cómo determinar el IME actual en Android?
- 3. No se puede determinar el directorio actual
- 4. ¿Cómo puedo obtener HINSTANCE de una DLL?
- 5. Determinar usuario actual en Apps Script
- 6. ¿Cómo puedo determinar el número de línea actual en JavaScript?
- 7. ¿Cómo puedo determinar el nombre del directorio actual en R?
- 8. ¿Cómo determinar si la ventana actual es la ventana activa?
- 9. ¿Cómo determinar la versión actual de ASP.NET MVC?
- 10. Java: Camino Programáticos para determinar actual de Windows del usuario
- 11. ¿Cómo puedo determinar la excepción actual en un bloque catch (...)?
- 12. Cómo determinar si la aplicación actual es de confianza media
- 13. ¿Determinar la ubicación actual del archivo en R para incluir el archivo en el mismo directorio?
- 14. Dado un Java InputStream, ¿cómo puedo determinar el desplazamiento actual en la secuencia?
- 15. Python: determine el módulo actual actual (no __main__)
- 16. En Python, ¿cómo obtengo el marco actual?
- 17. Ruby Cómo determinar el entorno de ejecución
- 18. ¿Cómo obtener el área de ejecución actual?
- 19. ¿Cómo puedo determinar el ángulo del dispositivo?
- 20. iPhone: ¿Cómo determinar si el hilo es el hilo principal?
- 21. ¿Cómo obtengo el archivo actual, la clase actual y el método actual con Python?
- 22. Obtener el color actual
- 23. En el script de Windows 7, ¿cómo puedo determinar si el cierre del sistema actual es realmente un reinicio?
- 24. Cómo determinar el sistema operativo
- 25. ¿Determinar el alcance de sincronización?
- 26. Programación dinámica: determinar el estado
- 27. MPI_Recv - ¿Cómo determinar el recuento?
- 28. Determinar el espejo más cercano PHP
- 29. Determinar si el directorio está bajo el control de git
- 30. Obtener el valor entero del año actual en Java
No es totalmente correcto: Vuelve a aumentar el HINSTANCE del exe. Si el código se ejecuta en un archivo DLL, esto puede conducir a comportamientos incorrectos –
@Serge: por lo que está diciendo, el HINSTANCE del ejecutable es exactamente lo que quiere. –
+1: Al pasar un nombre de módulo, esa función se puede usar para obtener 'HINSTANCE' de las DLL también. Tenga en cuenta que 'HINSTANCE' y' HMODULE' son esencialmente equivalentes en las versiones modernas de Windows. –