我使用以下代码在2个可执行文件之间共享一个短字符串:
Type
PInstanceInfo = ^TInstanceInfo;
TInstanceInfo = packed record
MainAppHandle: THandle;
SessionPath: String[255];
end;
Var MappingHandle: THandle;
InstanceInfo: PInstanceInfo;
MappingHandle := CreateFileMapping(INVALID_HANDLE_VALUE,
nil,
PAGE_READWRITE,
0,
SizeOf(TInstanceInfo),
PChar('MyApp'));
InstanceInfo := MapViewOfFile(MappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TInstanceInfo));
InstanceInfo^.MainAppHandle := Application.Handle;
我使用SessionPath来存储文件路径。当两个应用程序均为x86或x64时,此方法工作正常,但是当App1为32位且App2为64位时,当我读取字符串时,App2缺少字符串的前4个字符。在这种情况下,ShortString结构有何不同?
答案 0 :(得分:3)
THandle
是指针大小的。因此它是32位还是64位,具体取决于平台。这就解释了丢失的4个字节。实际上,可以通过在测试程序中使用SizeOf
函数来轻松地看到这一点。