C++动态链接库(二)

MFC规则DLL

转自:http://blog.csdn.net/callbackfunc/article/details/7233894#

本例通过新建一个MFC规则DLL并新建一个MFC对话框程序调用它,演示MFC规则DLL的创建及调用。(VS2010环境下实例代码亲测可编译通过)

一、MFC规则DLL项目

1.创建MFC规则DLL

2.新建global.cpp(新建此文件没有特殊意义,仅用于单独添加创建并显示对话框的代码)并添加以下代码:

[cpp]  view plain  copy
 print ?
  1. # include "stdafx.h"  
  2. # include "dlldialog.h"  
  3. //定义输出库函数,以被MFC程序调用  
  4. extern "C" __declspec(dllexportvoid ShowDlg(void)  
  5. {  
  6.     //添加AFX_MANAGE_STATE宏,进行DLL模块状态资源的切换  
  7.     AFX_MANAGE_STATE(AfxGetStaticModuleState());  
  8.     //创建DLL对话框  
  9.     dlldialog dllDialog;  
  10.     dllDialog.DoModal();  
  11. }  

3.添加了一个对话框资源,并向其加入按钮一个

4.双击3创建的DLL对话框资源,向该对话框添加dlldialog类

5.双击3对话框中创建的按钮,为该按钮添加代码:

[cpp]  view plain  copy
 print ?
  1. //添加DLL内部对话框中按钮的事件处理程序代码  
  2. void dlldialog::OnBnClickedButton1()  
  3. {  
  4.     MessageBox(_T("调用DLL内部对话框成功!"));  
  5. }  

6.向dlldialog.h添加了一个头文件,以解决找不到对话框资源的问题

[cpp]  view plain  copy
 print ?
  1. # include "resource.h"//务必手动添加此条语句!否则在VC++2010环境下编译会报“IDD_DIALOG1未定义的标识符”的错  

7.生成mfcdll

二、创建callmfcdll MFC对话框程序

1.创建MFC对话框程序以用于调用mfcdll生成的dll

2.添加了一个对话框资源,并向其加入按钮一个

3.双击1对话框中创建的按钮,以动态显式调用生成的dll文件

[cpp]  view plain  copy
 print ?
  1. void CcallmfcdllDlg::OnBnClickedButton1()  
  2. {  
  3.     //声明函数指针  
  4.     typedef void (*lpCall)(void);  
  5.     //创建dll句柄  
  6.     HINSTANCE hDll;  
  7.     //装载dll  
  8.     hDll = LoadLibrary(_T("mfcdll.dll"));  
  9.     if(NULL==hDll)  
  10.     {  
  11.         AfxMessageBox(_T("DLL加载失败!"));  
  12.     }  
  13.     //检索指定DLL中的输出库函数地址  
  14.     lpCall pShowDlg=(lpCall)GetProcAddress(hDll,"ShowDlg");  
  15.     if(NULL==pShowDlg)  
  16.     {  
  17.         AfxMessageBox(_T("DLL内部函数调用失败!"));  
  18.     }  
  19.     //创建DLL对话框  
  20.     pShowDlg();  
  21. }  

4.生成callmfcdll


静态调用MFC规则dll


1、以上完成了MFC规则dll(或称共享的MFCdll)的动态调用,下来完成其静态调用。

2、静态调用需要三个文件.dll  .lib   和.h文件,其中有很多.h文件到底要那个.h文件?比如下面调用Myproc()函数,就要有这个函数声明的头文件。

3、声明中加上两句话

#include "regularDll.h"
#pragma comment (lib,"regularDll.lib")

4、调用的时候直接调用就可以

5、或者可以去掉#include "regularDll.h"加上函数的声明extern “C” __declpec(dllimport) int Mypro();也是可以的。


三、测试运行

将mfcdll项目中编译生成的mfcdll.dll放在callmfcdll项目中生成MFC程序的Debug文件夹下,双击打开生成的应用程序并点击其对话框中间位置的按钮,即发现调用成功

附:已将该项目的整套实例代码打包上传至本人的资源频道(下载地址为:http://download.csdn.net/detail/callbackfunc/4032396),用户可自行下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值