《DLL for Win32/MFC》Part 4, MFC DLL Object

来源:互联网 发布:温州淘宝店主猝死事件 编辑:程序博客网 时间:2024/06/03 15:58

《DLL for Win32/MFC》Part 4, MFC DLL Object                                                                                                                                

这次,我们要为工程创建MFC DLL核心文件,工程名为RMFCDLL.xxx。

1、打开Visual  C++ Studio;

2、关闭任何打开的工作空间和所有文件;

3、在文件菜单下选择新建

4、选择工程:MFC AppWizard(DLL)

5、给工程合适的名字,如:RDLLMFC,确保文件位置合适后点击确认;

6、选择”Regular DLL using shared MFC DLL” 选择按钮;

7、点击完成和确认。

接下来,我们要创建DLL声明的头文件:DLLCode.h在文件菜单下选择新建,然后选择“C/C++ Header File",并命名为DLLCode。点击确认。

复制粘贴以下代码段:

/***************************************************************************File name :DLLCode.h该文件包含了MFC的对象,提示符,你需要使用一个MFC客户应用程序。提示:我们使用相同的头文件编译.DLL和.exe(应用程序)。头文件定义了一个在使用DLL时可以导出DLL对象的宏,另外,它可以在使用DLL时将DLL对象导入到应用程序中。如果我们定义了DLLDIR_EX(一个预处理标识符),那么预处理定义宏DLLDIR(一个助记符号:DLL导入/导出指示)会成为一个导出指令,同时也默认生成一个导入指令。***************************************************************************/#ifdef DLLDIR_EX   #define DLLDIR  __declspec(dllexport)#else   #define DLLDIR  __declspec(dllimport)#endif// This prevent the C++ compiler from using decorated (modified) names for the functions extern "C" {        // Function DLLfun1, defined in the W32DLL DLL, writes to a console, not a window,       // so, it is not appropriate to call it from a MFC Client.       int  DLLDIR DLLfun2(int);       void DLLDIR DrawEllipse ( CRect, CDC* ); // a MFC function call};extern int  DLLDIR DLLArg;class DLLDIR Dllclass{   public:      Dllclass();          // Class Constructor      ~Dllclass();         // Class destructor      int Add(int, int);   // Class function Add      int Sub(int, int);   // Class function Subtract      int Arg;};

保存并关闭头文件。现在我们要创建DLLCode.cpp文件。在菜单文件下选择新建,然后选择“C++ Source File”。命名为:DLLCode。点击确认。

复制粘贴下列代码段:

/************************************************************************//* File name : DLLCode.cpp头文件,DLLCode.h中包含了所有DLL接口对象的原型                                                                     *//************************************************************************/#include "StdAfx.h"#include "DLLCode.h"int DLLfun2(int a) { return a<<1; };int DLLArg = 100;Dllclass::Dllclass() {};Dllclass::~Dllclass() {};int Dllclass::Add(int a, int b){   return a + b;};int Dllclass::Sub(int a, int b){   return a - b;};void DrawEllipse ( CRect rect, CDC *pDC ){CBrush brush;brush.CreateSolidBrush(RGB(0,0,255));pDC->SelectObject(&brush);pDC->Ellipse(&rect);};

现在,我们在“工程”目录下选择“设置”,选择C/C++栏。在“预处理程序定义”中附加或者插入“,DLLDIR_EX”(不需要引号)到文本框中,然后点击确认。

单击“!”键编译,创建,运行RDLLMFC项目。关闭”可执行调试对话“的对话框,提前执行DLL。那么我们就创建了Win32 DLL并导出了库。

/********************************************************************************************

注意:有时候会出现调用DLLArg不成功的情况,这是要有一下的步骤才能成功

分割线下面的片段是为了访问全局变量DLLArg。。为了把全局变量名加到DLL对象中,你必须加入一个新的文本文件到W32DLL工程中

在文件菜单下点击新建,选择文本文件,命名为”RDLLMFC.def“,”def“文件扩展很重要。点击确定。

加入下列代码:

; RDLLMFC.def : Declares the module parameters for the DLL.LIBRARY      "RDLLMFC"DESCRIPTION  'RDLLMFC Windows Dynamic Link Library'EXPORTS    ; Explicit exports can go hereDLLfun2DrawEllipseDLLArg
保存并重新编译RDLLMFC工程。复制(不是移动\RDLLMFC\Debug\RDLLMFC.dll这个文件到MFCApp 工程目录下。运行应用程序,程序会找到变量”DLLArg“的。——此句是后面一节提到的,此处可忽略。

注意:不能导出类对象到DLL中,因为库对象随着头文件已经包含了那些信息了。

/********************************************************************************************


运行后的生成库文件:


0 0
原创粉丝点击