我一直在尝试这个东西2天,不能使它的工作。从FORTRAN 77代码返回值C#
我试图做到这一点的人做同样的事情: - >returning real values from fortran77 dll to c#
,因为他做了,我究竟做了一切。即使在相同的编译器中使用相同的参数进行编译。
但我得到“试图读取或写入受保护的内存,这通常表示其他内存已损坏。”错误。
需要帮助!
这里是我的C#代码:
[DllImport("Lks.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 unsafe 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 = " + DAA);
Console.Write("val2 = " + DCC);
Debug.WriteLine("VAR = " + DBB.ToString());
Console.Write("Press any key to exit");
Console.ReadKey(false);
}
这里是我的FORTRAN 77代码:
*$pragma aux DON "DON" export parm(value*8, reference, reference)
SUBROUTINE DON(DAA,DBB,DCC)
REAL*8, DAA,DBB,DCC
DBB=DAA+1
DCC=DBB+1
RETURN
END
一切看起来都是一样的我。所以我认为也许是VS2010的问题。
和你的fortran编译器是...? (可能的原因是通过值传递(C#)/通过引用(Fortran)不匹配) – IanH
此'* $ pragma aux ...'只能由Open Watcom F77编译器理解。 –