나는 PBYTE와 함께 @buffer를 전달하고자하는 수정 불가능한 DLL 내부에 함수를 가지고 있습니다.델파이 배열의 PByte 배열
function Base(Buffer: PBYTE): Integer;
그 위에 다른 길이의 버퍼가 있습니다. 이제 더 쉽게 접근 할 수 있도록 이러한 모든 버퍼를 포함하는 배열처럼 작동하는 무언가를 만들고 싶습니다 (인덱스 필요). 나는 그것을 어느 방향으로나 돌리려고했지만, 나는 정신이 막혔다.
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;
가 "필요한 배열 형"을 던지는 받아들이려고 내 다른 기능으로 사용의 문제, 작업에 가장 가까운했다.
필자는 전체 구조를 거꾸로 뒤집어서 포인터, 포인터 배열을 내 자신의 유형으로 도입했거나 PByte 배열 배열을 작성하여 자연스럽게 일관되지 않은 배열 길이 문제를 일으켰습니다. 나는 그것을 풀 수 없다.
편집 : 자세한 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;
나는 그게 내가 할 노력하고있어 명확하게 할 수 있기를 바랍니다.
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;
결과 : 버퍼 [위치] * 256 + 버퍼 [위치 +1]; '는 정수가 빅 엔디안 16 비트 형식으로 저장됨을 의미합니다. 그게 틀림 없습니까? –
귀하의 질문에 아무런 의미가 없으며 귀하와 의사 소통하려는 시도가 효과적이지 않기 때문에 제 답변을 삭제했습니다. –
아직도 무슨 일이 일어나고 있는지 명확하지 않습니다. 분명히,'Foo'는 진짜 이름이 아니며 다른 서명을 가지고 있습니다. 실제 코드를 표시하십시오 (예 : DLL 함수를 호출하는 방법 및 DLL 함수의 실제 선언 "진짜"는 코드에서 복사하여 붙여 넣었다는 의미입니다. –