共享内存 - 访问冲突

问题描述

请告诉我,我想将json写入共享内存。 StrPcopy 如果文本超过 2047 个字符错误“0x004074ba 处的访问冲突:地址条目 0x00381000”。我没有找到有关限制的信息。也许还有另一种写json的方式?

var
    SecurityAttr: TSecurityAttributes;
    SecurityDescr: TSecurityDescriptor;
begin
    InitializeSecurityDescriptor(@SecurityDescr,Security_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(@SecurityDescr,True,nil,False);
    SecurityAttr.nLength:=SizeOf(TSecurityAttributes);
    SecurityAttr.lpSecurityDescriptor:=@SecurityDescr;
    SecurityAttr.bInheritHandle:=True;

    SendMMF := CreateFileMapping($FFFFFFFF,@SecurityAttr,PAGE_READWRITE,32,PChar('Global\Test'));

    if (SendMMF = 0) then
     Exit;

    SendData := MapViewOfFile(SendMMF,FILE_MAP_WRITE,0);

    if SendData = nil then
        Exit;


    StrPcopy(SendData,GetJson);

    if Assigned(SendData) then
        Exit;

    if SendMMF.Size > 0 then
        Exit;

    UnmapViewOfFile(SendData);
    SendData := nil;
    CloseHandle(SendMMF);
end;

Test case

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)