MFC扩展DLL 资源句柄问题

oaeo 2011-11-08 03:24:10
上个图先……


图中的ADll是一个DLL工程,属于MFC扩展DLL。在资源中添加了一个对话框IDD_SHOW,然后为该资源创建了一个CShow类(Show.h/Show.cpp),添加了AFX_EXT_CLASS,并在stdafx.h中添加了"#include resource.h"。
编译OK,该工程完成……

再看下面一个调用该DLL的对话框MFC应用程序:Stub。在对话框上添加一个按钮,增加双击消息响应函数,如下所示:


void CStubDlg::OnBnClickedDirect()
{
// TODO: 在此添加控件通知处理程序代码

// AFX_MANAGE_STATE(AfxGetStaticModuleState())
HINSTANCE curInstance = AfxGetInstanceHandle();
HINSTANCE dllInstance = GetModuleHandle("ADll.dll");

AfxSetResourceHandle(dllInstance);

CShow show("IDD_SHOW");
show.DoModal();

AfxSetResourceHandle(curInstance);
}


继续在该cpp文件中添加如下内容:


#include "../ADll/Show.h"
#pragma comment(lib, "../Debug/ADll.lib")


编译OK,改项目也完成了~

----------------哥-------------个---------------------割-------------------嗝-----------------

运行Stub,然后点击调用DLL的按钮,结果无反应……
再回到上图,看curInstance 和dllInstance 这两个变量,通过调试,发现两者的值是一样的。这是肿么回事?
在网上查过好多资料了,有一种解决方法是,在DLL中另建一个导出类,在导出类中调用目标类,在应用程序中和导出类来打交道。感觉这样中转一下有点麻烦,难道就不能直接使用这个目标扩展类么?

求大牛帮忙解释上面的问题……小弟不甚感激涕零内牛满面

另:征MFC高手一枚当师傅用,莫愁姐优先~
...全文
166 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chaoojie 的回复:]

引用 3 楼 agoago_2009 的回复:

AfxGetInstanceHandle
HINSTANCE AfxGetInstanceHandle( );

Return Value

An HINSTANCE to the current instance of the application. If called from within a DLL linked with……
[/Quote]
那就用 GetCurrentProcess
oaeo 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 agoago_2009 的回复:]

AfxGetInstanceHandle
HINSTANCE AfxGetInstanceHandle( );

Return Value

An HINSTANCE to the current instance of the application. If called from within a DLL linked with the USRDLL version of MF……
[/Quote]

额……啥意思?
我那个就是要获取调用者的HINSTANCE,而不是DLL的HINSTANCE。这段代码不是在DLL里面。
Gloveing 2011-11-08
  • 打赏
  • 举报
回复
AfxGetInstanceHandle
HINSTANCE AfxGetInstanceHandle( );

Return Value

An HINSTANCE to the current instance of the application. If called from within a DLL linked with the USRDLL version of MFC, an HINSTANCE to the DLL is returned.

Remarks

This function allows you to retrieve the instance handle of the current application. AfxGetInstanceHandle always returns the HINSTANCE of your executable file (.EXE) unless it is called from within a DLL linked with the USRDLL version of MFC. In this case, it returns an HINSTANCE to the DLL.
oaeo 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caddor 的回复:]

不用你搞了这么复杂,添加对话框资源,然后关联类,

导出类就可以用了
[/Quote]

大哥意思是说不需要资源句柄的转换直接使用CShow?我试了不行哦……
caddor 2011-11-08
  • 打赏
  • 举报
回复
不用你搞了这么复杂,添加对话框资源,然后关联类,

导出类就可以用了

第4章 MFC实用技术 93 4.1 MFC常用宏应用 94 0188 获取32位整数的低字节和高字节数据 94 0189 将两个16位数组合为一个32位数 94 4.2 MFC常用函数 94 0190 MFC常用调试函数 94 0191 判断某个句柄是否关联一个窗口 95 0192 MFC应用程序信息和管理函数 95 0193 Internet URL解析全局函数 95 4.3 MFC框架技术 96 0194 在类的定义时使其具有运行时类型识别的功能 96 0195 运行时判断某个对象是否是指定的类型 96 0196 禁止文档/视图应用程序运行时显示视图选择窗口 96 0197 多个窗口消息共享同一个消息处理函数 98 0198 遍历对话框中的子控件 99 0199 在程序中捕捉CException及其派生类的异常 100 0200 扩展消息映射宏 100 0201 THIS_FILE的含义 100 0202 为静态文本控件命名 100 0203 在基于对话框的应用程序中添加文档\视图的支持 101 0204 解析浮动状态下工具栏的父窗口 101 4.4 MFC编程技术 101 0205 根据位图资源ID获取位图大小 101 0206 将某个控件对象关联到对话框中的控件资源 102 0207 将一个全局函数指针关联到对话框类的某个方法 102 0208 修改应用程序的图标 102 0209 使用安全数组 103 0210 将子窗口的客户区域映射到父窗口中 103 0211 判断两个时间段的差距 103 0212 重新设置工程名称 103 0213 为dll文件生成lib文件 104 0214 如何将一个工程中的部分资源加到另一个工程中 104 0215 根据句柄获得窗口对象的方法 104 0216 如何共享MSDN 104 0217 从完整的文件名中去除路径 104 0218 从复合字符串中解析子串 105 0219 如何获得应用程序的完整路径 105 0220 修改对话框图标的几种方法 105 0221 将多个具有不同参数的函数赋值为同一个函数指针 105

15,471

社区成员

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

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