-1

当我在线程中使用记录时,例如:

type

TClient = Class(TThread)
public
    mcmd:record
    cid:Byte;
    kd, recvresponse:Boolean;
end;

当我尝试访问一个变量时,它会返回一个随机值。是编译器的问题吗?我在 Windows 7 x64 上使用 Delphi 6,访问它的方法是:

var
    c:TClient;
begin
    if listview1.itemfocused = nil then Exit;
    c := ListView1.ItemFocused.Data;
    if c = nil then Exit;
    ShowMessage(IntToStr(c.mcid.cid));
end;

我如何分配 itemfocused 数据变量是通过执行以下操作:

Procedure TClient.New;
Begin
    Main.ListView1.Items.BeginUpdate;
    item := Main.ListView1.Items.Add;
    item.Caption := Split(dat1, '|', 0);
    item.SubItems.Add(ip);
    item.Data := @Self;
    Main.ListView1.Items.EndUpdate;
End;

我叫它Synchronize

4

1 回答 1

1

Self是一个局部变量。您存储的指针在返回Data后立即失效NewSelf您需要存储它的值,而不是存储指向 的指针:

Item.Data := Self;

如果这不能编译,则进行类型转换。

于 2013-10-08T02:28:32.010 回答