1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Delphi如何调用C++写的DLL

Delphi如何调用C++写的DLL

时间:2022-10-07 02:30:31

相关推荐

Delphi如何调用C++写的DLL

BOOL WINAPI funname(char *pFileName,char *pID);

这是C++写的一个DLL里面的函数

我现在想用delphi调用这个函数

静态:

function funname(var pFileName:pchar;var pID:pchar):integer;stdcall;

external "DLLNAME.dll" name "funname";

动态:

OneHandle := LoadLibrary(DLLNAME.dll"); //动态载入DLL,并返回其句柄

try

if oneHandle<>0 then

@funname:= GetProcAddress(OneHandle,"funname");

if not( @funname = nil ) then

.....

finally

FreeLibrary(OneHandle);

现在调试数据不成功

是不是传参问题呢

还是函数在delphi里调用不对

调用应该是成功的

哪位高手帮帮忙

--------------------------------------------------------------------------------

试过了 不行滴说

--------------------------------------------------------------------------------

type

TFun = function(FileName: PChar; ID: PChar): BOOL; stdcall;

var

Func: TFunc;

begin

Handle := LoadLibrary(DLLNAME.dll"); //动态载入DLL,并返回其句柄

try

if Handle > 0 then

Func := GetProcAddress(Handle, "funname");

if Assigned(Func) then

Func("MyFileName", "MyID");

finally

FreeLibrary(Handle);

end

--------------------------------------------------------------------------------

function funname(pFileName:pchar; pID:pchar):integer; stdcall; external "DLLNAME.dll" name "funname";

这样试下,一般char *对应的是PChar,而不是var A: PChar

--------------------------------------------------------------------------------

dll可能不是按照标准顺序调用参数的

--------------------------------------------------------------------------------

先用vc++做个dll,记得声明函数的时候要_stdcall做前缀,例如:

_stdcall int TestC(int i);

_stdcall char* add1(char *s);

然后将此dll放在delphi程序的目录里,在delphi动态引用此dll的某函数的时候,要用cdecl做后缀;例如:

M:function(i:integer):integer;cdecl;

M1:function(i:pChar):pChar;cdecl;

--------------------------------------------------------------------------------

function funname(pFileName:pchar; pID:pchar):integer; stdcall; external "DLLNAME.dll" name "funname";

也可以这样试试

function funname(pFileName:pchar;var pID:char):integer; stdcall; external "DLLNAME.dll" name "funname";

--------------------------------------------------------------------------------

delphi中的char *是pansichar

--------------------------------------------------------------------------------

ansean基本把这个问题说清楚了。

1、保证你传递的参数要正确:C++中的char *对应PASCAL中的pchar。

2:C++中导出的函数的参数调用方式要和你DELPHI中的导入的函数参数调用方式要一致!

例如: C++的参数调用方式 对应的DELPHI的参数调用方式

_declspec cdecl

WINAPI,CALLBACK stdcall

PASCAL pascal

我遇到过你同样的问题,后来把STDCALL改为cdecl,问题就解决了,因为我在C++导出函数时使用的是“_declspec(dllexport)”,也就是C参数调用格式。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。