私はDelphi7でIndy9を使用しています。 Longword(Athread.Handle)をTIDPEERTHREADポインタにキャストしたいと思います。 私はこれをどのようにすることができる方法がありますか? また、ポインタをロングワードに「格納」できる方法はありますか?IndyHandle to TIDPEERTHREAD
ありがとうございました。
私はDelphi7でIndy9を使用しています。 Longword(Athread.Handle)をTIDPEERTHREADポインタにキャストしたいと思います。 私はこれをどのようにすることができる方法がありますか? また、ポインタをロングワードに「格納」できる方法はありますか?IndyHandle to TIDPEERTHREAD
ありがとうございました。
TIdPeerThread
は、TThread
の子孫である。そのHandle
プロパティには、CreateThread()
のOSレベルのスレッドハンドルが含まれています。 Handle
値を直接オブジェクトポインタにキャストする方法はありません。でTIdPeerThead.Handle
値を格納します)
var
LW: LongWord;
Peer: TIdPeerThread;
Peer := ...;
LW := LongWord(Peer);
...
Peer := TIdPeerThread(LW);
2:
1)LongWord
ではなく、TIdPeerThread.Handle
値TIdPeerThread
オブジェクトポインタ自体を保存して、必要なときにそれをバックキャスト:あなたはどちらかになりますLongWord
、必要なときに一致する値を持つTIdPeerThread
オブジェクトを探してTIdTCPServer.Threads
リストを、ループ:答えを
var
LW: LongWord;
Peer: TIdPeerThread;
List: TList;
I: Integer;
Peer := ...;
LW := LongWord(Peer.Handle);
...
Peer := nil;
List := IdTCPServer1.Threads.LockList;
try
for I := 0 to List.Count-1 do
begin
if LongWord(TIdPeerThread(List[I]).Handle) = LW then
begin
Peer := TIdPeerThread(List[I]);
Break;
end;
end;
finally
IdTCPServer1.Threads.UnlockList;
end;
感謝。 TIdPeerThreadをロングワードに格納してキャストする方法を少し例を挙げて教えてください。前もって感謝します。 –
私は自分の答えを更新しましたが、整数へのポインタと後ろにポインタを型変換する方法を実際に表示する必要がありましたか?それはDelphi 101のプログラミングです(おそらく102でしょう)。 –
本当に助けになりました。答えてくれてありがとう。 –