gpt4 book ai didi

c# - 从 Fortran 调用 C#

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:50 25 4
gpt4 key购买 nike

我没有在 Stack Overflow 上找到任何讨论从 Fortran 调用 C# 的帖子(我使用的是安装了 Intel Visual Fortran 的 Visual Studio 2010)。但是,帖子数量(非常)有限[1 , 2 , 3 ] 讨论从 Fortran 调用 C/C++。

在对这些帖子的其中一个回复中,有人建议从 Fortran 调用 C++ 比调用 C 更棘手,这让我怀疑 C# 可能更棘手了吗?没有C/C++/C#的基础,我想知道C/C++的程序是否适用于C#?

我在这些帖子中注意到的一个共同点是需要名为 ISO_C_BINDING 的内部模块。在阅读了更多关于它的信息后here ,我不清楚 ISO_C_BINDING 是否允许我将几个二维数组的信息传递给用 C# 编写的程序(编译为 DLL),调用一些“事件”(类似于函数?),以及在继续我的 Fortran 业务之前,终于从 C# 中取回了一个二维数组的信息。

如果熟悉 Fortran 和 C#,能否请您告诉我 ISO_C_BINDING 是否足以完成任务?我没有从上面列出的信息中得到那种感觉。如果有人有一个工作示例,包括在 C# 和 Fortran 之间传递数组,以及调用 C# 函数Fortran,我非常感谢有机会将其作为我如何进行的模板来查看。谢谢,埃里克

最佳答案

Fortran 代码:

function TestPass (floatArray) result (iRes)
implicit none
dll_export :: TestPass ! export function name

integer :: Ires
real, intent (in out) :: floatArray

dimension floatArray(5)

iRes = 0 ! Assign function result

open (5,FILE='output.txt')
write (5, 100) floatArray(3)

floatArray(0) = 0.0
floatArray(1) = 1.1
floatArray(2) = 2.2
floatArray(3) = 3.3
floatArray(4) = 4.4

! correct values are written to file here...
open (5,FILE='output.txt')
write (5, 100) floatArray(3)
100 format(5X,'got here',5X,F3.3)
close (5)
end function

C#代码:

static extern int TestPass (
[MarshalAs(UnmanagedType.LPArray, SizeConst=5,
ArraySubType=UnmanagedType.R4)]
float [] yields);

private void BtnTestClick(object sender, System.EventArgs e)
{
float [] floatArray = new float[5] {9.9F, 9.9F, 9.9F, 9.9F, 9.9F};
TestPass(floatArray);

// floatArray.Length == 0 after the function call

for ( int i = 0; i < floatArray.Length; i++ )
Trace.WriteLine(floatArray[i]);
}

另请参阅此链接:

http://software.intel.com/en-us/articles/calling-fortran-function-or-subroutine-in-dll-from-c-code

也可以引用一些理论:

http://www.ibiblio.org/pub/languages/fortran/ch2-4.html

关于c# - 从 Fortran 调用 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871845/

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