extern "C"、dllexport和.def (2006-11-13 23:33:00)

extern "C"、dllexport和.def

  (2006-11-13 23:33:00)
标签: 

杂谈

 
简单一点来说。
extern "C"就是告诉C++编译器,对所声明的部分采用C的处理方式来进行名称的转换。
但是,extern "C"和extern "C"{...}这两种形式略有区别。前者有两层含义:外部连接和C语言连接;后者仅有C语言连接一层含义。下面的两种形式是等同的:
extern "C" int foo;
extern "C" void bar();
extern "C" {
extern int foo;
extern void bar();
}
对于函数来说,带不带外部声明extern是一样的,但对于变量来说,就不一样了。所以extern "C"和extern "C"{...}这两种形式对变量来说是有区别的,前者相当于后者的括号内再加extern。
dllexport就是把所声明的标识符输出到DLL中,以便让调用者可以找得到。
对于C++函数来说,将采用C++的名称转换方式。如果不确定C++是如何转换函数名称的,可以使用.def文件(EXPORT关键字)或是把函数声明为extern "C"。
当用.def文件从DLL中输出变量时,不需要再在变量前面加__declspec(dllexport)。但是,在使用DLL的文件中,仍然必须用__declspec(dllimport)来声明该变量。
应该说dellexport跟extern "C"是两个不相关的概念。但如果使用.def后,可能达到同时使用dllexport和extern "C"的效果。

1

阅读 (242)   评论  (0) 收藏 (0)  转载   喜欢   打印 举报
后一篇: const与指针(C++
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值