我有一个地址指向的两个进程之间的共享内存块(1024 字节)。我想将一些数据复制到这个共享内存中,并在另一个进程上读取它。来自 C 背景,似乎最容易将记录映射到该地址,然后写入记录,但它似乎没有正确复制。
目前,我正在尝试使用未经检查的转换将指针转换为指向记录的指针类型,然后复制到记录中,但是当我将原始有效负载与第二个过程中收到的有效负载进行比较时,我发现数据存在差异.
这是这样做的正确方法吗?:
type Payload_Array_Type is array (1..255) of Integer_32;
type Common_Buffer_Type is
record
Size : Integer_32;
Payload : Payload_Array_Type;
end record;
type Common_Buffer_Ptr_Type is access Common_Buffer_Type;
function Convert_Common_Memory_Ptr is new Unchecked_Conversion (
Source => System.Address,
Target => Common_Buffer_Ptr_Type);
Common_Memory_Ptr : System.Address;
procedure Copy_To_Common_Buffer
(
Size : Integer_32;
Payload : Payload_Array_Type
) is
Common_Buffer_Ptr : Common_Buffer_Ptr_Type;
begin
Common_Buffer_Ptr := Convert_Common_Memory_Ptr(Common_Memory_Ptr);
Common_Buffer_Ptr.Size := Size;
Common_Buffer_Ptr.Payload(1..255) := Payload(1..255);
end Copy_To_Common_Buffer;