将实际值从fortran77 dll返回到c#

有人可以指出我在这里做错了什么吗?

FORTRAN 77 dll代码

*$pragma aux DON "DON" export parm(value*8,value*8) SUBROUTINE DON(DAA,DBB,DCC) REAL*8, DAA,DBB,DCC DBB=DAA+1 DCC=DBB+1 RETURN END 

C#代码

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Diagnostics; namespace pDON { class Program { [DllImport("DON.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern void DON( [MarshalAs(UnmanagedType.R8)] double DAA, [MarshalAs(UnmanagedType.R8)] double DBB, [MarshalAs(UnmanagedType.R8)] double DCC ); static void Main(string[] args) { //double TIME = 100.0; double DAA = 5.5; double DBB = 7; double DCC = 9; //START( ENERIN, VAL1); DON(DAA, DBB, DCC); Console.Write("val1 = " + DBB); Console.Write("val2 = " + DCC); Debug.WriteLine("VAR = " + DBB.ToString()); Console.Write("Press any key to exit"); Console.ReadKey(false); } } } 

我想通过FORTRAN 77子程序处理它们后,将DBB DCC的值恢复到C#main prog ..

PS:我不能使用INTENT(out)作为我使用fortran 77.非常感谢提前。

谢谢大家的建议

输入参数应该通过值传递并输出参数…通过引用传递所以我将我的Auxilary编译指示更改为“”* $ pragma aux DON“DON”导出parm(值* 8,引用,引用)“”它现在正在工作

再次感谢

好吧,你用值参数调用Fortran函数。 您应该使用reference-parameters(指针)从中获取值。

或者,您可以从包含两个值的fortran代码返回一个strcuture。 您必须在C#中将其编组为相应的类型并从中读取结果。

但是我担心我对fortran没有任何想法,甚至我的一个建议是否可行。