__declspec(dllexport) 和 __declspec(dllimport))

  一. DLL 中导出函数的声明有两种方法:

(1).采用模块定义(.def)文件声明,def文件为连接器提供了有关被连接程序的导出,属性及其他信息

    说明: 1.LIBRARY语句说明.def文件相应的DLL;

           2.EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n;

           3.def 文件中的注释由每个注释行开始处的分号 ";" 指定,且注释不能与语句共享一行。

 

(2). 在函数声明中加上__declspec(dllexport)

     说明: __declspec(dllexport)关键字必关键字的左

 

区别:

 

 

  二.__declspec(dllimport)可以确定函数是否存在于 DLL 中,这使得编译器可以生成跳过间接寻址级别的代码,它是为了更好的处理类中的静态成员变量的,如果没有静态成员变量,那么这个__declspec(dllimport)无所谓。

如果DLL是提供给VC用户使用的,只需把编译DLL时产生的.lib提供给用户,便可以轻松地调用DLL。但是如果DLL是供VB、PB、Delphi用户使用的,那么会产生名字冲突。

因为VC++编译器对于__declspec(dllexport)声明的函数会进行名称转换,导出一个跟用户声明的不一样的函数名。所以如果要想避免这种转换,就要使用.def文件方式导出函数了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值