delphi如何调用vc写的dll中的函数(100分)

  • 主题发起人 主题发起人 longlybug
  • 开始时间 开始时间
L

longlybug

Unregistered / Unconfirmed
GUEST, unregistred user!
vc写的dll中的函数声明如下:
_stdcall DesFunc2(LPSTR input,LPSTR deskey,short int flag, LPSTR& output,LPSTR& strlen)

请问delphi中如何调用?
 
function DesFunc2(input,deskey:Pchar;flag:integer
output,strlen:Pchar):?;stdcall
 
不行,按照你说的调用
function DesFunc2(input,deskey:Pchar;flag:integer
output,strlen:Pchar):integer;stdcall
external 'des.dll';

procedure Tfrm_dialup.bt_dialClick(Sender: TObject);
var
i,j:integer;
desflag:smallint;
a,b,c,key,m:pchar;
begin
desflag:=0;
a:='hello';
c:=' ';
m:=' ';
key:='123';
i:=desfunc2(a,key,desflag,c,m);
showmessage(c);
exit;
end;

调用出错,提示Access Violation at address 10006761 in module 'des.dll'.
 
Function DesFunc2(input:PChar
deskey:PChar
flag:ShortInt
output:PPChar
strlen:PPChar):Integer;stdcall
external 'des.dll';

首先C中的short int是16位有符号整数对应Delphi的shortint.
在一个后两个参数传递的是两个的引用,实际上编译后就是传指针而已。因为类型是LPSTR所以就是字符指针的指针 PPChar。
调用如下
var
i,j:integer;
desflag:smallint;
a,b,c,key,m:pchar;
begin
desflag:=0;
a:='hello';
c:=' ';
m:=' ';
key:='123';
i:=desfunc2(a,key,desflag,@c,@m);
showmessage(c);
exit;
end;
 
后退
顶部