Acceder a recursos de mapas de bits en una DLL de C ++ desde VB6
Pregunta
Tengo una DLL de C ++ que incluye recursos de mapas de bits creados por Visual Studio.
Aunque puedo cargar la DLL en VB6 usando LoadLibrary, no puedo cargar los recursos de imagen usando LoadImage o usando LoadBitmap. Cuando intento obtener el error usando GetLastError (), no devuelve ningún error.
He intentado usar LoadImage y LoadBitmap en otro programa C ++ con la misma DLL y funcionan sin ningún problema.
¿Hay alguna otra forma de acceder a los mapas de bits de recursos en las DLL de C ++ usando VB6?
Solución
Dado que está utilizando el ID numérico del mapa de bits como una cadena, debe agregar un " # " delante de ella:
DLLHandle = LoadLibrary("Mydll.dll")
myimage = LoadBitmap(DLLHandle, "#101") ' note the "#"
En C ++ también puede usar la macro MAKEINTRESOURCE, que es simplemente una conversión a LPCTSTR:
imagehandle = LoadBitmap(DLLHandle, MAKEINTRESOURCE(101));
Otros consejos
Tienes la idea correcta. Probablemente tienes la llamada equivocada. Tal vez podría mostrar un poco de código, ya que no puedo adivinar lo que está pasando.
En VB6:
Función de declaración privada LoadLibrary Lib '' kernel32 '' Alias ??" LoadLibraryA & " (ByVal lpLibFileName como cadena) Tan largo
Función de declaración privada LoadBitmap Lib " user32 " Alias ??" LoadBitmapA & " (ByVal hInstance As Long, ByVal lpBitmapName As String) Tan largo
DLLHandle = LoadLibrary (" Mydll.dll ")
myimage = LoadBitmap (DLLHandle, " 101 ")
viene con myimage como 0 aunque DLLHandle no es cero, sin embargo, en C ++:
imagehandle = LoadBitmap (DLLHandle, LPCSTR (101));
funciona!
Muchas gracias