取消引用记录元素

时间:2016-08-09 15:14:25

标签: delphi record dereference

我有一个由C编写的DLL填充的记录,具有以下结构:

 Thackrf_device_list = record
   serial_numbers: PPAnsiChar;
   usb_board_ids: ^hackrf_usb_board_id;
   usb_device_index: PInteger;
   devicecount: Integer;
   usb_devices: PPointer;
   usb_devicecount: Integer;
  end;

记录似乎填写正确,因为返回的整数'devicecount'和'usb_devicecoun't是预期的。 我无法弄清楚的是如何取消引用其他元素。 我需要的是食谱或一些很好的例子 任何帮助

2 个答案:

答案 0 :(得分:2)

取消引用指针非常简单。如果指针属于记录,类或只是某个变量并不重要。您可以通过在指针标识符后面添加List<WebElement> unavailableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch.disabledSwatch")); List<WebElement> availableElements = driver.findElements(By.cssSelector("div.swatchesContainer span.swatch")); availableElements.removeAll(unavailableElements); List<String> unavailableSizes = new ArrayList<String>(); List<String> availableSizes = new ArrayList<String>(); for (WebElement e : unavailableElements) { unavailableSizes.add(e.getText()); } for (WebElement e : availableElements) { availableSizes.add(e.getText()); } 运算符来取消引用指针。

例如:

^

答案 1 :(得分:1)

在Delphi中取消引用指针是使用解除引用运算符的一个简单问题。取消引用指针时,它会生成指针引用的类型的值。对于无类型指针,这意味着您需要进行类型转换以告诉编译器解除引用所产生的类型:

var
  intPtr: PInteger;
  charPtr: PChar;
  ptr: Pointer;
  int: Integer;
  char: Char;
begin
  // ..

  int  := intPtr^;   // read as: int := the int pointed to by intPtr
  char := charPtr^;  // read as: char := the char pointed to by charPtr

  // For untyped pointers you need to cast

  int  := Integer(ptr^);
  char := Char(ptr^);
end;

因此,如果指针是指向指针的指针,那么取消引用它会产生该指针,然后可以取消引用该指针。

您可以将此解除引用指针用于变量以及类和记录的成员(如示例所示)。但是,编译器和语言还支持自动解除引用。

也就是说,如果你有一个指向某个记录类型的指针并希望引用那个记录的特定成员,你仍然可以使用取消引用运算符你可以退出解除引用操作符(编译器会自动取消引用)。

使用简单的 TPoint 记录作为示例:

type
  PPoint = ^TPoint;
  TPoint = record
    X, Y: Integer;
  end;

var
  pointPtr: PPoint;
  myX, myY: Integer;
begin
  //..

  myX := pointPtr^.X;
  myY := pointPtr^.Y;

  // or you can simply write:

  myX := pointPtr.X;
  myY := pointPtr.Y;
end;