实例一:

1、创建一个动态链接库工程,如login_dll。

2、在原工程头文件或者新建头文件如showdlg.h定义动态链接库的导出函数,代码如下:

#include "stdafx.h"
#define EXPORT __declspec(dllexport)
extern "C"  EXPORT  void __stdcall  Showdialg(char* pText);

3、在动态链接库源文件中定义showdialog函数,代码如下:

void _stdcall Showdialg(char* pText)
{
  MessageBox(NULL,pText,"提示一",0);
 }

注:此步编译后,即可生成dll与lib文件,因为_stdcall是一种比较流行的函数调用约定,(或者可以不用_stdcall),如果使用的时候,为了防止发生函数命令改编的情况,可以定义一个.def文件,其中加入EXPORTS节,设置导出函数名,如下所示:

LIBRARY      "login_dll"

EXPORTS
   Showdialg = Showdialg

4、创建一个基于对话框的工程。

5、定义一个函数指针类型,其定义与动态链接库的函数原型相同,代码如下:

typedef void  (__stdcall * funShowInfo)(char* pchData);

6、处理按键单击事件,加载动态链接库,代码如下:

void Cuse_login_dllDlg::OnBnClickedOk(){

HMODULE hMod = LoadLibrary("login_dll.dll");
 if (hMod != NULL)
 {
 funShowInfo ShowInfo;
ShowInfo = (funShowInfo)GetProcAddress(hMod,"Showdialg");
 if (ShowInfo)
 ShowInfo("传入参数成功且调用正常");
 }
 FreeLibrary(hMod);

其中,第5步与第6步是通过LoadLibrary函数动态加载链接库的方法,下面介绍一下静态加载链接库的方法:

1、加载链接库的头文件,将动态链接库头文件拷贝到当前工程中,并在当前工程头文件进行声明。

2、加载动态链接库文件,将动态链接库文件dll拷贝至当前工程目录下。

3、加载lib文件,#pragma comment (lib,"login_dll.lib")

4、处理按钮单击事件,调用动态链接库中的方法。

void Cuse_login_dllDlg::OnBnClickedOk(){

showdialog("传入参数成功且调用正常");

备注:用上述静态加载动态链接库不需要使用第五步中的typedef void  (__stdcall * funShowInfo)(char* pchData)来定义一个函数指针类型。

实例二:(实例二与实例一一样,仅供参考)

1、第一步创建一“MFC AppWizard (dll)”工程,接下来选择“Regular Dll using shared MFC DLL”,点击“Finish”。

2、添加一对话框资源到工程中,从菜单中选择Insert->Resource,添加一“Dialog”

选择“New”,至此对话框已添加到DLL工程中。

3、为对话框添加一新类,如:CTest,基类为CDialog。

4、在MFCDLL.cpp中(因创建的工程为MFCDLL)添加接口函数:

extern "C" __declspec(dllexport) void Show()
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  CTest test;
  test.DoModal ();
}

别忘了在文件中添加: #include "Test.h":),大功告成,编译吧!

5、用VC新建一对话框工程,在一按钮点击事件中添加如下代码:

typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary ("mfcdll.dll");
if(hmod==NULL)
{
  AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
  (*lpproc)();
FreeLibrary(hmod);

6、试试看,是不是DLL中对话框显示出来了:)

MFC创建动态链接库DLL并调用方法详解的更多相关文章

  1. JavaScript函数的4种调用方法详解

    在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:函数调用形式.方法调用形式.构造 ...

  2. iOS中--NSArray调用方法详解 (李洪强)

    下面的例子以     NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...

  3. 在Linux下创建分区和文件系统的方法详解

    在 Linux 中创建分区或新的文件系统通常意味着一件事:安装 Gnome Parted 分区编辑器(GParted).对于大多数 Linux 用户而言,这是唯一的办法.不过,你是否考虑过在终端创建这 ...

  4. 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解

    本文是精讲响应式WebClient第2篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 在上一篇文章为大家介绍了响应式IO模型和WebClient的基本 ...

  5. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

  6. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  7. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  8. Delphi程序调用C#.Net编译的DLL并打开窗体(详解)

    Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...

  9. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

随机推荐

  1. MYSQL主从同步故障一例及解决过程

    公司里有两个mysql服务器做主从同步,某天Nagios发来报警短信,mysqla is down...赶紧联系机房,机房的人反馈来的信息是 HARDWARE ERROR 后面信息省略,让机房记下错误 ...

  2. 《JavaScript高级程序设计》读书笔记 ---单体内置对象

    Global对象Global(全局)对象可以说是ECMAScript 中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的.ECMAScript 中的Global 对象在某种意义上是作 ...

  3. push类型消息中间件-消息发布者(二)

    1.消息发布者声明 我们以spring的方式来声明一个消息发布者: <bean id="operateLogsMessageManager" class="com. ...

  4. SSM

    今天内容安排 1:复习mybatis 2:复习springMVC 3:springMVC+spring+mybatis组合起来,搭建一个web应用开发的框架 4:用户管理系统,针对用户的CRUD操作, ...

  5. WebService第二天

    WebService第二天 课程安排:(CXF+HESSIAN) 框架CXF概述(是什么,SOA概述,下载安装) CXF快速入门(服务端.客户端开发,日志拦截器,SOAP版本相互调用的) CXF与sp ...

  6. Linux操作系统信息查看命令

    1. 查看系统内核信息 uname -a 2. 操作系统版本  cat /etc/issue | grep Linux 3. 查看CPU型号 cat /proc/cpuinfo | grep name ...

  7. SQLSERVER异机备份

    /* 作者:landv 功能:异机备份 开发时间:2016年7月2日 15:27:08 */ ) drop procedure [dbo].[p_backupdb] GO create proc p_ ...

  8. get获取Json

    前端代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <sc ...

  9. html中的a标签特例讲解

    将自己的博客写成了一个大杂烩了,遇见啥问题就写啥问题.但是当看见自己网页的成品就特别的开心. 还记得看见过的一个故事,说是收费的东西好还是免费的东西好,有一个答案是最让我记忆深刻的.回复的一个答案是: ...

  10. HDU 1242 Rescue(BFS),ZOJ 1649

    题目链接 ZOJ链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The ...