void方法(void * pixels);德尔福宣言

时间:2012-07-02 08:38:46

标签: delphi

如何将此声明转换为delphi?

void method (void *pixels);

我还有一些信息,我应该预先分配该变量。

有人能给我一个提示吗?

2 个答案:

答案 0 :(得分:3)

如果您需要坚持原始声明格式(例如转换C DLL标头时),转换将是:

procedure method(pixels: Pointer);

您可以找到有关将C标头转换为Delphi here

的更多信息

另一方面,如果要转换整个方法或类,则可能需要将其调整为更类似于Delphi的代码。我不知道“像素”是什么,所以我几乎猜不出哪个是最好的选择。

粗略猜测,如果它是一个包含每个像素(位置,颜色,alpha通道?)的信息的矩阵,您可以轻松地处理像对象列表那样的结构,或者创建自己的类来处理它。 / p>

HTH

答案 1 :(得分:2)

假设像素指向像素数组,您可以这样做:

procedure method(var pixels); cdecl;

如果您将像素作为 无类型 参数传递,则会将其隐式传递为指针,这也是C声明所做的,因此转换完全匹配原始。使用无类型指针使您可以将其强制转换为您喜欢的任何内容,或者使用其地址来获取指针。只要你知道像素的结构,这可能会更方便:

假设像素是一个固定大小的字节数组,其中每个位都是一个像素:

type
  TPixels = array[0..7] of Byte;

const
  Grey: TPixels = ($55, $AA, $55, $AA, $55, $AA, $55, $AA);

procedure method(var pixels); cdecl;
begin
  Move(Grey, pixels, Sizeof(Grey));
  // ...
  TPixels(pixels)[3] := $FF;
  // ...