dll文件编写、查看和调用

一、dll文件编写

1.在visual studio 2015中创建一个win32控制台程序,选择dll项目
2. dll文件中的函数暴露的方式有两种。
  • 在项目中创建模块定义文件*.def,dll暴露的函数名。允许其他人直接查看def文件来了解该dll提供了几个可用的函数(问题:重载函数是否只用在模块定义文件中声明一次?)
  • 创建一个头文件,在头文件中,使用extern “C”方式暴露dll的函数名。(只在cpp文件中使用该方式会造成dllimport时找不到函数的链接错误,即便dumpbin能将dll中的函数名列出来)使用方式如下:
    ** extern “C” _declspec(dllexport) 返回值类型 函数名(形参列表);
    ** 例:extern "C" _declspec(dllexport) int inference(char * ImgPath, char * modelPath);

二、dll文件查看

1. 为了保证在cmd中使用dumpbin命令,需要首先在系统变量中添加VS相关的用户变量
  • Path:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
  • Path:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE
2. 使用Visual Studio 2015中带有的dumpbin.exe程序来查看dll的相关信息。在开始菜单中Visual Studio 2015文件夹下打开VS2015开发人员命令提示(cmd也可以)
查看picturePredict.dll的导出函数:
  • dumpbin /exports F:\deploy\picturePredict\x64\Release\picturePredict.dll
    dll文件函数名查看
查看dll文件的位数信息:
  • dumpbin /headers F:\deploy\picturePredict\x64\Release\picturePredict.dll
  • 检查FILE HEADER VALUES的值中,是否标明32位dll文件。如果没有则是64位dll文件。
    dll文件位数查看

三、dll文件调用

以对picturePredict.lib的调用为例

1.创建一个win32控制台程序
2.文件依赖配置,右键项目,打开属性页
  • 配置属性->常规->字符集:使用unicode字符集。需要和dll字符集类型保持一致。
  • 配置属性->VC++目录->包含目录。添加控制台程序依赖的外部库的头文件目录路径(*\include)
  • 配置属性->VC++目录->库目录。添加主程序依赖的库的dll文件路径(也可以直接吧dll放在程序根目录下)
  • 配置属性->链接器->输入,附加依赖项中,添加对picturePredict.lib的引用
  • 配置属性->链接器->输入->模块定义文件。添加相关*.def文件。如果dll生成时,外部函数暴露使用方式为def文件定义。
  • 配置属性->链接器->所有选项,附加依赖项中,添加对picturePredict.lib的引用
3.相关文件引入
  • lib文件所在路径如果没有在配置属性->VC++目录->库目录中声明,也可以直接将lib文件放置在程序cpp文件所在文件夹下。
  • dll文件直接放置在项目路径\x64\Release\文件夹下。
  • 如果使用创建头文件的方式来暴露dll中的函数,需要将头文件也添加在项目中。方式有两种,一种是在配置属性->VC++目录->包含目录中添加相关的头文件。一种是将项目头文件放置在程序cpp文件所在文件夹下,然后在主程序的头文件中,include该文件。
4.dll文件中的函数引入和使用
  • 使用命令 extern “C” __declspec(dllexport) 返回值类型 函数名(形参列表);
    例如:extern "C" __declspec(dllexport) int inference(char * ImgPath, char * modelPath);
  • 导入成功后,该函数可以当成普通函数直接使用。
  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值