用VC调用DELPHI3.0编的DLL如何返回数组和单个变量参数的值.(200分)

  • 主题发起人 主题发起人 CZHEN
  • 开始时间 开始时间
C

CZHEN

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟用DELPHI3.0编了一个Dll, 需在VC5中调用. 调用者和DLL均用
stdcall调用约定. 但无法用参数返回数值.

请教各位大虾如何返回数组和单个参数.(var和指针均已尝试)

dll:

type
a=array[0..3] of byte;
p=^a;

function Set_para_array(var irq:a):byte;stdcall;
begin
irq[0]:=1;
irq[1]:=1;
irq[2]:=1;
irq[3]:=1;
end;

function Set_para_one(var one:byte):byte;stdcall;
begin
one:=11;
end;

exports
set_para_one, set_para_array;

c:
typedef BYTE m_Set_para_one(byte *one);
typedef BYTE m_Set_para_array(byte one[]);

int a;
int b[4];
//LoadLib等省
//调用:
set_para_one(&a);
set_para_array(b);

指针,VAR,变量本身的各种组合作VC和DELPHI的参数几乎均已尝试,未果.

求助!求助!求助!求助!求助!

 
试试下面:
type PInt = Integer^;

function Set_para_array(irq:PInt):byte;stdcall;
begin
irq^:=1;
(pchar(irq)+sizeof(integer))^:=1;
(pchar(irq)+sizeof(integer)*2)^:=1;
(pchar(irq)+sizeof(integer)*3)^:=1;
result:=byte(irq^);
end;

type PByte = Byte^;

function Set_para_one(one:Pbyte):byte;stdcall;
begin
one^:=11;
result:=one^;
end;

int a;
int b[4];
//LoadLib等省
//调用:
set_para_one(&a);
set_para_array(b);
 
四个字节在Vc里是Int,delphi程序用Integer接受,然后分解!
 
应为
BYTE a;
BYTE b[4];
//LoadLib等省
//调用:
set_para_one(&a);
set_para_array(b);

由于类型不匹配,int 和 BYTE变量所占的空间不同,传递地址后的解释不同!!!
 
请继续讨论或结束此问题。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
893
import
I
后退
顶部