《DLL for Win32/MFC》Part 5, DLL MFC Client Application

《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中,因为库对象随着头文件已经包含了那些信息了。

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

运行结果:

《DLL for Win32/MFC》Part 5, DLL MFC Client Application_第1张图片

你可能感兴趣的:(编程,dll,mfc,vc++,应用,封装库)