线程如何取指针的值?
function ThreadProc(pIPAddr: Pointer): DWORD; stdcall;var lpIPAddr: PAnsiChar;begin // lpIPAddr := PChar(pIPAddr); MessAgeBox(0, PAnsiChar(pIPAddr), nil, 0);end;var lpIPAddr: PAnsiChar;begin GetMem(lpIPAddr, 255); ZeroMemory(lpIPAddr, 255); StrCopy(lpIPAddr, '192.168.1.110'); hThread := CreateThread(nil, 0, @ThreadProc, @lpIPAddr, 0, dwThreadID); WaitForSingleObject(hThread, INFINITE); FreeMem(lpIPAddr);end;
function ThreadProc(pIPAddr: Pointer): DWORD;var lpIPAddr: PAnsiChar;begin lpIPAddr := PChar(pIPAddr); MessageBox(0, PAnsiChar(pIPAddr), nil, 0);end;procedure TForm1.FormCreate(Sender: TObject);var lpIPAddr: PAnsiChar; hThread: Integer; dwThreadID: Cardinal;begin GetMem(lpIPAddr, 255); ZeroMemory(lpIPAddr, 255); StrCopy(lpIPAddr, '192.168.1.110'); hThread := BeginThread(nil, 0, @ThreadProc, lpIPAddr, 0, dwThreadID); WaitForSingleObject(hThread, INFINITE); FreeMem(lpIPAddr);end;
[解决办法]
真要写成类的方法的话,就在线程内调用类的方法,如:
function ThreadProc(pIPAddr: Pointer): DWORD;
begin
Form1.ThreadProc1(pIPAddr)
end;
function TForm1.ThreadProc1(pIPAddr: Pointer): DWORD;
var
lpIPAddr: PAnsiChar;
begin
lpIPAddr := PChar(pIPAddr);
MessageBox(0, PAnsiChar(pIPAddr), nil, 0);
end;