将实际值从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没有任何想法,甚至我的一个建议是否可行。