【发布时间】:2013-11-30 05:28:21
【问题描述】:
这是我第一次尝试在 Delphi 中编写 DLL 以从其他语言调用。
我做了很多谷歌搜索,看到了一些很好的建议,但没有详尽无遗(至少,我有一些问题在the Embarcadero material 中找不到答案)。
我想知道这个警告列表是否详尽无遗,或者我是否遗漏了什么,是否有人可以在下面回答我的问题。
- 如果我希望我的 DLL 可以从其他语言调用,那么我不能使用
ShareMem单元。 - 我不能使用
String类型,应该坚持使用PChar - 如果我想返回一个字符串,调用者应该传递给我一个缓冲区来将它写入(我应该不自己分配内存,即使我提供了一个例程来释放它之后)
- 我应该坚持使用简单的类型,例如
integetr和PChar(还有其他类型吗?)
几个问题:
- 编译器禁止我导出枚举和常量。我只是没有正确声明它们吗?我想调用 Delphi s/w 以便能够使用枚举元素,并且所有调用者都能够使用常量。
- 我不应该使用任何结构,因为编译器之间的字节对齐可能存在差异。所以,如果我不能接受结构作为参数。我想我应该只有
integers 和PChars 的长参数列表? - 我可以接受数组作为参数吗,或者边界对齐会带来危险吗?
- 我可以接受/返回浮点数/双精度数吗?
布尔值?还是我坚持“zer0 === false,其他一切都是真的”?
还有什么我应该知道的吗?
提前感谢您的帮助
【问题讨论】:
-
您在“问题”中的所有结论都是错误的(可能除了第一个,它询问您是否声明了错误 - 您没有说明您是如何声明的,所以我们无法确定)。你可以做所有这些事情。如果你问一个更具体的问题,关于你的代码遇到的实际问题,那就更好了。
-
+1 肯,一如既往,你是大师。我知道这个问题的范围太广了。我只是想问一下——权威的书或 URL 是什么?我(你是如何)学会这样做的?
-
没有关于互操作的权威书籍。所有专家都以同样的方式学习。一边走一边一块一块地捡起来。