2012-04-27 4 views
1

私はDelphi7でIndy9を使用しています。 Longword(Athread.Handle)をTIDPEERTHREADポインタにキャストしたいと思います。 私はこれをどのようにすることができる方法がありますか? また、ポインタをロングワードに「格納」できる方法はありますか?IndyHandle to TIDPEERTHREAD

ありがとうございました。

答えて

2

TIdPeerThreadは、TThreadの子孫である。そのHandleプロパティには、CreateThread()のOSレベルのスレッドハンドルが含まれています。 Handle値を直接オブジェクトポインタにキャストする方法はありません。でTIdPeerThead.Handle値を格納します)

var 
    LW: LongWord; 
    Peer: TIdPeerThread; 

Peer := ...; 
LW := LongWord(Peer); 
... 
Peer := TIdPeerThread(LW); 

2:

1)LongWordではなく、TIdPeerThread.HandleTIdPeerThreadオブジェクトポインタ自体を保存して、必要なときにそれをバックキャスト:あなたはどちらかになります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; 
+0

感謝。 TIdPeerThreadをロングワードに格納してキャストする方法を少し例を挙げて教えてください。前もって感謝します。 –

+2

私は自分の答えを更新しましたが、整数へのポインタと後ろにポインタを型変換する方法を実際に表示する必要がありましたか?それはDelphi 101のプログラミングです(おそらく102でしょう)。 –

+0

本当に助けになりました。答えてくれてありがとう。 –