VC++:创建,调用MFC动态链接库(扩展DLL)
概述
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)的更多相关文章
- electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
一.为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序: 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的: 需 ...
- Windows下VS2013创建与使用动态链接库(.dll)
一.创建动态链接库文件 ** 1.打开VS2013,选择文件,新建工程 2.选择新建W32控制台应用程序,这里将工程名改为makeDLL 3.在应用程序类型中选择DLL,点击完成 4.完成以上步 ...
- java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法
我们经常会遇到需要java调用c++的案例,这里就java调用DLL本地动态链接库两种方式,和加载过程中遇到的问题进行详细介绍 1.通过System.loadLibrary("dll名称,不 ...
- 关于Java通过JNI调用C 动态链接库(DLL)
JNI介绍 用JNI实现Java和C语言的数据传递 JNI原理分析和详细步骤截图说明 jni的JNIEnv指针和jobject指针 JNI实现回调| JNI调用JAVA函数|参数和返回值的格式 Jni ...
- VC++:创建,调用Win32动态链接库
VC++:创建,调用Win32动态链接库 概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类.仓库的发展史经历 ...
- MFC的规则DLL与扩展DLL
一.MFC规则DLL MFC规则DLL可以在该dll内部使用MFC,但是与应用程序的接口不能是MFC的.能够被所有支持dll的编程语言所写的应用程序使用,当然也包括使用MFC创建的应用程序.在 ...
- C# 调用C++/MFC写的dll
C#调用C++的非托管类的dll其实很简单基本就是固定的调用格式. dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可.然后就是添加一个类添加一个方法.方法排头固 ...
- VC++创建、调用dll的方法步骤
文章来源:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有 ...
- VC++:创建,调用Win32静态链接库
概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类. 仓库的发展史经历了"无库" ---& ...
随机推荐
- shiro 配置注解后无权访问不进行页面跳转异常:org.apache.shiro.authz.UnauthorizedException: Subject does not have permission
该问题需要使用异常管理: <!-- 无权访问跳转的页面 --> <bean class="org.springframework.web.servlet.handler.S ...
- codeforces37C
CF37C Old Berland Language sol:直接暴力模拟下去,长度加了就补0,凑个数就+1,凑不好就puts(“no”) #include <bits/stdc++.h&g ...
- Spring注解不生效
如果在使用spring中,发现注解不生效,检查下如下配置是否配置. 1:一般情况下@Autowired默认是不生效的,配置之后,才会生效 <context:annotation-config / ...
- CodeForces 787 题解
A题,因为数据范围很小,所以只要暴力即可,如果能相遇一定范围不大,如果范围很大还没相遇一定是不会相遇的了.正解应当是用扩展欧几里得计算这个方程的整数解,再想办法看看有没有正整数解才是. B题,只要看懂 ...
- Python_BDD概念
BDD概念 全称 Behavior-driven development 中文 行为驱动开发 概念 是敏捷软件开发技术的一种,鼓励各方人员在一个软件项目里交流合作,包括开发人员.测试人员和非技术人员或 ...
- element-ui框架的el-dialog弹出框被遮罩层挡住了
解决办法 在el-dialog标签里添加 :modal-append-to-body='false'
- Ionic4.x 中的 UI 组件(UI Components) Slides 轮播图组件、Searchbar 组件、 Segment 组件
Slides 轮播图组件 Ionic4.x 中的轮播图组件是基于 swiper 插件,所以配置 slides 的属性需要在 swiper 的 api 中 找 Swiper Api:http://ida ...
- 算法习题---4-1象棋(UVa1589)
一:题目 在黑方只有一个“将”的情况下,红方只有(车.马.炮)(可以多个).帅的情况下,判断黑方是否被将死 (一)题目详解 其中棋盘按照坐标方式表示,左上角为(,),列数最大9,行数最大10 G 表示 ...
- jmeter 和 postman 提交 传输类型为 "multipart/form-data" 的传送写法
Charles抓包: 请求参数Chrome抓包: jmeter写法: postman写法: 脚本的写法见 https://www.cnblogs.com/kaibindirver/p/9870900. ...
- python 中的一些基础算法:递归/冒泡/选择/插入
递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...