加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 使用dll调用的奇怪字符串行为

发布时间:2020-12-15 09:27:36 所属栏目:大数据 来源:网络整理
导读:我有一个Delphi 2007程序,它调用Delphi 2010 DLL.该计划很大,尚未移植到2010年,所以我现在无法改变这一点. 我使用SimpleShareMem Unit传递字符串,但也尝试使用borlndmm.dll ShareMem. 对于一个函数,我现在将一个字符串从Delphi 2007程序传递给dll(因此AnsiSt
我有一个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年问题?怎么解决?
感谢帮助.

解决方法

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

除了回到p(ansi)char级别之外,我认为没有一个像样的解决方案

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读