VC++开发GIS系统(1)使用DLL导出类编程示例
这是VC++开发GIS系统的第1篇文章,将介绍VC++开发一个GIS系统的基础知识:dll编程。
关于dll编程,这里抛开复杂的dll相关概念,需要的可以自行Google(PS:其实就是我也不懂),本文将从一个示例说起,讲解GIS系统开发中涉及的dll编程技术。
关于这个示例
本文主要实现的功能是点击菜单->弹出对话框->对话框完成加法运算。如图:
其实功能很简单,完全可以不用dll来写,但是为了演示dll的使用方法,这里就作一个示例,仅供参考罢了。
第一步:首先建立程序目录
这个实际就是dll工程和MFC主工程的输出目录,至于什么是输出目录先不用管,就新建一个文件夹就行,本文建立的文件夹位置是:
D:\win32\NewMala\testDllOut
第二步:新建一个MFC应用程序项目
本文使用的是VS2010
(1)步骤是文件--新建--项目,打开新建项目对话框
(2)选择MFC应用程序。
(3)设置好路径和工程名
(4)没有意外的话,经过上面会成为新建一个MFC应用程序的工程,下面的步骤是设置工程的输出目录。设置方法:
在工程上右击,选择属性
在配置属性--常规--输出目录,设置输出目录就是在第一步中新建的文件夹。如图:
(5)编译一次工程(F7),会在
D:\win32\NewMala\testDllOut
目录中生成相关文件。
第三步:新建一个MFC(DLL)工程
(1)新建一个MFC(DLL)工程
在解决方案上右击,选择添加--新建项目
选择MFC DLL
输入名称,本示例的名称是:testDllfile,这里选择“mfc扩展dll”,没有至于其他的使用方法,会在后方讲到。
(2)设置工程的输出目录
这同第二步的(4)设置方法是一样的,这里就不赘述了。输出目录和第二步的(4)也是一致的。
(3)添加一个对话框资源,并且在里面添加相应控件。
切换到资源视图,默认是没有对话框资源的,需要右击--选择添加资源。
并在资源上添加相关控件,为资源新建一个类,同时为控件添加相应的变量。(根MFC中添加方法一样,这是MFC编程的基础知识,如果这里不会请自行Google或找相关参考书。)效果如图:
(4)为确定按钮添加相关代码
void CComputeDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 this->UpdateData(true); mSum=mAdd1+mAdd2; this->UpdateData(false); //CDialog::OnOK(); }
因为计算结果要实时显示,所以这里注释了关闭OnOK操作。
(5)编译DLL(F7)工程
注意:这里只编译第三步的DLL工程,即在testDllfile右击,选择生成
这里会报错,这时候需要在对话框头文件中添加
#include "resource.h"
编译即可通过。
(6)添加一个普通的C++类CCallDlg用于导出窗口显示函数
切换到类视图,右击--添加--类
选择C++类
(7).这样会生成两个文件,CallDlg.h和CallDlg.cpp文件
在CallDlg.h中添加如下代码,用于导出这个类。
#ifndef _CALLDLG_H_EXPORT #define CALLDLG_EXPORT __declspec(dllimport) #else #define CALLDLG_EXPORT __declspec(dllexport) #endif
同时,将类的声明
class CCallDlg { public: CCallDlg(void); ~CCallDlg(void); };
改为
class CALLDLG_EXPORT CCallDlg { public: CCallDlg(void); ~CCallDlg(void); };
(8)添加调用设置对话框函数
void calldlgup();
并且在cpp中讲这个函数实现,实现代码:
void CCallDlg::calldlgup() { CComputeDlg tDlg; tDlg.DoModal(); }
(9)设置编译后的事件处理,将CallDlg.h文件拷贝到开始建立的文件夹里。设置方法:右击--属性--配置属性--生成事件--后期生成事件--命令行
copy CallDlg.h D:\win32\NewMala\testDllOut
至此,DLL工程编辑完毕。
第四步:MFC应用程序调用MFC DLL
回到开始建立的testDell工程,通过一下设置实现对导出dll的调用.
(1)在testDell工程的资源中添加一个菜单,如图:
并在菜单中添加响应函数。
(2)设置VC++的包含目录和库目录,右击--属性--VC++目录
设置的目录依旧是第一步新建的文件夹。
(3)调用.h和lib文件
在菜单响应文件前面添加
#include "AllDialog.h" #pragma comment(lib, "DnsSetDll.lib")
并添加调用代码
void CtestDellView::OnCalldll() { // TODO: 在此添加命令处理程序代码 CCallDlg a; a.calldlgup(); }
到此,整个过程就算完毕了。
洋洋洒洒写了这么多,不知道写明白了没有,如果有任何问题,欢迎留言补充。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
哈哈
厉害了我的哥!
pragma comment(lib, "DnsSetDll.lib")
没有这个lib