android - 德尔福10 : Problems with SizeOf(string) - Windows vs Android

标签 android delphi indy10 delphi-10-seattle

我想使用 Indy IdTCPClient 和 IdTCPServer 将 TMemoStream 从 Android 发送到 Windows。

问题是这样的:

SizeOf(string) in Android is 4 bytes
SizeOf(string) in Windows 10 is 8 bytes

在android中我使用了这段代码:

type TMyRecord = record
  x1: string;
  x2: string;
end;

var
  workRecord: TMyRecord;
  rInfo: TMemoryStream;
begin
  workRecord.x1:= 'Hello';
  workRecord.x2:= 'How are you';
  rInfo:= TMemoryStream.Create;

  try
    rInfo.Write(workRecord, SizeOf(workRecord));  //Size of workRecord is 8 bytes
    AndroidTCPClient.IOHandler.Write(workRecord, 0, False);
  finally
    rInfo.Free;
  end;
end;

在 Windows 10 中我使用了以下代码:

type TMyRecord = record
  x1: string;
  x2: string;
end;

type TMyRecord = record
  x1: string;
  x2: string;
end;

var
  workRecord: TMyRecord;
  rInfo: TMemoryStream;
begin
  rInfo:= TMemoryStream.Create;

  try
    AContext.Connection.IOHandler.ReadStream(rInfo, SizeOf(workRecord), False);
    rInfo.Position:= 0;
    rInfo.Read(workRecord, SizeOf(workRecord)); //Size of workRecord is 16 bytes
  finally
    rInfo.Free;
  end;
end;

有人告诉我如何设置从 Android 到 Windows 的传输字符串吗?

最佳答案

sizeof(string) 是指针的大小。您的 Windows 程序显然是针对 64 位编译的,因此指针的宽度为 8 个字节。您的 Android 程序目标为 32 位,指针为 4 字节宽。

更大的问题是您不能期望将指针从一个进程发送到另一个进程。指针指向发送程序中的内存。它们对接收者来说没有任何意义。您可能应该将数据序列化,例如序列化为 JSON,然后发送。然后接收者可以在收到后反序列化。

关于android - 德尔福10 : Problems with SizeOf(string) - Windows vs Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36059205/

相关文章:

android - Android 4.2.2 中不显示溢出菜单

android - 获取弹出窗口内 View 的绝对坐标

Delphi - 使用另一个单元的接口(interface)

delphi - 使用 Indy Server 的多个绑定(bind)作为单独的套接字?

android - 如何判断哪些文件支配了我的 apk 大小?

android - fire TV stick adb install apk 不起作用

delphi - 为什么在明显的 "safe"代码中使用异常处理?

delphi - Delphi 的条形码生成库

delphi - Indy 10 中的双向 TCP 通信?

delphi - 如何在已发送邮件文件夹中保存已发送电子邮件的副本