【发布时间】:2012-11-12 21:24:49
【问题描述】:
我已经尝试了 2 天,但无法成功。
我试图做同样的事情这个家伙做了:-> 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)不匹配)
-
这个
*$pragma aux ...只有Open Watcom F77编译器才能理解。
标签: c# visual-studio-2010 dll fortran return-value