我有一个Delphi 2007程序,它调用Delphi 2010 DLL.该计划很大,尚未移植到2010年,所以我现在无法改变这一点.
我使用SimpleShareMem Unit传递字符串,但也尝试使用borlndmm.dll ShareMem.
对于一个函数,我现在将一个字符串从Delphi 2007程序传递给dll(因此AnsiString).调试dll时,此AnsiString看起来很正常,可以在监视列表中查看.但如果我做一个简单的想法
AnAnsiString := PassedAnsiString;
Run Code Online (Sandbox Code Playgroud)
变量AnAnsistring获取值'???????'#0#0#0'???A',但PassedAnsiString在监视列表中仍然可读.还有一个字符串追加
AnAnsiString := PassedAnsiString + NotPassedAnsiString;
Run Code Online (Sandbox Code Playgroud)
使用'???????'#0#0#0'???A'的价值.
问题出在哪儿?这是2007年< - > 2010年的问题吗?怎么解决?感谢帮助.
这可能是因为在D2009中添加到ansistring的编码字段.Iow记录(TAnsiRec)在ansistring指针的负偏移处是不同的并且在unicode和非unicode Delphi之间移位(ansistring在unicode版本中也改变了!)
除了回到p(ansi)char级别之外,我认为没有一个像样的解决方案