一、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文件编写、查看和调用相关推荐

  1. 在windows上使用go编译dll文件,供C++调用

    C++项目是win32的,所以go的编译环境也要改成win32的 cmd下,修改环境变量: set GOARCH=386 set CGO_ENABLED=1 使用go env 查看是否生效 参考:ht ...

  2. java jni调用dll文件_Java通过jni调用动态链接库

    (1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...

  3. .dll 文件编写和使用

    1.基本概念 dll(dynamic-link library),动态链接库,是微软实现共享函数库的一种方式.动态链接,就是把一些常用的函数代码制作成dll文件,当某个程序调用到dll中的某个函数的时 ...

  4. Java相对路径调用dll文件,VS项目中调用他人提供的.lib和.dll文件的用法(绝对路径和相对路径)...

     开发平台:vs2013 他人提供的动态库文件,包含 .lib 文件和 .dll 文件 在VS的工程中常常要设置头文件的包含路径和库文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只 ...

  5. Linux平台下动态链接库.so转换成windiws平台下.dll文件并使用python调用

    问题起因: 在运行PointNet的可视化程序时,作者只提供了linux平台下的动态链接库程序源码,自己的windows平台下无法调用.发现是动态链接库的文件格式不对,遂学习如何将.so文件转换成.d ...

  6. 如何用C/C++生成一个为lua所用的动态库dll文件以及lua如何调用该dll(C语言的动态库)

    如果读者朋友想详细的了解lua与C的通信原理,请移步这里[https://www.zhangshengrong.com/p/ERNnAzWa5W/]: 先说两句废话:怪不得lua不火,因为它对我们新手 ...

  7. 查看dll文件被哪些软件调用的命令

    http://blog.csdn.net/sfx82/article/details/5210860 比如你要查看有哪些进程调用了shell32.dll,可以在CMD下使用下面的命令 tasklist ...

  8. C++ 编写DLL文件给易语言调用

    摸索了两天了,终于解决了所有问题,在此跟大家分享. 需要三个文件,dll_demo.h.dll_demo.cpp.dll_dome.def 直接上代码: 头文件如下: 1 #ifndef _DLL_D ...

  9. java调用第三方dll文件 源码_C++调用python文件(包含第三方库)

    本文内容主要参考以下两篇文章: 武军:C++中调用python(VS2017)​zhuanlan.zhihu.com C++调用python的那些坑(详细教程步骤)_giser_xupf的博客-CSD ...

  10. Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】...

    在Silverlight程序(非Out of Browser模式)中是无法直接调用DLL的,但是很多的计算或者其他应用程序的调用中我们需要用到DLL的加载.比如调用DLL来识别身份证读卡器传输过来 ...

最新文章

  1. Qt实现 指针式时钟+动态时钟 (详细注释)
  2. 领英2017报告:机器学习、大数据工程师成为最热门的新兴职业
  3. python读取整个txt文件-python怎么读取txt文件内容
  4. PowerDesign的简单使用方法
  5. 获得系统当前时间的字符串格式
  6. 关于解决Win32控制台程序编译后自动退出
  7. spark.mllib:bagging方法
  8. SAP UI5 ConnectionManager - drives initialization of odata model
  9. 用国产CH32替代STM32,快来试试看!
  10. 大屏设计的视觉统一_视觉设计中的统一
  11. QAdmin轻量级后台HTML模板 1.5
  12. cmd查看某个服务器端口状态,cmd中检测端口是否处于监听状态 | IT博客
  13. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
  14. VMware系统运维(十一)部署虚拟化桌面 Horizon View 5.2 HTML ACCESS安装
  15. 实时分析你的Windows Phone 7使用状况
  16. Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照
  17. oracle数据库max使用,Oracle / PLSQL MAX函数
  18. 迅雷漫画下载工具II beta3 v1.2.3.204
  19. Codeforces 863B Kayaking 暴力 水题
  20. hsql导入mysql_关于HSQLDB访问已有数据库文件的操作说明

热门文章

  1. 计算机组成原理唐朔飞第八章ppt,计算机组成原理唐朔飞PPT第8章CPU的结构和功能.ppt...
  2. 运动世界校园3.0版本逆向分析破解
  3. 2-Python程序实例解析
  4. live2dmesh渲染优先级_Live2D 性能优化
  5. 佳博热敏打印机修改ip工具_佳博打印机修改ip教程本教程适用于80系列打印机及3150,9035打印.doc...
  6. Python批量查询恶意地址信息
  7. fiddler的安装与配置
  8. TEncCu::xCheckRDCostMerge2Nx2N
  9. 简单利用字典破解zip文件口令
  10. 计算机科学导论整理知识点,计算机科学导论教程重点