delphi的PBy数组数组

时间:2016-08-01 18:17:20

标签: arrays delphi pointers

我在一个不可修改的DLL中有一个函数,它需要一个@ PBuffer传递给PBYTE。

function Base(Buffer: PBYTE): Integer;

除此之外,我有不同长度的缓冲区。 现在我想创建一个类似于Array的东西,它包含所有这些缓冲区,以便于访问(需要索引)。我试着把它转向每一个方向,但我处于精神上的死胡同。

Buffer1: array[0..100] of Byte;
Buffer2: array[250..600] of Byte;

Buffers: array of PByte;

最接近工作,我的其他功能的使用问题现在试图接受

function Foo(var Buffer: PByte): Boolean;
begin
    Result := Boolean(Buffer[SomePosition]);
end;

投掷     “需要Array-Type”。

我将整个结构颠倒过来交换指针,使用我自己的类型引入的指针数组或创建一个PBy数组的数组,这导致了我自然不一致的数组长度问题。我无法解决它。

编辑:详细信息

buffers : array of PByte;
buffer_DB11 : array[0..200] of byte;
buffer_DB20 : array[400..640] of byte;

function ReadInt(var Buffer : array of Byte; Position : Word): Integer;
begin
  Result := buffer[Position]*256+buffer[Position+1];
end;

procedure TServiceItem.FetchValues;   // somewhere else
begin
    Value := IntToStr( ReadInt( buffers[db], Position) );
end;

我希望能让我更清楚我想要做的事情。

1 个答案:

答案 0 :(得分:0)

我没有看到不可修改的DLL进入它的位置,所以关闭编辑你似乎认为PByte和字节数组是相同的。他们不是。

buffers [xxx]的类型为PByte而不是byte的数组,因此您需要转换或修改函数以获取PByte。

buffers : array of PByte;
buffer_DB11 : array[0..200] of byte;
buffer_DB20 : array[400..640] of byte;

function ReadInt(var Buffer : PByte; Position : Word): Integer;
begin
  Result := buffer[Position]*256+buffer[Position+1];
end;

procedure TServiceItem.FetchValues;   // somewhere else
begin
    Value := IntToStr( ReadInt( buffers[db], Position) );
end;