在DLL中使用字符串参数的问题(100分)

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

cdkey

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一个HOST32.DLL,
在VB下
Declare Sub idcb_num Lib "host32.dll" (ByVal p%, ByVal s%, ByVal ch%, ByVal n%, a As Single, b%, t As String, e%)

Dim vdata(1 To 15) As Single
Dim vb(1 To 15) As Integer
Dim t As String
Dim e As Integer
t = "******" + "******"
idcb_num 1, 0, 1, 15, vdata(1), vb(1), t, e
正常通过。
改为DELPHI6:
type t_SZ=array[1..maxCH] of single; //一次读取的数据
type t_ZT=array[1..maxCH] of integer; //一次读取的状态

procedure idcb_num(AD_Add:integer;RM:integer;ch:integer;Num:integer;var a:t_SZ;var b:T_ZT;var t:string;var e:integer);

procedure idcb_num;external 'host32.dll' name 'idcb_num';

procedure ReadData;
var i,e:integer;vsz:t_sz;vzt:t_zt;vt:string;
begin
vt:='************';
idcb_num(1,0,1,1,vsz,vzt,vt,e);
end;
提示出错,请问是怎么回事?
 
dll中用到字符串需要在DLL的单元的USES中加入ShareMem
 
改为pchar
 
如果不是对外提供,在单元内部是可以使用的
 
to 王建伟:
加ShareMem也不行,提示非法操作。

to ugvanxk:
用PCHAR 也不行;

procedure idcb_num(AD_Add:integer;RM:integer;ch:integer;Num:integer;var a:t_SZ;var b:T_ZT;t:pchar;var e:integer);

procedure idcb_num;external 'host32.dll' name 'idcb_num';
procedure ReadData;
var i,e:integer;vsz:t_sz;vzt:t_zt;vt:pchar;
begin
P:=StrAlloc(255);
idcb_num(1,0,1,1,vsz,vzt,vt,e);

......
StrDispose(P);
end;
提示读地址错误
 
解决了,是没有加STDCALL
 

Similar threads

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