16,749
社区成员
发帖
与我相关
我的任务
分享
TMyThread = class(TThread)
private
{ Private declarations }
FList: TStrings;
procedure GetAllData;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
end;
implementation
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FList:= TStringList.Create;
end;
destructor TMyThread.Destroy;
begin
FList.Free;
inherited;
end;
procedure TMyThread.Execute;
var
...
begin
...
GetAllData;// 后面的procedure
...
end;
procedure TMyThread.GetAllData;
var
...
begin
.....
if FBoxList.Count > 0 then
OutputDebugString( PChar(IntToStr(FBoxList.Count)) );
....
//*************** 到OutputDebugString这里 watch显示 Flist 依然可以访问 *************//
OutputDebugString( PChar('GetAllData') );
//执行了ReadProcessMemory后,FList就是Inaccessible value
if not ReadProcessMemory(PHandle,Pointer(p),@Tmp1,32 ,ReadByte) then
begin
OutputDebugString('GetAllData --- ReadProcessMemory fail');
end;
if Tmp1 = 123 then
begin
FList.add('123'); //********************* access vioate 错误了 ********************//
end
......
end;