我在一个不可修改的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;
我希望能让我更清楚我想要做的事情。
答案 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;