- 浏览: 679550 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
此篇仅作简要的记录,作为备忘。
更为详细的可以参考:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html
http://blog.csdn.net/ixsea/article/details/6676802
MS关于DLL的文档目录:http://msdn.microsoft.com/zh-cn/library/1ez7dh12.aspx
1、DLL的创建
官方文档:http://msdn.microsoft.com/zh-cn/library/ms235636.aspx
在VS中新建DLL工程,定义
接下来,我们在创建DLL的工程中定义CREATEDLL_API,方法为:在工程属性页面下图所示位置加上CREATEDLL_API:
对于需要导出的函数(声明和定义两处都要),要这么写:
由于定义了CREATEDLL_API,相当于声明了:
表明我们现在是要导出该函数funcA。写好函数后就可以编译了。
编译好之后,会生成 对应的lib文件和DLL文件。
2、DLL的使用
注意:程序运行时需要将DLL拷贝到程序所在目录,或者将DLL目录添加到环境变量Path中(添加完成后需要重启)。
方法1:隐式链接 Linking Implicitly
http://msdn.microsoft.com/zh-cn/library/d14wsce5.aspx
将之前写的头文件加入工程,该工程不要定义CREATEDLL_API。
将生成的lib文件所在路径添加到工程的libarary directory中就可以编译了。
这里想多说一点的是:如果按我上面的头文件写法,编译器会自动选择对应的lib文件。无需在工程属性的linker->Input下手动输入要引入的lib文件了。
当然,前提是需要手动将DLL工程的输出DLL文件名进行更名,64位版本加了X64后缀,32位版本加了X86后缀。如下图所示:
方法2:显式链接 Linking Explicitly
http://msdn.microsoft.com/zh-cn/library/784bt7z7.aspx
参考官方文档或者之前给出的博文吧!
过程主要为:
LoadLibray 载入DLL
GetProcAddress 获取函数地址
使用函数句柄
FreeLibrary 释放DLL资源
3、查看DLL中经过修饰的函数名
http://msdn.microsoft.com/zh-cn/library/756as972.aspx
C++中会对函数名进行修饰,如果用显式链接,直接使用原始函数名会出现问题!
可以通过dumpbin工具进行查看:
方法为,从开始菜单中打开VS的command prompt,在命令行环境下输入以下命令,就可以看到导出的函数名了:
由于我使用隐式调用,这里不再深究
更为详细的可以参考:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html
http://blog.csdn.net/ixsea/article/details/6676802
MS关于DLL的文档目录:http://msdn.microsoft.com/zh-cn/library/1ez7dh12.aspx
1、DLL的创建
官方文档:http://msdn.microsoft.com/zh-cn/library/ms235636.aspx
在VS中新建DLL工程,定义
#pragma once #ifdef CREATEDLL_EXPORTS #define CREATEDLL_API __declspec(dllexport) #else #define CREATEDLL_API __declspec(dllimport) // Check windows #if _WIN32 || _WIN64 #if _WIN64 #pragma comment(lib,"LBFGS_alglibDLLX64.lib") #else #pragma comment(lib,"LBFGS_alglibDLLX86.lib") #endif #endif #endif
接下来,我们在创建DLL的工程中定义CREATEDLL_API,方法为:在工程属性页面下图所示位置加上CREATEDLL_API:
对于需要导出的函数(声明和定义两处都要),要这么写:
CREATEDLL_API int funcA(int a=1);
由于定义了CREATEDLL_API,相当于声明了:
__declspec(dllexport) int funcA(int a=1);
表明我们现在是要导出该函数funcA。写好函数后就可以编译了。
编译好之后,会生成 对应的lib文件和DLL文件。
2、DLL的使用
注意:程序运行时需要将DLL拷贝到程序所在目录,或者将DLL目录添加到环境变量Path中(添加完成后需要重启)。
方法1:隐式链接 Linking Implicitly
http://msdn.microsoft.com/zh-cn/library/d14wsce5.aspx
将之前写的头文件加入工程,该工程不要定义CREATEDLL_API。
将生成的lib文件所在路径添加到工程的libarary directory中就可以编译了。
这里想多说一点的是:如果按我上面的头文件写法,编译器会自动选择对应的lib文件。无需在工程属性的linker->Input下手动输入要引入的lib文件了。
当然,前提是需要手动将DLL工程的输出DLL文件名进行更名,64位版本加了X64后缀,32位版本加了X86后缀。如下图所示:
方法2:显式链接 Linking Explicitly
http://msdn.microsoft.com/zh-cn/library/784bt7z7.aspx
参考官方文档或者之前给出的博文吧!
过程主要为:
LoadLibray 载入DLL
GetProcAddress 获取函数地址
使用函数句柄
FreeLibrary 释放DLL资源
3、查看DLL中经过修饰的函数名
http://msdn.microsoft.com/zh-cn/library/756as972.aspx
C++中会对函数名进行修饰,如果用显式链接,直接使用原始函数名会出现问题!
可以通过dumpbin工具进行查看:
方法为,从开始菜单中打开VS的command prompt,在命令行环境下输入以下命令,就可以看到导出的函数名了:
dumpbin /exports ./x64/Release/LBFGS_alglibDLLX64.dll
由于我使用隐式调用,这里不再深究
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 764在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21061、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1708解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5123boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 18891、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11534主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8529上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17489MXnet (mix net)类似Caffe,Tensorfl ... -
批处理(bat)设置IP地址
2016-02-11 23:14 1651买了个TOTOLINK EX300v2中继器,想修改配置还得修 ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 59861、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19211、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3311初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2228现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3681调用CUDA的核函数时指定block 和 thread大小,该 ... -
windows系统配置
2015-06-06 16:30 595删除Hiberfil.sys :使用命令powercfg -h ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2125在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 17711、使用auto声明新变量 ...
相关推荐
dll的创建与使用 dll的创建与使用 dll的创建与使用
dll创建和使用工程,可借鉴作为模板。开发环境VS2012。
本例说明如何使用vc6创建和使用dll,其中dll导出函数为一些本人实现的字符串函数,可供初学这参考,详细内容可参考readme文件
使用DLL创建程序快捷方式,简单,轻便~~欢迎下载!
易语言创建进程注入DLL源码,创建进程注入DLL,GetCmdLine,命令行缓冲区_,取文本内容长度_,CopyMemory,SN_CreateProcessA,SN_InjectDllA
一 链接库概述 二 静态链接库 三 库的调试与查看 四 一个简单的DLL 非MFC动态库 五 MFC规则DLL Regular 六 MFC扩展DLL的创建 七 让EXE导出函数及DLL木马
很简单的创建DLL文件及外部调用DLL的实力,对于没有这方面经验的初学者有很好的参考价值
Delphi创建Dll和调用Dll示例(包含Dll窗体调用) 网上介绍比较杂乱,特地整理了一份Demo代大家学习参考。 1.socketA_dll 为dll工程目录。 2.LoadDllDemo 为【静态调用】dll工程目录。 3.LoadDllDemo_动态调用 为...
创建Dll a。首先新建一个 MFC AppWiZard(dll)文件。 b。在头文件中添加预定义。 如:#define NAN_IMAGE_DLL_EXPORT extern "C" __declspec(dllimport) c.在头文件中定义函数名称 函数名称:NAN_DrawLine 参数:...
DelphiDll创建与调用源码 使用delphi生成动态连接库文件 并使用动态连接库
一个使用创建和使用dll的示例代码,开发环境为vs2013。演示了怎么导出变量,函数和类。MyDll是一个dll项目,使用extern "C"导出内容,会生成一个dll;MyDll2也是一个dll项目,不使用extern "C"导出内容,也会生成一...
创建和使用 C# DLL(C# 编程指南)
该资源提供MFC常规DLL的定义,与使用方法,对初学者有一定帮助
详细讲解通过def文件创建DLL,方便初学者能快速掌握使用和创建dll
visual studio 创建dll和使用dll
纯资源(.rc)DLL创建与使用源码,使用开发开台是VS2008.
易语言创建进程注入DLL文件。@qq1347522182。
LabVIEW中DLL文件的创建及调用方法
本实例创建了MFC Dll,并在Dll内部启用Timer及线程,并通过Demo去调用。
DLL在Qt中的创建,DLL在Qt中的显式与隐式的使用