@H和@H[0]之间的区别

8

我有

 var H: array of THandle;

然后我在循环中创建多个线程,并将线程句柄分配给H的元素,最后等待它们完成。在下面的 WFMO 函数中将 @H[0] 作为第二个参数传递是有效的。

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

但是像下面这样传递@H会导致失败并返回WAIT_FAILED。GetLastError会返回“无效句柄”错误。

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

为什么@H和@H[0]不同?
1个回答

8
  1. 由于它是一个动态数组,H 已经是一个指针,指向第一个元素,所以
  2. @H[0]H 相同 - 指向第一个元素的指针
  3. 现在,@H 等于 @@H[0] - 指向指向第一个元素的指针。

谢谢。所以,如果H被声明为H: array[0..10] of THandle,那么@H和@H[0]应该是相同的,我想我可以检查一下。 - Nani
@Nani 如果 H 是一个静态数组,那么你需要通过 @ 运算符获取它的地址,然后 @H 等于 @H[0] - zed
你也可以使用POINTER(H)来获取动态数组的第一个元素的指针。 - HeartWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接