(三)VS2010 Dll 生成与调用
2014-03-27 11:35
281 查看
在(二)中,我们在Dll 的头文件里面 有:
#ifndef _Dll_H
#define _Dll_H _declspec(dllimport)
#else
#endif
_Dll_H int add( int a, int b );
_Dll_H int subtract( int a, int b );
其实这是C调用约定,有时我们为了能够将C语言写的Dll用在C++项目中,这时我们可以将头文件改为:
#ifndef _Dll_H
#define _Dll_H extern "C" _declspec(dllimport)
#else
#endif
_Dll_H int add( int a, int b );
_Dll_H int subtract( int a, int b );
但是如果我们调用工程(也就是客户端)用的是WINAPI标准调用约定(pascal调用约定);那么这个时候 就算用上面的方法也没用,因为调用标准不一致;如:
#ifndef _Dll_H
#define _Dll_H extern "C" _declspec(dllimport)
#else
#endif
_Dll_H int _stdcall add( int a, int b );
_Dll_H int _stdcall subtract( int a, int b );
对应的.cpp函数前面 也加上_stdcall, 这个时候生成的Dll函数名字还是改编了,所以在pascal调用标准中当然无法识别,当然会链接失败!
这个时候 我们就可以创建一个 .def 文件,添加如下代码即可
LIBRARY Dll
EXPORTS
add
subtract
这个时候其他的什么都不用改,头文件 也不要改,可以直接用了。
有了.def 文件 那么dll文件的 函数导出就没问题了, 所以在Dll项目中 就没必要dll头文件 申明导出函数了。只需要在调用工程中写一个导入dll函数头文件即可。(隐式调用情况下)
#ifndef _Dll_H
#define _Dll_H _declspec(dllimport)
#else
#endif
_Dll_H int add( int a, int b );
_Dll_H int subtract( int a, int b );
其实这是C调用约定,有时我们为了能够将C语言写的Dll用在C++项目中,这时我们可以将头文件改为:
#ifndef _Dll_H
#define _Dll_H extern "C" _declspec(dllimport)
#else
#endif
_Dll_H int add( int a, int b );
_Dll_H int subtract( int a, int b );
但是如果我们调用工程(也就是客户端)用的是WINAPI标准调用约定(pascal调用约定);那么这个时候 就算用上面的方法也没用,因为调用标准不一致;如:
#ifndef _Dll_H
#define _Dll_H extern "C" _declspec(dllimport)
#else
#endif
_Dll_H int _stdcall add( int a, int b );
_Dll_H int _stdcall subtract( int a, int b );
对应的.cpp函数前面 也加上_stdcall, 这个时候生成的Dll函数名字还是改编了,所以在pascal调用标准中当然无法识别,当然会链接失败!
这个时候 我们就可以创建一个 .def 文件,添加如下代码即可
LIBRARY Dll
EXPORTS
add
subtract
这个时候其他的什么都不用改,头文件 也不要改,可以直接用了。
有了.def 文件 那么dll文件的 函数导出就没问题了, 所以在Dll项目中 就没必要dll头文件 申明导出函数了。只需要在调用工程中写一个导入dll函数头文件即可。(隐式调用情况下)
相关文章推荐
- 将图片存储在内存中
- Gerrit简易安装入门
- Gerrit+apache+H2数据库简单安装配置及建库流程
- Making Pretty Graphs
- Mysql跨年按周汇总
- GDI/GDI+(1): 将Bitmap导出为Byte[]
- Nginx 配置文件详解
- REDHAT FTP[备忘]
- 【爱上cocos2d-x之十七】scheduleOnce定时器只调用一次
- AIX默认下是KSH脚本,没有bash那么好用
- 如何为sublime2 设置代理
- 多线程进行n皇后计算
- Java Ant build.xml详解
- 人体奥秘:月经“传染说”是个“谜
- 传统印刷企业PK数码快印
- Instagram后端架构
- 【爱上cocos2d-x之十六】取消定时器unSchedule
- Jquery揭秘系列:Validation实现
- ubuntu下 mysql5.6.4 +sphinx安装
- 美甲有风险 “出手”需谨慎