kbmmw 客户端:64 位请求流问题

kbmmw Client: 64-bit request stream issue

我在 Delphi 10.3 IDE 上使用 64 位 kbmmw 包开发了客户端-服务器应用程序。 64 位客户端应用程序通过设置请求服务名称和用户名属性的 SendRequest 方法(kbmmwClient class 方法)向服务器发送请求。 在 kbmmwClient 库内部创建一个请求流 (TkbmMWCustomRequestTransportStream class) ,它将被发送到服务器。

tRequestStream:=TkbmMWCustomRequestTransportStream(cStreamClass.Create(FTransport,FTransport.Info));
tRequestStream.RequestID:=rid;
tRequestStream.ServiceName:=AServiceName;
tRequestStream.Username:=FUsername;
--Begin my debug-----------------
debug('InternalSendRequest - tRequestStream.ServiceName: ' + tRequestStream.ServiceName);
debug('InternalSendRequest - tRequestStream. Username: ' + tRequestStream.Username);
t := tkbmmwmemorystream(tRequestStream.DataStream);
SetString(streamstring, PAnsiChar(t.Memory), t.Size);
write_debug('InternalSendRequest - tRequestStream - DataStream: ' + streamstring);
--End my debug

这是调试结果:

14/04/2020 15:50:32.226: InternalSendRequest - tRequestStream.ServiceName: reqservice
14/04/2020 15:50:32.226: InternalSendRequest - tRequestStream. Username: ANDAPI
14/04/2020 15:50:32.227: InternalSendRequest - tRequestStream - DataStream: Ìû¯
   STANDARDü     
   r e q s e r v i c e            A N D A P I             ÿÿÿÿ        €                    

为什么服务名称(reqservice)和用户名(ANDAPI)的字符中间穿插着空字符? 当我使用 32 位 kbmmwClient 时,请求流以正确的格式发送。

ServiceName、UserName 和许多其他字符串作为 kbmMW 字符串流式传输。它们的流式传输方式取决于:

  1. 编译器是否支持 Unicode?
  2. 传输流版本是否 >= 300?
  3. 是否在传输流选项中设置了 mwtsoUnicodeStrings?

如果不支持 Unicode,则发送 8 位非代码页字符串(无零)。 如果第 2 点和第 3 点不匹配,它也作为 8 位非代码页字符串发送(从 Unicode 简单下转换)

所以我的猜测是,如果您使用的是相同的 Delphi 版本,那么您在 32 位代码中是否专门将传输流版本降级为与旧版本的 kbmMW 兼容?

此致 Kim/C4D