vc++ 6.0描述:
我有一个工程A,其中有一个对话框(D)资源及相关类C和对话框需要的几个bmp(且只有D需要)资源,后来我把D和C及bmp独立出来放到了新建的MFC extern DLL工程B中,A中删除了D和C 但没有删除bmp.我在A工程中调用B工程生成的b.dll,一切正常,后来发现a.exe有点大,我觉得A中的几个bmp应该没用了就删除了,结果发现对话框D中的图片不能显示了...问题:
b.dll中包含不包含bmp资源?
b.dll和a.exe中的资源有什么关系?
怎样做才能让b.dll用自已的bmp资源,即a.exe中的bmp可以删除掉?请了解的朋友指点迷津,谢谢!
我有一个工程A,其中有一个对话框(D)资源及相关类C和对话框需要的几个bmp(且只有D需要)资源,后来我把D和C及bmp独立出来放到了新建的MFC extern DLL工程B中,A中删除了D和C 但没有删除bmp.我在A工程中调用B工程生成的b.dll,一切正常,后来发现a.exe有点大,我觉得A中的几个bmp应该没用了就删除了,结果发现对话框D中的图片不能显示了...问题:
b.dll中包含不包含bmp资源?
b.dll和a.exe中的资源有什么关系?
怎样做才能让b.dll用自已的bmp资源,即a.exe中的bmp可以删除掉?请了解的朋友指点迷津,谢谢!
原来只有A工程:
A: source files
A.cpp
C.cpp(对应对话框资源 IDD_DIALOG_D)
...
head files
A.h
C.h ...
resources
Dialog
IDD_DIALOG_D
Bitmap
IDB_BITMAP_B(只在对话框 IDD_DIALOG_D 中用)改造后有A(exe)和B(mfc extern dll)两个工程: (改造A工程是想把对话框独立出来复用, 也可以减小A.exe的大小)
A: source files
A.cpp
...
head files
A.h
...
resources
Bitmap
IDB_BITMAP_B(只在对话框 IDD_DIALOG_D 中用)B: source files
B.cpp
C.cpp(对应对话框资源 IDD_DIALOG_D)
...
head files
B.h
C.h
...
resources
Dialog
IDD_DIALOG_D Bitmap
IDB_BITMAP_B(只在对话框 IDD_DIALOG_D 中用)B 编译后生成 B.dll, 把 B.lib 链接到工程 A 编译出 A.exe, 最后把 A.exe 和 B.dll 放一起运行.我觉得 B.dll 中有 bmp 资源, A.dll 中也有bmp资源,
但为什么我把改造后的 A 工程中的 bmp 资源删除后编译的 A.exe
和 B.dll 放在一起运行时对话框上的图片没有了?
AFX_MANAGE_STATE(AfxGetStaticModuleState());
还有,要加楼上的那一句
原来B.dll中加载bmp的方法:
::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_B));修改后B.dll中加载bmp的方法:
::LoadBitmap(::GetModuleHandle("B.dll"), MAKEINTRESOURCE(IDB_BITMAP_B));修改前得到的是exe的实例句柄,修改后得到dll的句柄,即mfc extension dll中 AfxGetInstanceHandle()
返回的是exe的实例句柄。