R
rsina
Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近写一个程序,用到 CreateThread 传递一个结构,结果发现有两个问题:
1、最后一个结构成员总传递失败,显示为乱码,但是如果使用逐个填充就没问题;
2、结构成员必须是pchar类型,如果使用string类型也会失败;
这是为什么啊?
//======================================================
type
msg = record
caption: pchar;
str: pchar;
end;
Pmsg=^msg;
implementation
{$R *.dfm}
function test(pp: Pmsg): DWORD
stdcall;
begin
messagebox(0,pchar(pp.caption), pchar(pp.str), 0);
result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Threadid: dword;
Parameter: Pmsg;
mymsg: msg;
begin
mymsg.caption := '1';
mymsg.str := '2';
messagebox(0,pchar(mymsg.caption), pchar(mymsg.str), 0);
parameter := @mymsg
//这种方法导致mymsg.str 显示为乱码
{ //如果使用以下方法就没问题
getmem(Parameter, Sizeof(Parameter));
Parameter.caption := '1';
parameter.str := '2';
}
CreateThread(Nil, 0, @test, Parameter, 0, Threadid);
end;
1、最后一个结构成员总传递失败,显示为乱码,但是如果使用逐个填充就没问题;
2、结构成员必须是pchar类型,如果使用string类型也会失败;
这是为什么啊?
//======================================================
type
msg = record
caption: pchar;
str: pchar;
end;
Pmsg=^msg;
implementation
{$R *.dfm}
function test(pp: Pmsg): DWORD
stdcall;
begin
messagebox(0,pchar(pp.caption), pchar(pp.str), 0);
result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Threadid: dword;
Parameter: Pmsg;
mymsg: msg;
begin
mymsg.caption := '1';
mymsg.str := '2';
messagebox(0,pchar(mymsg.caption), pchar(mymsg.str), 0);
parameter := @mymsg
//这种方法导致mymsg.str 显示为乱码
{ //如果使用以下方法就没问题
getmem(Parameter, Sizeof(Parameter));
Parameter.caption := '1';
parameter.str := '2';
}
CreateThread(Nil, 0, @test, Parameter, 0, Threadid);
end;