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();
}

到此,整个过程就算完毕了。

洋洋洒洒写了这么多,不知道写明白了没有,如果有任何问题,欢迎留言补充。

MapGIS67中清除重复点的方法小结 VC++开发GIS系统(2)warning C4273: dll链接不一致

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

已有 2 条评论

  1. 蹦沙卡拉卡
    1#
    蹦沙卡拉卡  · 2016-04-22 12:26

    哈哈

  2. 哈利波特
    2#
    哈利波特  · 2016-11-04 22:15

    厉害了我的哥!

发表评论