C# 从fortran77 dll向c返回实值#
有人能指出我做错了什么吗 FORTRAN 77 dll代码C# 从fortran77 dll向c返回实值#,c#,dll,return-value,fortran77,C#,Dll,Return Value,Fortran77,有人能指出我做错了什么吗 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 using System; using System.Collections.Generic;
*$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
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);
}
}
}
C#代码
*$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
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
注意:我不能使用INTENT(out),因为我使用的是fortran 77。
非常感谢。好的,您正在使用值参数调用Fortran函数。您应该使用引用参数(指针)从中获取值 或者,您可以从包含两个值的fortran代码返回一个structure。您必须在C#中将其封送到相应的类型,并从中读取结果
但我担心我对fortran一无所知,甚至连我的一条建议都不管用。谢谢大家的建议 输入参数应按值传递,输出参数应按引用传递 所以我把我的辅助语改成了 “*$pragma aux DON”DON“导出参数(值*8,引用,引用)” 现在它正在工作
再次感谢所以。。错误消息是什么?没有错误消息。。。值保持不变DBB=7 DCC=9预期值为DBB=6.5 DCC=7.5感谢deceze编辑我的帖子我尝试了输出参数的引用类型..但结果相同。