dll 调用的奇怪字符串行为

发布于 2024-09-24 10:21:25 字数 609 浏览 3 评论 0原文

我有一个 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年的问题?如何修复它? 感谢您的帮助。

I have a Delphi 2007 Program, which calls a Delphi 2010 DLL. The Program is big and not yet ported to 2010, so there is no way i can change this right now.

I use SimpleShareMem Unit to pass strings but also tried ShareMem with borlndmm.dll.

For one function i now pass a string from the Delphi 2007 programm to the dll (Therefore AnsiString). When debugging the dll, this AnsiString looks normal and can be viewed in the watch list. But if i do a simple think like

AnAnsiString := PassedAnsiString;

the variable AnAnsistring gets the value '???????'#0#0#0'???A', but PassedAnsiString is still readable in watchlist. Also a string append like

AnAnsiString := PassedAnsiString + NotPassedAnsiString;

uses '???????'#0#0#0'???A' as value.

Where is the problem? Is it a 2007 <-> 2010 issue? How to fix it?
Thanks for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下凄凉 2024-10-01 10:21:25

这可能是因为 D2009 中 ansisstring 添加了一个编码字段。 IOW ansistring 指针负偏移处的记录 (TAnsiRec) 是不同的,并且在 unicode 和非 unicode Delphi 之间移动(ansiststring 在 unicode 版本中也发生了变化!)

我认为除了返回到 p( Ansi) 字符级别

This is probably because an encoding field that was added to ansistring in D2009. IOW the record (TAnsiRec) at negative offset of the ansistring pointer is different and shifted between unicode and non unicode Delphi's (ansistring changed too in unicode versions!)

I don't think there is a decent solution for this except dropping back to p(ansi)char level

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文