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

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

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

[cpp] view plain copy

print?

extern "C" int __declspec(dllexport) add(int x, int y);

Delphi中例子:

[delphi] view plain copy

print?

function add(i:Integer; j:Integer):Integer; cdecl; External 'NonMfcDll.dll';

2. 声明中加上__stdcallC++中例子:

[cpp] view plain copy

print?

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?

function stdadd(i:Integer; j:Integer):Integer; stdcall; External 'NonMfcDll.dll' name'_stdadd@8';

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

[plain] view plain copy

print?

; NonMfcDll.def : 声明 DLL 的模块参数。

LIBRARY "NonMfcDll"

EXPORTS

; 此处可以是显式导出

stdadd @1

delphi的定义如下

[delphi] view plain copy

print?

function add(i:Integer; j:Integer):Integer; stdcall; External 'NonMfcDll.dll';

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

相关推荐

英雄无敌3中文版下载
365bet提款多久到账

英雄无敌3中文版下载

📅 07-03 👁️ 5538
世界杯足迹:场外球迷欢乐多 洪钢变身历史科普员
365bet提款多久到账

世界杯足迹:场外球迷欢乐多 洪钢变身历史科普员

📅 07-01 👁️ 208
欧洲杯体彩不能买单场吗的简单介绍
48365大写

欧洲杯体彩不能买单场吗的简单介绍

📅 06-28 👁️ 2454
s14全球总决赛冠军皮肤有什么 2024T1冠军皮肤选择一览
365bet提款多久到账

s14全球总决赛冠军皮肤有什么 2024T1冠军皮肤选择一览

📅 07-01 👁️ 8277
米兔智能故事机
48365大写

米兔智能故事机

📅 06-30 👁️ 284
hr赫莲娜哪里海淘便宜?看看比利时hr赫莲娜海淘教程
365篮球直播吧App

hr赫莲娜哪里海淘便宜?看看比利时hr赫莲娜海淘教程

📅 07-02 👁️ 7037
iphone怎么设置输入法
48365大写

iphone怎么设置输入法

📅 07-02 👁️ 861
阏与之战:狭路相逢勇者胜
365篮球直播吧App

阏与之战:狭路相逢勇者胜

📅 06-28 👁️ 315
2023第二届中青赛女子U14组落幕 上海队获得冠军
365bet提款多久到账

2023第二届中青赛女子U14组落幕 上海队获得冠军

📅 07-01 👁️ 1616