gpt4 book ai didi

delphi - 在 Delphi 中编写 DLL 以便从其他语言调用

转载 作者:行者123 更新时间:2023-12-03 15:45:04 25 4
gpt4 key购买 nike

这将是我第一次尝试在 Delphi 中编写 DLL 以从其他语言调用。

我进行了大量的谷歌搜索,看到了一些很好的建议,但没有详尽的内容(至少,我有一些问题在 the Embarcadero material 中找不到答案)。

我想知道这个警告列表是否详尽,或者我是否遗漏了任何内容,以及是否有人可以回答我下面的问题。

  • 如果我希望我的 DLL 可以从其他语言调用,那么我就不能使用 ShareMem 单元。
  • 我无法使用 String 类型,应坚持使用 PChar
  • 如果我想返回一个字符串,调用者应该向我传递一个缓冲区来将其写入(我不应该自己为其分配内存,即使我提供了一个例程来释放它) )
  • 我应该坚持使用简单类型,例如 intgetrPChar(还有其他类型吗?)

几个问题:

  • 编译器禁止我导出枚举和常量。我只是没有正确声明它们吗?我希望调用 Delphi 软件能够使用枚举元素,并且所有调用者都能够使用常量。
  • 我不应该使用任何结构,因为编译器之间的字节对齐可能存在差异。所以,如果我不能接受结构作为参数。我想我应该只有一个由 integerPChar 组成的长参数列表?
  • 我可以接受数组作为参数吗?或者边界对齐会带来危险吗?
  • 我可以接受/返回 float / double 吗?
  • bool 值?或者我是否坚持“zer0 === false,而其他一切都是 true”?

  • 还有什么我应该知道的吗?

预先感谢您的帮助

最佳答案

The compiler forbids me to export enums and constants. Am I just not declaring them correctly? I would like calling Delphi s/w to be able to use the enum elements and all callers to be able to use constants.

您无法导出枚举类型和常量。调用者必须再次声明它们。类型也是如此。

I should not use any structures because of possible differences in byte alignment between compilers.

随意使用记录。同一平台上的编译器之间的对齐是标准化的。请确保您使用现代的 Delphi、XE2 或更高版本,它们遵循正确对齐的平台标准。

So, if I can't accept strctures as parameters. I guess I should just have a long parameter list of integers and PChars?

您可以接收记录作为参数。

Can I accept arrays as parameters, or does boundary alignment make that dangerous?

您可以接受数组。您需要接收指向第一个元素的指针以及元素的数量。数组元素始终紧跟在前一个元素之后。

Can I accept/return floats/doubles? Booleans? Or am I stuck with "zero === false and all else is true"?

是的,您可以使用浮点类型和 bool 值。

Is there anything else I should know?

几乎可以肯定。

我会再提一个问题,但肯定还有更多问题。不要使用记录作为函数的返回类型。 Delphi 在处理记录的函数返回类型时不遵循平台标准。请改用输出参数。

<小时/>

通过示例了解可以做什么的一个好方法是研究 Windows API。

关于delphi - 在 Delphi 中编写 DLL 以便从其他语言调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20296905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com