procedure _Thread_SQ_(_ball_: Pointer);
var
b: Ball;
begin
b := _ball_ as Ball;
showmessage(b.link_sq);
end;_ball_ 是传进来的 Ball 类 Pointer
现在想 b := _ball_ as Ball;
怎么搞都不成功!!帮帮忙~~~谢谢了!!
var
b: Ball;
begin
b := _ball_ as Ball;
showmessage(b.link_sq);
end;_ball_ 是传进来的 Ball 类 Pointer
现在想 b := _ball_ as Ball;
怎么搞都不成功!!帮帮忙~~~谢谢了!!
var
myObj : TMyClass;
begin
myObj := TObject(obj) as TMyClass;
Showmessage(myObj.ClassName);
end;var
s : TMyClass;
begin
s := TMyClass.Create;
ShowClass(Pointer(s));
s.Free;
end;
var
b: Ball;
begin
b := TObject(_ball_) as Ball;
showmessage(b.ClassName);//这里报错
end;错误信息:
Project C:\sq\sq.exe faulted with message: 'access violation at 0x00478abd: read of address 0x00000000'.
process Stopped. Use Step or Run to Continue.我的是多线程的
_ball_: Pointer 是在创建线程时传进来的参数!
不知道是不是和你们的不一样!!?
var
b: Ball;
begin
b := TObject(_ball_) as Ball;
showmessage(b.ClassName);
end;procedure TForm1.BTN_ActionClick(Sender: TObject);//开始
var
i: Integer;
b: Ball;
temp: WideString;
hThread: THandle;
begin
text.Text := '';
for i := 1 to sg.RowCount - 1 do begin
temp := sg.Cells[7,i];
if trim(temp) <> '' then begin
b := Ball.create;
b.row_num := i;
b.link_sq := temp;
system.IsMultiThread := true;
hThread := windows.CreateThread(nil,0,@_Thread_SQ_,@b,0,b.thread_id_sq);
closehandle(hThread);
common.bs.add(common.GetSys_DTZ,b);
end;
end;
end;
@b改为Pointer(b),或直接用b,b已经是个指针了,不要再取地址