首页
社区
课程
招聘
[原创]非MFC程序如何调用MFC扩展DLL
发表于: 2012-4-3 14:10 11641

[原创]非MFC程序如何调用MFC扩展DLL

2012-4-3 14:10
11641

非MFC程序 不可以直接调用mfc extension dll.
如果想这么做,必须加一个中间dll,由中间dll调用mfc extension dll.
如果采用vc. 这个中间dll必须采用 Regular Dll using shared MFC DLL.
需要注意的问题
由于这个中间dll有个CWinApp的派生实例,这个实例::InitInstance可以调用需要初始化的函数(如        AfxEnableControlContainer();,AfxInitRichEdit();) 。 如CDLLApp theApp;这样可以初始化一些afx相关的线程变量;
1.创建另外一个线程(在这称为mfc线程),用下面函数,关键是dlg.DoModal有消息循环。
void initmyapp(LPVOID lpParam )
{
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        CPDllDlg dlg;
        theApp.m_pMainWnd=&dlg;
        dlg.DoModal();
}
另外一个线程不致于阻塞主线程(源自非MFC程序调用)调用函数过程。
由于mfc extension DLL中可能有模态或非模态窗口,需要这个消息循环很重要。
2.mfc中很多过程需要在mfc线程中调用才可以,这样可以用postmessage or sendmessage,
sendmessage(dlg.m_hWnd,msgid,wp,lp), 从主线程转到mfc线程执行。

3.另外mfc extension dll的加载最好在mfc线程用afxloadlibary加载。

这些方法,也是摸索了一段时间,才找到解决方法。所以不想别人也摸索很久,特意把主要的思路写出来。
如果大家用此方法有问题,可以邮件联系我。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 6
支持
分享
最新回复 (10)
雪    币: 238
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
广告位招商。
2012-4-3 14:14
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
这些方法,也是摸索了一段时间,才找到解决方法。所以不想别人也摸索很久,特意把主要的思路写出来。
如果大家用此方法有问题,可以邮件联系我。

楼主的分享精神很值得赞扬,但是楼主莫怪小弟点评,楼主走的是山路水路....
封装一个MFC常规DLL来做中间DLL繁琐不说,还会出现许多新问题~

解决这个问题其实很简单!非MFC程序调用你只需在#include 前增加1个宏定义即可.

如下:
#define AFX_EXT_CLASS  __declspec(dllexport)
#include "CMyclass.h" // CMyclass.h是MFC拓展dll导出的类头文件
2012-4-3 15:16
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
你可以自己测试一下.........
2012-4-3 15:18
0
雪    币: 122
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
nice nice
2012-4-6 09:32
0
雪    币: 60
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看下 没试过
2012-4-6 10:25
0
雪    币: 217
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
3楼的说法是没有明白我说的什么意思?你自己做一个就领悟到我说得什么意思。
你说的是一般dll的用法,和这个帖子说的不是一回事。
你做的mfc extension dll 中不是简单的dll,需要用到richedit,资源等.
2012-4-8 08:52
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
3楼没有说错的 mfc dll导入和普通dll其实没有什么区别 ..人为区分出来的而已 编译器都支持
2012-4-8 12:13
0
雪    币: 217
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
论坛上有一个同题目的求助贴。楼上看看,就知道怎么回事了。
http://bbs.pediy.com/showthread.php?t=71290&highlight=MFC+DLL+%E7%A8%8B%E5%BA%8F+%E5%BA%8F%E5%A6%82+%E5%A6%82%E4%BD%95+%E4%BD%95%E8%B0%83+%E8%B0%83%E7%94%A8+%E6%89%A9%E5%B1%95+%E5%B1%95
2012-4-8 16:41
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
10
任意非MFC都可以简单调用MDC扩展DLL。
我在测试完成功之后给你回复的,
您也可以自己动手试着认证,

我的结论是正确..........
2012-4-8 16:57
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
11
跟MFC拓展DLL是否用到richedit控件无关...............
2012-4-8 16:58
0
游客
登录 | 注册 方可回帖
返回
//