dll调用奇怪的字符串行为

时间:2010-09-22 09:19:37

标签: delphi string dll

我有一个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年问题?怎么解决? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:5)

这可能是因为在D2009中添加到ansistring的编码字段。 Iow记录(TAnsiRec)在ansistring指针的负偏移处是不同的,并在unicode和非unicode Delphi之间移动(ansistring在unicode版本中也改变了!)

除了回到p(ansi)char级别

之外,我认为没有一个合适的解决方案