dll的概念、dll导出类(转)
1、 DLL的概念
静态链接库与动态链接库的区别:
(1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。
(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
(1)Non-MFC DLL(非MFC动态库):
非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;
(2)MFC Regular DLL(MFC规则DLL):
MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;
(3)MFC Extension DLL(MFC扩展DLL):MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。
而如果用其他工具来创建的exe来调用dll,就会出现问题。因为即使你不用C++编译器,Microsoft C编译器也会损害C函数。
当用__stdcall将函数输出时,C编译器会将函数改为_func@1的形式。在这里需要在.def文件中加入EXPORTS节来输出函数:
WINAPI都采用这种方式,而C/C++ 缺省的调用方式却为__cdecl。__stdcall方式与__cdecl对函数名最终生成符号的方式不同。
若采用C编译方式(在C++中需将函数声明为extern "C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,
形如_functionname@number;而__cdecl调用约定仅在输出函数名前面加下划线,形如_functionname。
(在进行函数调用时,这个序号将发挥其作用);
typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
将生成的.dll和.lib文件拷入到调用dll的工程中,用命令
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
在应用工程中引用DLL中全局变量的一个更好方法是:
class _declspec(dllexport) classname{
#include “classname.h”
我们可以在Visual C++中设置MFC规则DLL是静态链接到MFC DLL还是动态链接到MFC DLL。如图8,依次选择Visual C++的project -> Settings -> General菜单或选项,在Microsoft Foundation Classes中进行设置。
3.1规则DLL的创建;
3.2规则DLL的调用
(1)显示方式LoadLibrary , GetProcAdress , FreeLibrary
3.3共享MFC DLL的规则DLL的模块切换
4、扩展MFCDLL
1、动态链接库是将exe程序在程序执行的时候动态加载的,而静态链接库是在编译的时 将其编译在代码之中的
#pragma comment(lib,"dllTest.lib")
(2)函数:在dll中定义
转载于:https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113668.html
dll的概念、dll导出类(转)相关推荐
- C++ DLL总结—静动态调用、导出类
1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接库与 ...
- DLL Hell(DLL地狱)浅谈
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序.作为一名面向对象的程序员,希望DLL可以导出类, ...
- Qt调用C++动态链接库--导出类
经过多次尝试,Qt调用C++生成的动态链接库导出类,只能是多态类型的类 导出DLL的方法参考这篇文章C++生成DLL动态链接库 1.生成导出类 #pragma once#ifndef DLL_IMPO ...
- 编写DLL所学所思(2)——导出类
2011.10.6 烛秋 一.导出类的简单方式 这种方式是比较简单的,同时也是不建议采用的不合适方式. 只需要在导出类加上__declspec(dllexport),就可以实现导出类.对象空间还是在使 ...
- DLL入门浅析(4)——从DLL中导出类
前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小异,废话就不多说了,下面给个简单例子示范一下,也就不多做解释了. DLL头文件: #ifndef _DLL_SAMPLE_H #de ...
- 关于通过dll导出类模板和函数模板
动态链接库中导出模板函数 C++ 支持函数模板,利用函数模板,可以简化我们的程序代码.我在自己的代码中也经常用到函数模板,但是以前一直以为函数模板是要放到头文件中的,否则调用模板函数时,编译器会找不到 ...
- C++dll导出类的方式__declspec(dllexport)
前言 有时导出dll的时候既想用到整个类又想保持多态 一.直接导出整个类 示例: 头文件 #ifdef AITWapper_EXP //根据项目是导入导出预定义 #define AITWapper_D ...
- MFC制作DLL(导出类和函数)
学了2天MFC导出DLL,发现网上描述的都不是很彻底,我这里给一个教程,希望大家能参考一次成功. 我用VC6,其他版本基本雷同. 首先,VC6新建项目,如下图流程: 点击文件–保存工作空间,把我们的劳 ...
- c#调用C++写的dll导出类,如何实现
网上看了一些都是调用c++写函数能不能实现c#使用c++写的类各位高手请赐教 解决方案 » 类的有一个成员函数,是返回这个类的指针,那么在C#里面就是一个INTPTR,它是什么你不用管.然后C++文件 ...
最新文章
- 关于程序多开的尝试。CreateMutex,OpenMuxtex,ReleaseMutex
- linux两种方式改变文件权限,Linux更改文件权限的两种方式
- TLS回调函数(1)
- 张首晟:量子计算、人工智能与区块链
- 2016网络安全***赛记录
- matlab 微秒 符号,matlab处理csi
- 人工智能(13)---智能锁
- linux 韦恩图两个,如何使用R来绘制韦恩图(Venn Diagram)
- vue3.0 抽奖 小功能
- 微信小程序获取手机号 前台+php后台
- VMware Vsphere 虚拟化
- 怎么直接播放或编辑WEBM格式的视频
- 微信转账被拉黑 遇到渣人该怎么追回损失?
- Clean Architecture 读书笔记
- 华为账号不能连接服务器怎么回事,云服务器连接不了是什么原因_云服务器连不上是为什么_华为云...
- C语言课设飞机票订购系统
- 背景颜色渐变 background
- Android——集地图、定位、导航于一体
- LoRa的码片速率chip rate
- GitHub添加SSH key
热门文章
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
- 使用c#+(datagrid控件)编辑xml文件
- XML解析简介及Xerces-C++简单使用举例
- 【Qt】Qt再学习(九):并发 QtConcurrent、QFuture、QFutureWatcher
- 你,保持童心;我,帮你保持童颜
- html整体垂直居中,htmlcss垂直水平居中
- Java学习总结:39(反射机制)
- 遥感计算机分类的基本原理,遥感数字图像的计算机分类
- Java项目:无库版银行管理系统(java+Gui+文档)
- Java项目:酒店管理系统(java+SSM+jsp+mysql+maven)