首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi 7缓冲区指针覆盖有不同的数据

Delphi 7缓冲区指针覆盖有不同的数据
EN

Stack Overflow用户
提问于 2016-08-09 16:27:20
回答 3查看 485关注 0票数 0

在Delphi 7中,我将大型缓冲区和指针定义为Byte数组。这是用于Win32 ReadEventLog调用的缓冲区。

我将第二个指针定义为缓冲区数据的记录结构。这是一个将结构添加到字节数组中的覆盖。

问题:两个指针上的数据是不同的。缓冲区^数据与RecordPtr^数据不相同。两个指针的地址是相同的。

问:声明覆盖指针的正确方法是什么?

代码语言:javascript
复制
Type
  TEventRecord = record
    Length       : dword;
    Reserved     : dword;
    RecordNumber : dword;
    end;

  TByteArray = array of byte;

Var
  Buffer : TByteArray;
  RecordPtr : ^TEventRecord = @Buffer;
  MyData : TEventRecord;

begin
  Setlength (Buffer, $FFF0);
  // ReadEventLog....
  // Watch of Buffer^ and RecordPtr^ shows different data
end.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-09 16:58:17

动态数组Buffer: array of byte是指针,所以@Buffer是指向指针的指针。

若要对TEventRecord的内容进行每字节访问,可以指定指向字节数组数据开头的指针:

代码语言:javascript
复制
type
  PEventRecord = ^TEventRecord;

var
  PEventRecord_Var: PEventRecord;

begin
  PEventRecord_Var := @Buffer[0]; 
票数 3
EN

Stack Overflow用户

发布于 2016-08-09 17:00:43

你为什么不这样做呢?

代码语言:javascript
复制
Type
  TEventRecord = record
    Length       : dword;
    Reserved     : dword;
    RecordNumber : dword;
    end;

  TEventLog = array of TEventRecord ;

Var
  Buffer : TEventLog;

begin
  Setlength (Buffer, $FFF0);
  // ReadEventLog(@buffer[0],...) 

end.
票数 0
EN

Stack Overflow用户

发布于 2016-08-09 19:49:15

你可以像这样实现你想要的目标:

代码语言:javascript
复制
Var
  Buffer : TByteArray;
  RecordPtr : ^TEventRecord absolute Buffer;

这使得两个变量在内存中占据相同的4个字节(或64位中的8个字节)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38856027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档