DLL 中 .def文件的使用

用DEF文件从DLL中导出C++类 用DEF从DLL导出一个函数,或用__declspec(dllexport)指令从DLL中导出一类,想必大家已经很熟悉了,也经常使用着。这里向大家介绍一种 用DEF文件从DLL导出一个类的方法。具体原理或为什么就不废话了,学会导出后,再慢慢回味吧。这里主要叙述操作步骤。   1。打开VC6.0,新建一个"Win32 Dynamic-Link Library"工程,假设叫DefClass , 阅读详情
 DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。


            首先创建 一个DLL程序,.cpp中
int __stdcall Add(int numa, int numb)
{
        return (numa + numb);
}

int __stdcall Sub(int numa, int numb)
{
         return (numa - numb);
}

             然后创建一个.def的文件,在里面加上

;DllTestDef.lib : 导出DLL函数
;作者:----
LIBRARY DllTestDef
EXPORTS
Add @ 1
Sub @ 2

            最后创建一个测试程序:.cpp文件如下:
#include <iostream>
#include <windows.h>

using namespace std;

typedef int (__stdcall *FUN)(int, int);
HINSTANCE hInstance;
FUN   fun;

int main()
{
        hInstance = LoadLibrary("DLLTestDef.dll");
        if(!hInstance)
            cout << "Not Find this Dll" << endl;
        fun = (FUN)GetProcAddress(hInstance, MAKEINTRESOURCE(1));
        if (!fun)
        {
               cout << "not find this fun" << endl;
        }
        cout << fun(1, 2) << endl;
        FreeLibrary(hInstance);
        return 0;
}



说明:
.def文件的规则为:

  (1)LIBRARY语句说明.def文件相应的DLL;

  (2)EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用);

  (3).def 文件中的注释由每个注释行开始处的分号 (;) 指定,且注释不能与语句共享一行。
VS2008开发之使用.def文件来生成dll库文件 说明:有了.def文件,其实就不需要用dll库对应的头文件了。而且.def文件其实主要是给显示加载dll时候用的,即是利用LoadLibrary、GetProcAddress和FreeLibrary三部曲来完成第三方dll库的使用。只需要dll库,不需要头文件和.lib文件的一种机制。 1、新建一个dll工程 2、添加一个cpp文件来实现dll库的接口功能 直接附上我的测试源码: ... 阅读详情

相关推荐

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码1.Win10系统配置OpenPose1.7.0的Python API 本人最近在研究基于骨架的动作识别方法,有幸看到端到端的ST-GCN算法,于是决定自己复现一下。(具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?) 1.Win10系统配置OpenPose1.7.0的Python API 安装步骤: (1) ...

QIANFANGshiwo的博客 3040

CMake工程管理-入门精讲

    本课程通过一个一步步延伸的完整实例,教会大家使用CMake来编译C++程序。    CMake是跨平台开发不可少的工具,很多同学在管理代码的时候需要在不同平台维护不同工程,使用CMake就可以轻松的维护一套工程即可。    在基础部分,用一个完整的项目实例,给大家演示如何创建可执行文件,动态库,静态库,使用第三方库等基础功能。    在高级部分,演示了如何使用CMake文件分组,使用findpackage搜索库以及如何自定义自己的搜索模块。

数学建模--十大经典常用算法

数学建模十大算法:灰色预测,蒙特卡洛,遗传算法,模拟退火法,组合算法,神经网络,动态规划,聚类算法,类比法,概率算法,Floyd算法

qq_51533426的博客 5647

cmake添加.def文件

1、为何用到该功能       导出库中使用,使用_stdcall时会改名为_FunctionName@num,其中num为参数个数。使用.def文件可防止其改名。 2、怎样使用     直接添加到add_library即可。如下     add_library(test.cpp test.def)...

domine123的专栏 3979

(一)Tushare Pro教程:股票基本数据接口

 一直使用tushare作数据源,这里开个教程大家一起学习。 一、介绍        tushare是一个python股票数据源,现已升级到tushare pro版本,新版本在数据稳定性和获取速率上大幅提升。与wind、东财等收费数据源相比,tushare pro算是金融数据界的良心之作,其为从事金融工程、量化研究等方向的同学们提供了便利。tushare pro还有一点突出的特色就是已经将股票...

虎毛的博客 4万+

Cesium创建无人机视锥,同步视锥与鹰眼地图视角,实现视锥键盘控制。解决视锥初始化位置不准确问题等

本文描述了一个基于Cesium的3D视锥体可视化系统开发过程。系统实现了主视图与鹰眼视图的双屏联动,支持通过键盘控制视锥体的空间移动(WASD前后左右,Q/E旋转,C/Z升降),并实时同步更新两个视图。关键技术包括:1)基于主视图Scene创建Camera实现视锥体精确绘制;2)通过PerspectiveFrustum设置视锥参数;3)建立双视图的相机位置及视角同步机制。目前暂未实现视锥体far/near边界在鹰眼视图中的可视化,该系统可应用于无人机视角监控等三维场景交互需求。

coder_bin的博客 1590

CMake自动导出dll导出符号

对于Liunx和Unix平台,默认的c++模块都是以导出形式存在的,windows平台的导出需要声明__declspec(dlexport)进行导出,使用__declspec(dllimport)进行导入,如果有一个静态库,现在想改成动态库,必须手动添加导出标志,除此,还有一个方法就是将导出信息,写入到*.def文件中,设置到编译器中。但这样都比较麻烦,正好CMake提供了自动生成def文件的功能。

kasteluo的专栏 2847

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

Delphi DLL使用接口和调用的方法

