MFC生成带控件的dll以及dll的调用

来源:互联网 发布:辰森餐饮软件 编辑:程序博客网 时间:2024/04/30 04:11

之前没有做过dll方面的工程,但是由于最近需要,于是就做了这方面的工作,从一窍不通到总算做出来了,期间问过了很多位大神,大家给的方式都不同,搞得我是晕头转向。最后,总算明白了一点点其中的道理。
要做dll,首先得创建一个dll工程,这里一路默认即可,例如命名为:testdll。由于我们要将dll文件和接口文件发送给别人使用,所以这个时候就要创建接口文件并且制定接口函数。最后对方只要得到这个接口文件和dll,就能够调用你的实现文件中的函数了。在这里假定将这个接口文件命名为:interface,在其中添加代码,如下:

然后需要将这个接口文件进行实现化,则在工程中添加类,假定命名为,InterfaceImpl,代码示例如下:

#ifdef EXPORT #define  EXPORT_DLL  extern "C" __declspec(dllexport)#else#define EXPORT_DLL extern "C" __declspec(dllimport)#endifclass Interface{public:    //这里特别注意,由于重载删除对象的时候,需要先将子类进行析构之后才会析构父类,所以需要创建一个虚的析构函数    virtual  ~Interface()    {    }    virtual void  Create(CWnd * hParent)=0;    virtual void  Show(bool ) =0;};//创建两个最为基本的函数DllExport Interface * CreateDll();DllExport int ReleaseITIC(Interface *itic );

#pragma once#define DllExport//添加接口头文件目录#include "../../include/ITIC.h" class CInterfaceImpl : public CStatic,public Interface{    DECLARE_DYNAMIC(CInterfaceImpl)    public:    CInterfaceImpl();    virtual ~CInterfaceImpl();//将继承接口中的成员函数进行实现    public:};DllExport Interface* CreateDll(){    return new CInterfaceImpl;}DllExport int ReleaseInterface(Interface *itic ){    delete itic;    return 1;}

然后就可以对文件进行编译,生成dll。
在新建一个工程,命名为:testdemo,用来测试这个dll是否正常,新建一个基于对话框的工程,在里面加载上dll,同时添加头文件。
#include "../../include/Interface.h" 

然后就可以完成对这个控件dll的调用了,我的调用效果如下:

这其中有些部分还是挺麻烦的,不过我也总算知道了这个过程,得感谢诸位大神的相助啊。