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