概述

DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。

仓库的发展史经历了"无库" ---> "静态链接库"  ---> "动态链接库"。

静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。

库的分类

1.Win32库(非MFC)库

    Win32库又分为:动态链接库和静态链接库

    Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。

2.MFC库

    MFC库又分为:MFC规则DLL和MFC扩展DLL

    MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。

    MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。

创建MFC动态链接库

使用vs2010进行创建

1.“新建项目” 项目名为"wnMFCdll”--->选择"MFC dll" --->选择"MFC 扩展 DLL",点击完成:

创建头文件wnMFCdll.h,添加如下代码:

#ifndef _WNMFCDLL_H
#define _WNMFCDLL_H class Student
{
public:
void WN_SetAge(int age);
void WN_SetName(char* p);
void WN_Printf();
private:
int age;
char name[32];
}; #endif

源文件wnMFCdll.cpp 添加如下代码:

// wnMFCdll.cpp : 定义 DLL 的初始化例程。
// #include "stdafx.h"
#include <stdio.h>
#include "wnMFCdll.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif void Student::WN_SetAge(int age)
{
this->age = age;
} void Student::WN_SetName(char* p)
{
strcpy(this->name, p);
} void Student::WN_Printf()
{
printf("name = %s; age = %d", name, age);
}

在wnMFCdll.def文件中添加如下内容:

; wnMFCdll.def : 声明 DLL 的模块参数。

LIBRARY

EXPORTS
; 此处可以是显式导出
WN_SetAge
WN_SetName
WN_Printf

编译该项目,会在Debug目录下生成wnMFCdll.dll和wnMFCdll.lib两个文件

调用MFC动态链接库

鼠标在解决方案右击  ---> "添加" ---> "新建项目",项目名称为"wnMFCTest",选择win32控制台项目,勾选"控制台应用程序"和"MFC"

修改源文件wnMFCTest.cpp内容如下:

// wnMFCTest.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "wnMFCTest.h"
#include "../wnMFCdll/wnMFCdll.h" #ifdef _DEBUG
#pragma comment(lib, "../Debug/wnMFCdll.lib")
#define new DEBUG_NEW
#endif // 唯一的应用程序对象 CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
//测试MFC dll
//Student stu(18, "wangpengfei");
Student stu;
stu.WN_SetAge(30);
stu.WN_SetName("woniu201");
stu.WN_Printf(); return 0;
}

编译连接生成libTest.exe文件,执行结果如下:

欢迎加群交流:C/C++开发交流

VC++:创建,调用MFC动态链接库(扩展DLL)的更多相关文章

  1. electron 使用 node-ffi 调用 C++ 动态链接库(DLL)

    一.为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序: 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的: 需 ...

  2. Windows下VS2013创建与使用动态链接库(.dll)

    一.创建动态链接库文件 ** 1.打开VS2013,选择文件,新建工程  2.选择新建W32控制台应用程序,这里将工程名改为makeDLL  3.在应用程序类型中选择DLL,点击完成  4.完成以上步 ...

  3. java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法

    我们经常会遇到需要java调用c++的案例,这里就java调用DLL本地动态链接库两种方式,和加载过程中遇到的问题进行详细介绍 1.通过System.loadLibrary("dll名称,不 ...

  4. 关于Java通过JNI调用C 动态链接库(DLL)

    JNI介绍 用JNI实现Java和C语言的数据传递 JNI原理分析和详细步骤截图说明 jni的JNIEnv指针和jobject指针 JNI实现回调| JNI调用JAVA函数|参数和返回值的格式 Jni ...

  5. VC++:创建,调用Win32动态链接库

    VC++:创建,调用Win32动态链接库 概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类.仓库的发展史经历 ...

  6. MFC的规则DLL与扩展DLL

    一.MFC规则DLL     MFC规则DLL可以在该dll内部使用MFC,但是与应用程序的接口不能是MFC的.能够被所有支持dll的编程语言所写的应用程序使用,当然也包括使用MFC创建的应用程序.在 ...

  7. C# 调用C++/MFC写的dll

    C#调用C++的非托管类的dll其实很简单基本就是固定的调用格式. dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可.然后就是添加一个类添加一个方法.方法排头固 ...

  8. VC++创建、调用dll的方法步骤

    文章来源:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有 ...

  9. VC++:创建,调用Win32静态链接库

    概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类. 仓库的发展史经历了"无库" ---& ...

随机推荐

  1. JavaEE三层架构与MVC

    JavaEE三层架构与MVC 摘要与总结 等下总结下 MVC模式 Model1 ​ 说到设计模式,不得不提一下之前的的Model1.据说早期对于java企业项目的开发,用的是Jsp+JavaBean的 ...

  2. ELF格式说明

    ELF file header (ELF文件头) /* The ELF file header. This appears at the start of every ELF file. */ #de ...

  3. 为什么会选择redis数据库?

    因为redis支持主从同步,而且数据都是缓存在内存中,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高

  4. TS声明文件

    now我们来看一看TS怎么声明文件, 在JS里面我们经常会使用各种第三方类库,引入方式也不太相同,常见的就是在HTML中通过script标签引入,然后就可以使用全局变量$或者jQuery了 我们通常这 ...

  5. 缓冲区 cin() getline() getchar()

    ; } 只输入了一行abc, 然后回车后就输出一行abc, 一行空 这是因为cin在缓冲区里丢下的\n 给后面的getline()当成输入结束的标志了 二.getline(cin, str) 输入结束 ...

  6. 搭建JavaWeb应用开发环境——Tomcat服务器

    学习web开发,需要先安装一台web服务器,然后再在web服务器中开发相应的web资源,供用户使用浏览器访问. 搭建JavaWeb应用开发环境——Tomcat服务器 1.疑问:学习web开发,为什么必 ...

  7. php手记之01-tp5框架安装

    1.1.介绍 在web领域,PHP是所有编程语言中比较受欢迎的一门语言! PHP已经诞生出几十种编程框架!但国内最热门和使用率最好的框架有Thinkphp和Laravel这两款PHP框架! 1.2.为 ...

  8. vue.js中如何使用scss

    要使用 <style lang="sass"> 請記得要裝相依的套件 $ npm install sass-loader node-sass vue-style-loa ...

  9. keras Model 1 入门篇

    1 入门 2 多个输入和输出 3 共享层 最近在学习keras,它有一些实现好的特征提取的模型:resNet.vgg.而且是带权重的.用来做特诊提取比较方便 首先要知道keras有两种定义模型的方式: ...

  10. Python Re 模块超全解读

    re模块下的函数 compile(pattern):创建模式对象 import re pat=re.compile('A') m=pat.search('CBA') #等价于 re.search('A ...