《DLL for Win32/MFC》Part 5, DLL MFC Client Application
这是一个MFC应用程序。它为DLL函数DrawEllipse中使用的MFCCBrush对象提供了框架,一个窗口。
现在,我们要创建MFC应用程序项目MFCAp。
1、关闭任何打开的工作空间和文件,然后在文件目录下选择新建;
2、选择工程:MFC AppWizard(exe);
3、在项目名称框中给项目合适的名称:MFCApp,然后点确认;
4、选择“Single document”选项按钮,点击完成和确认。
选择在查看菜单栏下选择“类向导”。消息映射栏会被激活。在“类名称”的下拉框中选择“CMFCAppView”。在“消息函数”列表框中双击“OnDraw”函数标签。
你会在类视图中看到OnDraw函数的代码。复制粘贴下列代码段来替换OnDraw()函数中原来固有的代码段:
//画一个圆 CRect rect; rect.top = 10; rect.left = 10; rect.right = 200; rect.bottom = 200; DrawEllipse(&rect,pDC); int a,b,c; CString str; Dllclass classFromDLL; classFromDLL.Arg=6; a = classFromDLL.Add(3,2); b = classFromDLL.Sub(3,2); c = classFromDLL.Arg; //将DLL中的各个参数显示出来 int y=250,dy; TEXTMETRIC tm; pDC->GetTextMetrics(&tm); dy = tm.tmHeight + tm.tmExternalLeading; str.Format("DLL Add function return: %d" ,a); pDC->TextOut(20,y,str); y +=dy; str.Format("DLL Sub function return: %d",b); pDC->TextOut(20,y,str); y +=dy; str.Format("DLL Arg Variable return: %d",c); pDC->TextOut(20,y,str); y +=dy; a = DLLArg; b = DLLfun2(30); str.Format("DLL class Arg Variable return: %d" ,a); pDC->TextOut(20,y,str); y += dy; str.Format("DLL function \"DLLfun2\" return: %d",b); pDC->TextOut(20,y,str);
在文件 MCFAppView.cpp的顶部, 某个地方比如: #include "stdafx.h"这句的下方插入以下代码:
#include "DLLCode.h"
保存并关闭MFCAppView.cpp 文件。在工程目录下选择设置,选择链接栏,在"Object/Library modules:"文本框中输入: "RDLLMFC.lib",不需要引号。点击确认。
现在,最小化窗口,复制以下文件到 MFCApp工程目录下
- RDLLMFC\Debug\RDLLMFC.DLL
- RDLLMFC\Debug\RDLLMFC.lib
- RDLLMFC\DLLCode.h
最大化窗口,点击“!”按钮编译运行。
关闭的提示:你不能改变DLL接口,特别是导出类对象,因为V_表和类尺寸是和运行时间相匹配的。如果你改变DLL和其他使用它的程序,你需要重新命名一个新的版本;或者是,你必须编译所有的基于那个新接口DLL的所有程序。
/********************************************************************************************
一般是不需要这一步的,注意是写DLL头文件时要用(不是ifndef):
#ifDef DLLDIR_EX
#define DLLDIR __declspec(export)
#else
#define DLLDIR __declspec(import)
#endif
/********************************************************************************************
注意:有时候会出现调用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 here DLLfun2 DrawEllipse DLLArg保存并重新编译RDLLMFC工程。复制(不 是移动 ) \RDLLMFC\Debug\RDLLMFC.dll这个文件到MFCApp 工程目录下。运行应用程序,程序会找到变量”DLLArg“的。
注意:不能导出类对象到DLL中,因为库对象随着头文件已经包含了那些信息了。
/********************************************************************************************