gpt4 book ai didi

c - Fortran 编译和 C 编译的 DLL 是否应该能够互换导入? (x86 目标)

转载 作者:太空狗 更新时间:2023-10-29 16:12:43 27 4
gpt4 key购买 nike

前提:我正在编写一个符合行业标准接口(interface)/函数签名的插件DLL。这将在我公司内部使用的至少两个不同的软件包中使用,这两个软件包都有一些示例骨架代码或这个特定接口(interface)的空壳。一家供应商使用 C/C++ 编写示例,另一家使用 Fortran。

理想情况下,我只想用一种语言编写和维护这个库代码,而不是复制它(特别是因为我现在才对各种 C 语言有一定的了解,但还没有接触过 Fortran ).

我已经通过电子邮件发送给我们的两家供应商,看看他们的求解器在导入此 DLL 时是否需要任何特定的东西,但这让我在更基本的层面上感到好奇。如果我在 C 和 Fortran 中使用公开的方法 void foo(int bar) 编译一个 DLL...当它下降到 x86 机器指令时 - 它对该方法的方式有什么影响被程序“X”调用?到目前为止,我已经收集到,如果我要使用 C++,我需要 extern "C" 位来避免“损坏”——还有其他我应该注意的事情的?

最佳答案

这很重要。导出的函数必须使用特定的调用约定,在 32 位代码中有几个不兼容的常用约定。调用约定规定了函数参数的存储位置、传递顺序以及再次删除的方式。以及函数返回值是如何传回的。

而且函数的名称很重要,导出的函数名称通常装饰有额外的字符。这就是 extern "C" 的全部意义所在,它抑制了 C++ 编译器用来防止重载函数具有相同导出名称的名称修饰。因此,该名称是 C 编译器的链接器可以识别的名称。

如果您与用其他语言编写的代码互操作,C 编译器进行函数调用的方式几乎是标准的。任何现代 Fortran 编译器都支持声明以使其与 C 程序兼容。可以肯定的是,与您合作的任何软件供应商都已经使用过它,它们提供了用 Fortran 编写的附加组件。反之,只要您提供 C 编译器可以使用的函数,Fortran 程序员就很有可能调用它。

关于c - Fortran 编译和 C 编译的 DLL 是否应该能够互换导入? (x86 目标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21062263/

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