@Hと@H [0]の違い


8

私が持っています

 var H: array of THandle;

次に、ループで複数のスレッドを作成し、Hの要素にスレッドハンドルを割り当てて、それらを待機します。@H [0]を2番目のパラメーターとして以下のWFMOに渡すと機能します。

WaitForMultipleObjects(Length(H), @H[0], True, INFINITE) <-- Works

しかし、以下のように@Hを渡すと、WAIT_FAILEDで失敗します。GetLastErrorは「無効なハンドル」を返します。

WaitForMultipleObjects(Length(H), @H, True, INFINITE)  <--- Fails.

@Hが@H [0]と異なるのはなぜですか?

回答:


8
  1. 動的配列なので、 Hあるため、すでにポインタであり、最初の要素を指しているため、
  2. @H[0] と同じです H -最初の要素へのポインタ
  3. そして今@Hは等しい@@H[0]-最初の要素へのポインタへのポインタ。

ありがとうございました。したがって、Hがそのように宣言されたH: array[0..10] of THandle場合、@ H と@H [0]は同じになると思います。確認できます。
ナニ

@Naniはい、静的配列の場合H、演算子を介してそのアドレスを取得する必要があり、と等しいです。@@H@H[0]
ZED

また、POINTER(H)を使用して、動的配列の最初の要素へのポインターを取得できます。
HeartWare
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.