• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi调用C/C++的Dll(stdcall关键字,会导致函数名分裂.此时函数名变成_stdadd@8) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

delphi调用C++写的Dll, 当然这个Dll要求是非MFC的Dll, 这样子才能被delphi调用. 根据C++定义函数的情况, Delphi有不同的相对应的处理方法.
1. 声明中不加__stdcall,采用VC默认格式__cdecl,但在Delphi中要注明调用格式为cdecl。
C++中例子:

[cpp] view plain copy
 
 print?
  1. extern "C" int __declspec(dllexport) add(int x, int y);  

 Delphi中例子:

[delphi] view plain copy
 
 print?
  1. function add(i:Integer; j:Integer):Integer; cdecl; External 'NonMfcDll.dll';  

2. 声明中加上__stdcall
C++中例子:

[cpp] view plain copy
 
 print?
  1. extern "C" int __declspec(dllexport) __stdcall stdadd(int x, int y);  

因为加上__stdcall关键字, 会导致函数名分裂. 此时函数名变成_stdadd@8. 其中, 8是参数的总字节数
Delphi引用的方法1: 在delphi定义中加上"name'_stdadd@8'".

[delphi] view plain copy
 
 print?
  1. function stdadd(i:Integer; j:Integer):Integer; stdcall; External 'NonMfcDll.dll' name'_stdadd@8';  

Delphi引用的方法2: 增加def文件, 内容如下

[plain] view plain copy
 
 print?
  1. ; NonMfcDll.def : 声明 DLL 的模块参数。  
  2.   
  3. LIBRARY      "NonMfcDll"  
  4.   
  5. EXPORTS  
  6.     ; 此处可以是显式导出  
  7.  stdadd @1  

delphi的定义如下

[delphi] view plain copy
 
 print?
  1. function add(i:Integer; j:Integer):Integer; stdcall; External 'NonMfcDll.dll';  

http://blog.csdn.net/huang_xw/article/details/7524359


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap