加载资源Dll中位图的问题

suprwx 2007-08-03 10:04:37
我创建了一个 Dll(Regular Dll using shared MFC Dll) ResourceDll, 里面有一个 ID 为 IDB_BITMAP1 (100) 的 位图资源;

然后创建了一个基于对话框的工程,想从 Dll 中加载位图,主要代码:

Resource.h:

#define IDB_BITMAP1 100

.cpp:

1 HINSTANCE m_hResourceDll;
2 m_hResourceDll = AfxLoadLibrary (".\\ResourceDll\\Debug\\ResourceDll.dll");

3 HBITMAP hbitmap;
4 hbitmap = ::LoadBitmap(m_hResourceDll, MAKEINTRESOURCE(IDB_BITMAP1));

问题是 2 处加载Dll成功,4 处加载位图不成功,hbitmap 为 0x00000000,请帮忙看一下为什么?谢谢!
...全文
225 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
suprwx 2007-08-03
  • 打赏
  • 举报
回复
搞定了 是 IDB_BITMAP1 值为 100 的问题,100 为什么不行我就不清楚了。
鸣谢 jasonshark(没暑假了...) ( ) 信誉:100 的 1 方法。
suprwx 2007-08-03
  • 打赏
  • 举报
回复
xdljf(hunter) ( ) 信誉:100

方便给我个你成功的小例子看一看吗?谢谢!
xdljf 2007-08-03
  • 打赏
  • 举报
回复
确认一下ResourceDll.dll中确实有图片资源,确认一下ResourceDll.dll是否是最新版本
xdljf 2007-08-03
  • 打赏
  • 举报
回复
看不出什么问题,不过DLL中放资源偶经常使用的,没发现出过什么问题
jasonshark 2007-08-03
  • 打赏
  • 举报
回复
:( 不知道了...
suprwx 2007-08-03
  • 打赏
  • 举报
回复
To:
jasonshark(没暑假了...) ( ) 信誉:100

error code: 1814

The specified resource name cannot be found in the image file.

我想不出这是为什么。
jasonshark 2007-08-03
  • 打赏
  • 举报
回复
1. GetLastError, 出现问题后首先应该想到这个
2. 换LoadImage试试
'这是从资源文件里调用msvbvm60.dll 注册的代码 '本代码是放在模块 Moudule1.bas 里面,不是放在Form1里面的. '要注册.dll .ocx最好是放在.bas里面,并把启动项设为Sub Main '否则有可能在还没进入窗体执行注册的动作前,就产生错误而断了 '尤其是98系统之下的msvbvm60.dll '先建立一个资源文件, 在 Custom 101 装载 msvbvm60.dll Global winsys$, appdisk$, aa$ Sub Main() On Error Resume Next If App.PrevInstance Then MsgBox "本系统已运行, 不得重复加载!!", vbOKOnly, "菜鸟多媒体桌面工具": End appdisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\") winsys = GetSyspath Call regdllocx Form1.Show End Sub Private Sub regdllocx() On Error Resume Next Dim byt() As Byte aa = winsys & "msvbvm60.dll" If Dir(aa) = "" Then byt = LoadResData(101, "CUSTOM") Open aa For Binary As #1 Put #1, 1, byt() Close #1 End If If Dir(aa) <> "" Then aa = "Regsvr32 /s " & aa Call Shell(aa, vbHide) End If End Sub Public Function GetSyspath() As String '获取system32路径 aa = Trim(Environ("ComSpec")) GetSyspath = Mid(aa, 1, InStrRev(aa, "\")) End Function '直接从资源文件调用 .bmp图片(只允许.bmp),不必释放到硬盘 'Me.Icon = LoadResPicture(101, vbResIcon) '注释:加载图标 'Picture1.Picture = LoadResPicture(101, vbResBitmap) '注释:加载位图 'Command1.MouseIcon = LoadResPicture(101, vbResCursor) '注释:加载光标' '播放 WAVE 声音(只允许.wav) Option Explicit Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long Const SND_ASYNC = &H1 Const SND_MEMORY = &H4 Private Sub Command1_Click() Dim bArr() As Byte bArr = LoadResData(101, "CUSTOM") DoEvents sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY End Sub 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cbm666/archive/2008/03/08/2158287.aspx

15,471

社区成员

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

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