打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
extern “C” 

extern "C"    extern "C"使得在C++中使用C编译方式成为可能。在“C++”下定义“C”函数,需要加extern “C”关键词。用extern "C"来指明该函数使用C编译方式。输出的“C”函数可以从“C”代码里调用


使用微软专用的_declspec (dllexport) 
cpp文件在编译为OBJ文件时要对函数进行重新命名,C语言会把函数name重新命名为_name,而C++会重新命名为_name@@decoration,
extern "C"表示用C语言的格式将函数重命名
要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使用_declspec(_dllexport)


像如下代码
int main()
{
   func()
   return 0;
}
编译器生成像下面的代码
call func1
连接器传入像下面的代码
call 0x4000000         函数func的地址
如果func在DLL中,连接器就无法得到func的直接地址;在32位系统下,连接器将生成一个thunk包含func的调用地址
0x40000000:    jmp DWORD PTR __imp_func
__imp_func事func在.exe导入函数表中的地址,这个地址传入连接器进行连接
这样生成的代码比较大而且速度慢;
而使用__declspec(dllimport) 则直接告诉连接器直接调用DLL中func的地址,不要使用thunk
  __declspec(dllimport) void func(void);
   void main(void) 
   {
       func1();
   }
生成如下代码
   call DWORD PTR __imp_func
这样的代码比使用thunk代码小而且要快



http://bbs.csdn.net/topics/20025338

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
透过汇编另眼看世界之DLL导出函数调用
C#程序调用非托管C++ DLL文件的方法 - Chase的技术博客 - 博客园
简单的制作一个动态链接库(DLL)
使用c 开发excel插件 (第3章动态链接库(dynamic
vb调用C++写的DLL
函数重载
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服