奇怪的问题?请大家解释(50分)

  • 主题发起人 主题发起人 yanzhong
  • 开始时间 开始时间
Y

yanzhong

Unregistered / Unconfirmed
GUEST, unregistred user!
function test(var s1,s2,s3,s4,s5:pchar):integer;
var
a,b,c,d,e:string;
begin
...从数据库中取出数据付值
a:=ADOQuery.FieldByName('name').AsString;
b:=ADOQuery.FieldByName('unit').AsString;
c:=ADOQuery.FieldByName('no_dep').AsString;
d:=ADOQuery.FieldByName('dep_name').AsString;
e:=ADOQuery.FieldByName('no_room').AsString;//读出的都是正确的数据
s1:=pchar(a);
s2:=pchar(b);
s3:=pchar(c);
s4:=pchar(d);
s5:=pchar(e);;//读出的仍是正确的数据

end;

procedure getrecord;
var
p1,p2,p3,p4,p5:pchar;
r:integer;
begin
r:=test(p1,p2,p3,p4,p5);//此时读出的数据有的是乱码或不全

end;

//参数如果是1-2个数据是正确的,若参数多了,数据就出乱码或不全

实在不知什么原因?
谢谢了
 
用string 或者widestring
 
function test(var s1,s2,s3,s4,s5:pchar):integer;
改为:function test(var s1,s2,s3,s4,s5:String):integer; 试试!
 
因为我那个函数是放到DLL里,类型不能用string
 
注意一下,调用类型是stdcall 还是cdecl,这两种释放方式是不一样的,
另:将最后一个s5,改成array of char
 
多人接受答案了。
 
后退
顶部