好的,所以还没有尝试过,所以一个很大的免责声明拍在这个上面。
在帮助查看器中,查看主题(RAD Stufio 中的 Unicode)ms-help://embarcadero.rs2009/devcommon/unicodeinide_xml.html
将 Delphi 2007 字符串返回到 Delphi 2009,您应该会遇到两个问题。
首先是 Rob 提到的代码页。您可以通过声明另一个 AnsiString 并在新的 AnsiString 上调用 StringCodePage 来设置它。然后通过调用 SetCodePage 将其分配给旧的 AnsiString。这应该有效,但如果没有,仍然有希望。
第二个问题是元素大小,这将是完全疯狂的事情。它应该是 1,所以设为 1。这里的问题是没有可依赖的 SetElementSize 函数。
尝试这个:
var
ElemSizeAddr: PWord; // Need a two-byte type
BrokenAnsiString: AnsiString; // The patient we are trying to cure
...
ElemSizeAddr := Pointer(PAnsiChar(BrokenAnsiString) - 10);
ElemSizeAddr^ := 1; // The size of the element
应该这样做!
现在,如果 StringCodePage/SetCodePage 的事情不起作用,您可以执行与上述相同的操作,将我们获取地址的行更改为减去 12,而不是 10。
上面写满了黑客,这就是我喜欢它的原因。
您最终将需要移植这些 DLL,但这会使移植更易于管理。
最后一句话 - 根据您返回 AnsiString 的方式(函数结果、输出参数等),您可能需要首先将字符串分配给不同的 AnsiString 变量,以确保不会出现内存被覆盖的问题。