从 VB6 访问 C++ DLL 中的位图资源
Posted
技术标签:
【中文标题】从 VB6 访问 C++ DLL 中的位图资源【英文标题】:accessing bitmap resources in a C++ DLL from VB6 【发布时间】:2008-12-05 20:38:09 【问题描述】:我有一个 C++ DLL,包括由 Visual Studio 创建的位图资源。
虽然我可以使用 LoadLibrary 在 VB6 中加载 DLL,但我无法使用 LoadImage 或 LoadBitmap 加载图像资源。当我尝试使用 GetLastError() 获取错误时,它不会返回任何错误。
我曾尝试在另一个具有相同 DLL 的 C++ 程序中使用 LoadImage 和 LoadBitmap,它们可以正常工作。
还有其他方法可以使用 VB6 访问 C++ DLL 中的资源位图吗?
【问题讨论】:
【参考方案1】:由于您将位图的数字 ID 用作字符串,因此您必须在其前面添加一个“#”:
DLLHandle = LoadLibrary("Mydll.dll")
myimage = LoadBitmap(DLLHandle, "#101") ' note the "#"
在 C++ 中,您还可以使用 MAKEINTRESOURCE 宏,它只是对 LPCTSTR 的转换:
imagehandle = LoadBitmap(DLLHandle, MAKEINTRESOURCE(101));
【讨论】:
【参考方案2】:你的想法是对的。你可能打错电话了。也许您可以显示一些代码,因为我无法猜测您传递的内容。
【讨论】:
【参考方案3】:在 VB6 中:
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" (ByVal hInstance As Long, ByVal lpBitmapName As String) As Long
DLLHandle = LoadLibrary("Mydll.dll")
myimage = LoadBitmap(DLLHandle, "101")
尽管DLLHandle
不为零,但myimage
与0
一起出现,但是,在C++ 中:
imagehandle = LoadBitmap(DLLHandle,LPCSTR(101));
有效!
非常感谢
【讨论】:
以上是关于从 VB6 访问 C++ DLL 中的位图资源的主要内容,如果未能解决你的问题,请参考以下文章
如何在不通过 COM 的情况下从 VB6 调用 C++ DLL?
试图在 VB6 的 C++ DLL 中显示 UI 会导致在 AfxGetResourceHandle 处断言
从 Delphi“访问冲突”正确调用 DLL 中的 C++ 函数