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文件的位数信息:
- dumpbin /headers F:\deploy\picturePredict\x64\Release\picturePredict.dll
- 检查FILE HEADER VALUES的值中,是否标明32位dll文件。如果没有则是64位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);
- 导入成功后,该函数可以当成普通函数直接使用。
dll文件编写、查看和调用相关推荐
- 在windows上使用go编译dll文件,供C++调用
C++项目是win32的,所以go的编译环境也要改成win32的 cmd下,修改环境变量: set GOARCH=386 set CGO_ENABLED=1 使用go env 查看是否生效 参考:ht ...
- java jni调用dll文件_Java通过jni调用动态链接库
(1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...
- .dll 文件编写和使用
1.基本概念 dll(dynamic-link library),动态链接库,是微软实现共享函数库的一种方式.动态链接,就是把一些常用的函数代码制作成dll文件,当某个程序调用到dll中的某个函数的时 ...
- Java相对路径调用dll文件,VS项目中调用他人提供的.lib和.dll文件的用法(绝对路径和相对路径)...
开发平台:vs2013 他人提供的动态库文件,包含 .lib 文件和 .dll 文件 在VS的工程中常常要设置头文件的包含路径和库文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只 ...
- Linux平台下动态链接库.so转换成windiws平台下.dll文件并使用python调用
问题起因: 在运行PointNet的可视化程序时,作者只提供了linux平台下的动态链接库程序源码,自己的windows平台下无法调用.发现是动态链接库的文件格式不对,遂学习如何将.so文件转换成.d ...
- 如何用C/C++生成一个为lua所用的动态库dll文件以及lua如何调用该dll(C语言的动态库)
如果读者朋友想详细的了解lua与C的通信原理,请移步这里[https://www.zhangshengrong.com/p/ERNnAzWa5W/]: 先说两句废话:怪不得lua不火,因为它对我们新手 ...
- 查看dll文件被哪些软件调用的命令
http://blog.csdn.net/sfx82/article/details/5210860 比如你要查看有哪些进程调用了shell32.dll,可以在CMD下使用下面的命令 tasklist ...
- C++ 编写DLL文件给易语言调用
摸索了两天了,终于解决了所有问题,在此跟大家分享. 需要三个文件,dll_demo.h.dll_demo.cpp.dll_dome.def 直接上代码: 头文件如下: 1 #ifndef _DLL_D ...
- java调用第三方dll文件 源码_C++调用python文件(包含第三方库)
本文内容主要参考以下两篇文章: 武军:C++中调用python(VS2017)zhuanlan.zhihu.com C++调用python的那些坑(详细教程步骤)_giser_xupf的博客-CSD ...
- Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】...
在Silverlight程序(非Out of Browser模式)中是无法直接调用DLL的,但是很多的计算或者其他应用程序的调用中我们需要用到DLL的加载.比如调用DLL来识别身份证读卡器传输过来 ...
最新文章
- Qt实现 指针式时钟+动态时钟 (详细注释)
- 领英2017报告:机器学习、大数据工程师成为最热门的新兴职业
- python读取整个txt文件-python怎么读取txt文件内容
- PowerDesign的简单使用方法
- 获得系统当前时间的字符串格式
- 关于解决Win32控制台程序编译后自动退出
- spark.mllib:bagging方法
- SAP UI5 ConnectionManager - drives initialization of odata model
- 用国产CH32替代STM32,快来试试看!
- 大屏设计的视觉统一_视觉设计中的统一
- QAdmin轻量级后台HTML模板 1.5
- cmd查看某个服务器端口状态,cmd中检测端口是否处于监听状态 | IT博客
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
- VMware系统运维(十一)部署虚拟化桌面 Horizon View 5.2 HTML ACCESS安装
- 实时分析你的Windows Phone 7使用状况
- Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照
- oracle数据库max使用,Oracle / PLSQL MAX函数
- 迅雷漫画下载工具II beta3 v1.2.3.204
- Codeforces 863B Kayaking 暴力 水题
- hsql导入mysql_关于HSQLDB访问已有数据库文件的操作说明
热门文章
- 计算机组成原理唐朔飞第八章ppt,计算机组成原理唐朔飞PPT第8章CPU的结构和功能.ppt...
- 运动世界校园3.0版本逆向分析破解
- 2-Python程序实例解析
- live2dmesh渲染优先级_Live2D 性能优化
- 佳博热敏打印机修改ip工具_佳博打印机修改ip教程本教程适用于80系列打印机及3150,9035打印.doc...
- Python批量查询恶意地址信息
- fiddler的安装与配置
- TEncCu::xCheckRDCostMerge2Nx2N
- 简单利用字典破解zip文件口令
- 计算机科学导论整理知识点,计算机科学导论教程重点