如何将 Delphi 字符串传递给 Prism DLL?
我们尝试将字符串从本机 Delphi 程序传递到 Delphi Prism DLL。 传递整数没有问题,但 DLL 中的字符串不匹配。 我们在回答另一个问题时看到了 Robert Love 的代码片段,但没有原生Delphi程序的代码。
我们如何将字符串从 Delphi 传递到 Delphi Prism DLL?
We try to pass a string from a native Delphi program to a Delphi Prism DLL.
We have no problem passing integers, but strings are mismatched in the DLL.
We saw Robert Love's code snippet in response to another question, but there is no code for the native Delphi program.
How can we pass strings from Delphi to a Delphi Prism DLL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最好的方法是使用 WideString。
出于几个原因。
在 Oxygene 中,您可以这样编写:
“MarshalAs”告诉 CLR 如何来回编组字符串。如果没有它,字符串将作为 Ansi (PAnsiChar) 传递,这可能不是您想要做的。
这是在 Delphi 中使用它的方法:
此外,永远不要将未明确定义的类型用于外部接口。
您不得使用 PChar 进行 DLL 导入或导出。因为如果你这样做,当你用 D7 或 D2009 编译它时你会遇到异常(取决于原始的开发系统是什么)
The best way would be to use WideString.
For several reasons.
In Oxygene, you could write it like so:
"MarshalAs" tells the CLR how to marshal strings back and forth. Without it, strings are passed as Ansi (PAnsiChar), which is probably NOT what you would want to do.
This is how to use it from Delphi:
Also, never ever use types, that are not clearly defined, for external interfaces.
You must not use PChar for DLL imports or exports. Because if you do, you will run into exceptions when you compile it with D7 or D2009 (depending on what the original dev system was)
Delphi Win32 中字符串的管理方式与 .Net 中的字符串不同,因此您不能将 .Net 字符串传递给 Delphi Win32,反之亦然。
要交换字符串值,最好使用两个编译器都支持的 PChar 类型。这与将字符串值发送到 Windows API 函数的方式相同。
问候
我不是罗伯特;-)
Strings in Delphi Win32 are managed differently from strings in .Net, so you can not pass a .Net string to Delphi Win32 or vice versa.
To exchange strings values you'd better use PChar type which is supported by both compilers. That is the same way you send string values to Windows API functions.
Regards
P.S. I am NOT Robert ;-)