Delphi对接口采用引用计数的方法管理对象生命周期,但是DLL中输出的对象可能不是被Delphi调用,其引用计数不一定正确,因此DLL中接口对象的生命周期不由Delphi编译器自动生成的代码管理,而是程序员自己控制,所以上面 的工厂包括构造和解析两个接口对象的生命周期管理方法。 所有接口对象应该集成自下面的接口,而不应该继承自Delphi自带的TInterfacedObject:

xiexuan2007的专栏 4420

华为OD新系统机试真题 - 端口流量统计

华为OD机试新系统真题【端口流量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月26号机试真题【端口流量统计】。

qq_45776114的博客 762

AI在智能制造中的落地:从预测维护到自适应生产调度

从最新的研究与实践来看,“预测维护”和“自适应生产调度”正在成为智能制造中最先跑通闭环的两个核心场景:前者通过对设备健康的前瞻性预测,帮助企业减少非计划停机、优化备件与维护资源;后者通过对复杂生产系统的实时决策优化,使工厂能够更好地应对订单波动、设备故障和多目标约束。更重要的是,越来越多的研究与项目不再将二者视为孤立模块,而是尝试构建“设备健康—生产调度—供应链”三者联动的一体化架构。Nature在技术层面,深度学习、强化学习、多智能体系统、图神经网络和注意力机制等方法,为建模复杂工业系统提供了强大工具;

nmdbbzcl的博客 1290

[DLL]使用def文件从dll导出

模块定义 (.def) 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件。如果不使用 __declspec(dllexport) 关键字导出 DLL 的函数,则 DLL 需要 .def 文件。 .def 文件必须至少包含下列模块定义语句: 文件中的第一个语句必须是 LIBRARY 语句。此语句将 .def 文件标识为属于 DLL。LIBRARY 语句的后面是

超越 2301

100天精通Oracle-实战系列(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

100天精通Oracle-实战系列(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

LuciferLiu_DBA 1993

使用Def文件导出dll

前面我们介绍了dll的生成,大多数是使用extern "C"__declspec(dllexport)+函数名的方法导出dll。其实我们还有另一种方法来导出dll。 先介绍参考文献: 1.dll导出声明相关 2.VS2012中 C++创建DLL图解 3.DLL中导出函数的两种方式(dllexport与.def文件) 4 按序号而不是按名称从 DLL 导出函数 5.模块定义

生如蚁,美如神 4821

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

使用Def文件导出Dll文件

  本文介绍如何使用Def文件制作DLL。    模块定义 (.def) 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件。如果不使用 __declspec(dllexport) 关键字导出 DLL 的函数,则 DLL 需要 .def 文件。.def 文件必须至少包含下列模块定义语句:文件中的第一个语句必须是 LIBRARY 语句。此语句将 .de

rabbit729的专栏 7863

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DLL中.def文件的使用

 DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。首先创建 一个DLL程序,.cpp中int __stdcall Add(int numa, int numb){ return (num

Gary's Blog --- A C++ programmer 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

c语言中.def文件注释,用DEF文件从DLL中导出C++类

用DEF从DLL导出一个函数,或用__declspec(dllexport)指令从DLL中导出一类,想必大家已经很熟悉了,也经常使用着。这里向大家介绍一种用DEF文件从DLL导出一个类的方法。具体原理或为什么就不废话了,学会导出后,再慢慢回味吧。这里主要叙述操作步骤。1。打开VC6.0,新建一个”Win32 Dynamic-Link Library”工程,假设叫DefClass,在“Dll kin...

weixin_32187075的博客 1026

VS中def文件对于生成dll和lib文件的作用

VS2005使用DEF文件来生成DLL与LibVS2005使用DEF文件来生成DLL与Lib时,与VC6的设置是不一样 的,VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。但是VS2005不一样,需要指定DEF文件,方法如下:例如:把 sqlite3.def 添加到工程中. 选择 工程 > 属性中的链接器,然后找到"输入"这一项

caomiao2006的专栏 7504

使用def文件生成dll

def生成dll

a361251388的专栏 649

用于生成DLL文件的def文件的规范写法

*.def文件介绍 模块定义   (.def)   文件为链接器提供有关被链接程序的导出、属性及其他方面的 信息。 使用DEF文件来输出函数的一个最主要目的就是:将编译器生成的函数修饰名去掉,用更加自然的、容易理解的、容易记忆的名字,而不是修饰名来输出函数。这里的名字可以不是函数名,这时须使用DEF文件的NAME格式。但由于习惯,大多情况下,只使用函数名,因为这样最简单省事。是否存

ddx279678775的博客 1391

DLL中.DEF文件的使用

DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明;另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。             首先创建 一个DLL程序,.cpp中 int __stdcall Add(int numa, int numb) {  

1688

DLL文件与DEF文件

本篇博客主要解释.dll文件和.def文件的原理与应用 .dll文件,中文全称为动态链接库文件,里面包含着许多个程序函数,可以供调用者调用,动态与静态是相对的,在静态链接库中,我们把静态链接库中的函数全部加到调用程序中,这样可能原先只有一百行的代码,调用了静态链接库,立马就变成几千行,这样就让我们整个程序变得庞大,臃肿;如若我们使用动态链接库我们就可以省去 把库中代码复制到程序中 这一步骤,这样...

smallnine9的博客 3134

Windows dll编写与def文件

问题1:查看一个编写的dll的输出,函数名老是 _xxxx@n之类,已经使用了extern "C"并工程中添加了def文件。在“问专家”中搜索到这么一段:      在VC++中,如果生成DLL可以不使用.def文件。你只需要在VC++的函数定义前要加__declspec(dllexport)修饰就可以了。但是使用__declspec(dllexport)和使用.def文件是有

笔记本+学习园 3770
上一篇: IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)
下一篇: Windows下的QT 4.7.3安装教程
Cpp_funs
博客等级 码龄15年 10粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值