MFC扩展动态链接库

我接触DLL的时间也不长,对DLL的了解也不是很深,在这里以一个简单的例子说明一下应用程序与DLL是如何工作的,希望给初学者一些帮助。文章附有源码,以编译通过。

一、创建动态链接库:

1,启动VC,在Project选项卡中选择MFC AppWizard[dll],输入工程名字,单击OK,然后选择MFC Extension DLL(using shared MFC DLL),单击完成。

2,在cpp文件中定义函数ShowMessage(),如下所示: extern "C" _declspec(dllexport) void ShowMessage() { AfxMessageBox("The function is in the MFC Dll"); } 说明,extern "C" 表示该函数可以在不是用C++语言所写的应用程序中使用。dllexport说明函数是导出函数。当然,要导出函数还可以在def文件中加入函数名即可。

3,编译连接,生成dll文件(在debug目录下)。

二、创建应用程序:

在这里创建一个基于对话框的应用程序。添加一个编辑框,用于显示所加载链接库的路径。三个按钮,一个用于打开文件,让用户选择所要加载的链接库;一个用来加载链接库并调用链接库中的函数,另一个用于退出应用程序。 代码如下所示:

void CUseDll2Dlg::OnSelect() //选择所要加载的链接库
{ // TODO: Add your control notification handler code here
CString filter;
filter="Dll(*.dll)|*.dll|All Files(*.*)|*.*||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);
if(dlg.DoModal()==IDOK)
{ m_strPath=dlg.GetPathName(); }
UpdateData(FALSE);
}
void CUseDll2Dlg::OnButtonRun()
{ // TODO: Add your control notification handler code here
HMODULE hdll=::LoadLibrary(m_strPath);//加载链接库
if(hdll==NULL) {
MessageBox("加载动态链接库失败!","Warning",MB_OK|MB_ICONWARNING); return;
}
typedef void (*pShow)();
pShow Show=(pShow)::GetProcAddress(hdll,"ShowMessage");
if(Show==NULL) {
MessageBox("The function can not be found!","Warning",MB_OK|MB_ICONWARNING);
} else
Show(); //调用
}

时间: 2024-11-08 18:05:32

MFC扩展动态链接库的相关文章

VC++动态链接库编程之MFC扩展 DLL

  MFC扩展DLL与MFC规则DLL的相同点在于在两种DLL的内部都可以使用MFC类库,其不同点在于MFC扩展DLL与应用程序的接口可以是MFC的.MFC扩展DLL的含义在于它是MFC的扩展,其主要功能是实现从现有MFC库类中派生出可重用的类.MFC扩展DLL使用MFC 动态链接库版本,因此只有用共享MFC 版本生成的MFC 可执行文件(应用程序或规则DLL)才能使用MFC扩展DLL. 从前文可知,MFC规则DLL被MFC向导自动添加了一个CWinApp的对象,而MFC扩展DLL则不包含该对象

一步一步实现MFC扩展DLL中导出类和对话框

如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWizard(dll),在右边Project name下输入ExportClass,单击"下一步": 选择Mfc Exte

静态.共享的规则MFC DLL/MFC扩展DLL详解

引言:在编写MFC程序的时候,通常需要编写dll库以供其他程序调用.关于MFC dll的相关知识很多很杂,这里特酷吧结合自己学习中遇到的问题专门整理了一些MFC dll的基础知识.本部分共上下两篇文章,本文为上篇,MFC DLL应用程序类型分为以下三种:(1)使用共享MFC DLL的规则DLL(2)带静态链接MFC的规则DLL(3)MFC扩展DLL下面重点解释一下这些DLL的含义区别:一,规则DLL首先谈谈所谓的"规则DLL":"规则DLL"是由"Regu

MFC扩展DLL中导出类和对话框的实现方法_C 语言

本文实例讲述了MFC扩展DLL中导出类和对话框的实现方法,分享给大家供大家参考.具体实现方法如下: 一般来说,如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 程序运行结果如下图所示: 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWiz

实现MFC扩展DLL中导出类和对话框

如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWizard(dll),在右边Project name下输入ExportClass,单击"下一步": 选择Mfc Exte

c++-C++/MFC调用动态链接库DLL

问题描述 C++/MFC调用动态链接库DLL 我用MFC制作了一个DLL动态链接库,然后用另外一个MFC程序区调用它,但是没有效果.其程序如下: 制作一个MFC生成DLL程序,改DLL内部封装了一个函数.如下(.cpp文件): int sum(int a,int b) { char temp[200]; itoa((a+b),temp,10); CString c; c=temp; MessageBox(NULL,c,"提示",0); return a+b; } 调用DLL的代码为:

MFC 扩展库 - CJ60Lib

原来的库(MFCXLib)已经更名为CJ60Lib,这是为了与那些使用旧库的程序区别开来.本库与旧的库具有同样的功能,但是,针对Visual C++ 6.0作了几个扩展. 请按照下面的步骤来设定你的应用程序使用CJ60Lib这个MFC扩展库: 在你的工程设定(project/setting)中,选择 General 标签,确保 Microsoft Foundation Class 被设置成 Use MFC in a shared DLL. 在你的工程设定(project/setting)中, 选

Regular DLL(MFC规则DLL)、MFC...Extension DLL(MFC扩展DLL 区别

.Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用. b.Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的.明显的特点是在源文件里有一个继承CWinApp的类.其又可细分成静态连接到MFC和动态连接到MFC上的. 静态连接到MFC的动态连接库只被VC的专业般和企业版所支持.该类DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的应用程

VC MFC专题

MFC程序如何实现给对话框添加背景图片 MFC游戏开发笔记十 游戏中的碰撞检测进阶:地图类型&障碍物 MFC游戏开发笔记九 游戏中的碰撞判定初步&怪物运动简单AI MFC游戏开发笔记八 游戏特效的实现(二):粒子系统 MFC游戏开发笔记七 游戏特效的实现(一):背景滚动 MFC游戏开发笔记六 图像双缓冲技术:实现一个流畅的动画 MFC游戏开发笔记五 定时器和简单动画 MFC游戏开发笔记四 键盘响应和鼠标响应:让人物动起来 MFC游戏开发笔记三 游戏贴图与透明特效的实现 MFC游戏开发笔记二