【发布时间】:2016-03-15 23:26:16
【问题描述】:
我正在尝试在 C# 中使用 Fortran DLL,但我没有使用 Fortran 的经验。我遇到问题的部分是 dll 的输出参数,特别是字符。在 Fortran 代码中,它们被定义为:
character*32 JobName
character*(*) Fname
character*80 Title(2)
有人知道 C# 中的等价物吗?所有其他都是整数,所以我可以处理它们。通过阅读,我不能直接使用 char,因为它在 C# 中是 8 个字节,在 Fortran 中是 4 个字节。
更多 Fortran 代码如下:
*deck,ResRdBegin
function ResRdBegin (Nunit, Lunit, Fname, ncFname, Title, JobName, Units, NumDOF, DOF, UserCode, MaxNode, NumNode, MaxElem, NumElem, MaxResultSet,NumResultSet)
integer ResRdBegin, Nunit, Lunit, ncFname, Units, iTemp(100), NumDOF, DOF(*), UserCode, kbf, NumResultSet, MaxNode, NumNode, MaxElem, NumElem, MaxResultSet, i,j
character*32 JobName
character*(*) Fname
character*80 Title(2)
【问题讨论】:
-
您是想将其转换为 C#,还是实际引用 DLL?我不确定您是否可以引用 Fortran DLL,除非它包含在 COM 中。
-
this question 的回答涵盖了两种情况。
character*(*)的形式给出了一个假定的长度字符变量,其行为与其他两个略有不同。 -
请注意,只有最后一个是一个数组(长度为 2),其他只是字符串,而不是数组。更重要的是参数列表中可能有隐藏参数:stackoverflow.com/questions/34822683/…stackoverflow.com/questions/8207997/…隐藏参数包含字符串的长度,而不是数组的长度。
-
要说得更多,你就必须播种更多。至少是 Fortran 过程的完整标头。包括任何编译器指令。
-
谢谢大家,有很多东西要通读...这需要我一点时间。同时,我将添加更多细节。我有点含糊,因为源代码受版权保护,但我获得了使用 dll 的许可。该文件用于从某些商业软件读取二进制输出。这是一个博客文章的链接,其中有人使用 cpp 做了同样的事情。同样,我在处理字符类型时遇到了问题。 padtinc.com/blog/the-focus/…