纯资源 win32 dll,调用得不到 bitmap,为什么?

luwenguang 2003-10-17 09:08:05
//dll

1 project:win32 dll
2 insert -->resource--->bitmap,
3 save .rc。
4 bulid-->dll



//exe

HINSTANCE hinstLib = LoadLibrary("mydll.dll");
if(!hinstLib)
{
return ;
]

HBITMAP hBtmp = (HBITMAP)::LoadImage(hinstLib, "my.bmp",
IMAGE_BITMAP,
0,0,
LR_LOADFROMEFILE);

if(!hBtmp) //------------------------总为 NULL,为什么?
{
FreeLibrary(hinstLib);
return ;
}

FreeLibrary(hinstLib);


谢谢解答。
...全文
82 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
microran2000 2003-10-18
  • 打赏
  • 举报
回复
既然在执行LoadImage时失败,我想必定会返回一个错误码,你可以在监视窗口输入@err察看错误代码,然后获得错误描述信息.
yaoha2003 2003-10-18
  • 打赏
  • 举报
回复
UP
luwenguang 2003-10-18
  • 打赏
  • 举报
回复
我发现一个问题。


我建立一个 win32 dll。
加一个 .rc文件。bulid得到一个a.dll,a.dll文件大小为 16k。

然后我加一个bitmap 进去。build。得到 a.dll。发现 a.dll 文件大小还是 16k。


不可能吧?
应该怎么加 bitmap?
(我的方法:Insert--Resource---bitmap,这样有问题吗?)
luwenguang 2003-10-18
  • 打赏
  • 举报
回复
to symonds(就) ( ) 信誉:98 2003-10-17 22:52:00 得分:0
HBITMAP hBtmp = (HBITMAP)::LoadImage(hinstLib, "my.bmp",
IMAGE_BITMAP,
0,0,
LR_LOADFROMEFILE); 该命令表明了是从文件加载位图,你用LOADBITMAO命令



我测试了一 下。 LR_LOADFROMEFILE 这个标志位 确实有问题。
但两个函数 LoadImage(),LoadBitmap()应该是都可以使用的。

得到的 错误码 是 1814,使用 Error Lookup 看:找不到映像中指定的资源名。

奇怪。


luwenguang 2003-10-18
  • 打赏
  • 举报
回复
to yaoha2003:

我使用 LoadImage()不可能有错。

AFX_MANAGE_STATE(AfxGetStaticModuleState( ));这点倒是有可能错。我dll 是win32 dll。


to Richuen22(石志康)

你的参数是错的。

to symonds(就)

使用 LoadImage()绝对是可以的。
我觉得不是这里的问题。

to microran2000

我看了,有 资源。
LoadImage(),LoadBitmap()我都有试。应该不是这个问题。


我所 疑惑的就是在MFC中使用 纯资源dll 的时候有没有什么特别的约定。
就象akiko所说的那个函数。


你们都使用过 纯资源的dll 吗?是怎么使用的?
你们都使用成功了吗?

yaoha2003 2003-10-18
  • 打赏
  • 举报
回复
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));这个好像是同步全局变量用的,你在DLL用这个试试,而且我觉得你的LoadImage()用得也不对,要怎样用我也不知道,关注好了
microran2000 2003-10-18
  • 打赏
  • 举报
回复
首先你应该采用Visual C++以资源方式打开这个动态链接库,保证你能够看到动态链接库中包含位图资源.并能编辑(确定是否为空).
另外以文本方式打开你的DLL项目中的mydll.rc文件,确保存在下面
my.bmp BITMAP "???.bmp"
这里的名称要求与调用名称大小写严格匹配.
使用下面的函数试一下.这两个参数你已经知道了.
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpBitmapName // name of bitmap resource
);
Richuen22 2003-10-17
  • 打赏
  • 举报
回复
HBITMAP hBtmp = (HBITMAP)::LoadImage(AfxGetApp( )->m_hInstance, "my.bmp",
IMAGE_BITMAP,
0,0,
LR_LOADFROMEFILE);
symonds 2003-10-17
  • 打赏
  • 举报
回复
HBITMAP hBtmp = (HBITMAP)::LoadImage(hinstLib, "my.bmp",
IMAGE_BITMAP,
0,0,
LR_LOADFROMEFILE); 该命令表明了是从文件加载位图,你用LOADBITMAO命令
luwenguang 2003-10-17
  • 打赏
  • 举报
回复
to akiko

我的 .exe 是 MFC single document。

我感觉函数 AfxSetResourceHandle的使用有点怪。

1
在 CMyApp;;Initstance()中调用,弹出:建立 文档失败。
然后就退出了。


2
在 CMyView 中调用,结果还是得到 if(!hBtmp) //----总为 NULL,为什么?



这个是怎么回事?
akiko 2003-10-17
  • 打赏
  • 举报
回复
还得调用AfxSetResourceHandle

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