MFC扩展DLL导出对话框类的实现---VS2005
2016-03-13 23:40
351 查看
基于深入浅出讲的比较泛,根据找到的网上的资料的修改,因为真正实践发现不少资料有小bug。总结出下面两个例子:
Demo 1
点击较多的这篇MFC扩展DLL导出对话框类,做了少量修改 【在网上看了一下,关于“dll导出对话框类”的搜索,基本上都是2个人的帖子,大家各种转载,创建的类一个名字叫CDlgDog,另一个叫GameDlg。纵观天下大事,合久必分分久必合,blablabla……】
创建类DLL
1、新建项目 选择MFC DLL
![](https://img-blog.csdn.net/20160313221338214)
之后选MFC扩展DLL
2、给资源添加一个“Dialog”,并给对话框添加两个编辑框Edit Control。因为添加了资源,所以在“StdAfx.h”文件中加上“#include “resource.h””
对话框属性改为无边框的子对话框,在“Styles”中把Styles改成“Child”,把“Border”改成“None”
3、双击对话框,创建一个对话框类,命名为“CMusicDlg”。在类的.h头文件中的函数定义中加入AFX_EXT_CLASS
如:
![](https://img-blog.csdn.net/20160313223327516)
F7编译,此时DLL文件已经准备好。在debug文件夹下能找到ClassDLL.dll和ClassDLL.lib文件。
加载类DLL,写测试函数
1、先创建一个MFC应用程序,选择基于对话框选项,finish。
调整一下对话框的大小,用隐式加载的办法加载上面的类
2、拷贝MusicDlg.h(导出对话框的类名)和ClassDLL.lib文件到测试程序目录下,并将头文件添加到工程中。注意拷贝的时候,ClassDLL.dll应该放在debug文件夹下
3、载体对话框对应的类为CDLLappDlg。
在DLLappDlg.h头文件里添加引用,如图
![](https://img-blog.csdn.net/20160313223708853)
在CDLLappDlg的实现文件添加对ClassDLL.lib文件的引用,此处用pragma
![](https://img-blog.csdn.net/20160313223841886)
4、解决DLL类对应的对话框资源的IDD问题
在DLLappDlg.cpp实现文件里添加引用
5、在实现文件里添加初始化和函数调用的程序
在CDLLappDlg类中添加私有的成员变量和初始化函数,CMusicDlg类型的m_pMD和布尔型的InitialMD
如图:此处IDD为导出对话框对应的IDD。
在OnInitDialog中调用InitialMD。即在载体对话框类的实现代码中加入:
6、会出现的bug
在类MusicDlg的头文件中加入DECLARE_MESSAGE_MAP()
Demo 2
第二火的就是这篇类名是dog的 实现MFC扩展DLL中导出类和对话框(这个好)
创建类DLL
1、第一步依旧是新建扩展DLL
2、建立输出类
与Demo1 的区别是我们细化这个类,给他加入成员变量和函数
新建类名为CDogClass,在”Base Class”下输入CObject,然后”OK”;
DogClass.h头文件:
DogClass.cpp实现文件:
导出类:编辑DogClass.h头文件修改下面一行;class AFX_EXT_CLASS CDogClass : public CObject
3、建立对话框类,并实现输出类对它的调用
对话框类名为CDlgDog,为两编辑框添加int m_nNum和CString m_sData的变量(右键添加变量)。
添加了资源,所以在“StdAfx.h”文件中加上“#include “resource.h””
在导出类DogClass.cpp中加入#include “DlgDog.h”
在DogClass类中添加int ShowDlg();函数用来调用对话框,并在int CDogClass::ShowDlg()中添加代码
如果遇到bug:
前者是控件型后者是数据型
建立DLL 测试程序
1、新建一个基于对话框的MFC应用程序
添加一按钮IDC_BUTTON1,并在按钮事件中添加如如下代码:
2、拷贝DogClass.h、ClassNeed.lib和ClassNeed.dll
在对话框类的实现文件中加入#include “DogClass.h”行
并添加对ClassDLL.lib文件的引用,此处用pragma
Demo 1
点击较多的这篇MFC扩展DLL导出对话框类,做了少量修改 【在网上看了一下,关于“dll导出对话框类”的搜索,基本上都是2个人的帖子,大家各种转载,创建的类一个名字叫CDlgDog,另一个叫GameDlg。纵观天下大事,合久必分分久必合,blablabla……】
创建类DLL
1、新建项目 选择MFC DLL
之后选MFC扩展DLL
2、给资源添加一个“Dialog”,并给对话框添加两个编辑框Edit Control。因为添加了资源,所以在“StdAfx.h”文件中加上“#include “resource.h””
对话框属性改为无边框的子对话框,在“Styles”中把Styles改成“Child”,把“Border”改成“None”
3、双击对话框,创建一个对话框类,命名为“CMusicDlg”。在类的.h头文件中的函数定义中加入AFX_EXT_CLASS
如:
F7编译,此时DLL文件已经准备好。在debug文件夹下能找到ClassDLL.dll和ClassDLL.lib文件。
加载类DLL,写测试函数
1、先创建一个MFC应用程序,选择基于对话框选项,finish。
调整一下对话框的大小,用隐式加载的办法加载上面的类
2、拷贝MusicDlg.h(导出对话框的类名)和ClassDLL.lib文件到测试程序目录下,并将头文件添加到工程中。注意拷贝的时候,ClassDLL.dll应该放在debug文件夹下
3、载体对话框对应的类为CDLLappDlg。
在DLLappDlg.h头文件里添加引用,如图
在CDLLappDlg的实现文件添加对ClassDLL.lib文件的引用,此处用pragma
4、解决DLL类对应的对话框资源的IDD问题
在DLLappDlg.cpp实现文件里添加引用
#include "MusicDlg.h"
5、在实现文件里添加初始化和函数调用的程序
在CDLLappDlg类中添加私有的成员变量和初始化函数,CMusicDlg类型的m_pMD和布尔型的InitialMD
private: CMusicDlg *m_pMD;//使用类的时候添加的私有成员变量 bool InitialMD(void);
如图:此处IDD为导出对话框对应的IDD。
在OnInitDialog中调用InitialMD。即在载体对话框类的实现代码中加入:
bool CDLLappDlg::InitialMD() { m_pMD=new CMusicDlg; m_pMD->Create(IDD_DIALOG1,this); m_pMD->ShowWindow(SW_SHOW); return TRUE; }
6、会出现的bug
在类MusicDlg的头文件中加入DECLARE_MESSAGE_MAP()
Demo 2
第二火的就是这篇类名是dog的 实现MFC扩展DLL中导出类和对话框(这个好)
创建类DLL
1、第一步依旧是新建扩展DLL
2、建立输出类
与Demo1 的区别是我们细化这个类,给他加入成员变量和函数
新建类名为CDogClass,在”Base Class”下输入CObject,然后”OK”;
DogClass.h头文件:
#pragma once class AFX_EXT_CLASS CDogClass:public CObject { private : int m_nNum; CString m_sData; public: int ShowDlg(); void Init(); void SetNum(int num) { m_nNum = num;}; int GetNum() { return m_nNum; }; void SetData(CString data) { m_sData = data;}; CString GetData() { return m_sData; }; CDogClass(void); ~CDogClass(void); };
DogClass.cpp实现文件:
#include "StdAfx.h" #include "DogClass.h" #include "DlgDog.h" CDogClass::CDogClass(void) { Init(); } CDogClass::~CDogClass(void) { } void CDogClass::Init() { m_nNum = 0; m_sData = ""; } int CDogClass::ShowDlg(void) { CDlgDog dlg; dlg.m_nNum = GetNum(); dlg.m_sData = GetData(); if (IDOK==dlg.DoModal()) { SetNum(dlg.m_nNum); SetData(dlg.m_sData); return 1; } return 0; }
导出类:编辑DogClass.h头文件修改下面一行;class AFX_EXT_CLASS CDogClass : public CObject
3、建立对话框类,并实现输出类对它的调用
对话框类名为CDlgDog,为两编辑框添加int m_nNum和CString m_sData的变量(右键添加变量)。
public: int m_nNum; CString m_sData;
添加了资源,所以在“StdAfx.h”文件中加上“#include “resource.h””
在导出类DogClass.cpp中加入#include “DlgDog.h”
在DogClass类中添加int ShowDlg();函数用来调用对话框,并在int CDogClass::ShowDlg()中添加代码
如果遇到bug:
“DDX_Control”: 不能将参数 3 从“int”转换为“CWnd &”
DDX_Control(pDX, ***, ***);改成 DDX_Text(pDX, ***, ***);
前者是控件型后者是数据型
建立DLL 测试程序
1、新建一个基于对话框的MFC应用程序
添加一按钮IDC_BUTTON1,并在按钮事件中添加如如下代码:
void CClassAppDlg::OnBnClickedButton1() { CDogClass dog; dog.Init(); if (dog.ShowDlg()!=0) { CString str; str.Format(_T("Num is: %d Data is: %s"),dog.GetNum(), dog.GetData()); AfxMessageBox(str); } }
2、拷贝DogClass.h、ClassNeed.lib和ClassNeed.dll
在对话框类的实现文件中加入#include “DogClass.h”行
并添加对ClassDLL.lib文件的引用,此处用pragma
#include "stdafx.h" #include "ClassApp.h" #include "ClassAppDlg.h" #include "DogClass.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #pragma comment(lib,"ClassNeed.lib")
相关文章推荐
- AndroidStudio 中使用 百度地图 <五> 百度地图的搜索附近的美食,公交站台等,个人摘要
- java语法_1:面向对象:2
- 第三周作业
- 长理ACM 14-星期几(谌海军)
- C++ Exceptional 模板设计模式(Template Design Model)
- [原创]spring学习笔记:关于springsource-tool-suite插件的安装
- jfinal学习1——tomcat下搭建最初环境
- 网络图片下载设置
- LDA主题模型简介
- 第二周作业
- hdu-1286 找新朋友(欧拉函数,水题)
- 基于CentOS6.5的LNMP下memcached学习笔记的整理
- linux下posix有名信号量的简单使用示例
- Android Fragment 真正的完全解析(上)
- 第一篇学习笔记
- 基于LDA的Topic Model变形
- 产品文章理解之--10个案例说明什么是产品模型(1)
- Discuz!论坛基本搭建
- CRC查找表法推导及代码实现比较
- Pycharm创建文件模板