回 帖 发 新 帖 刷新版面

主题:有c#和fortran混合编程的问题请教老师们  复数传参问题

现在在给我老板的fortran程序进行封装,将其编译成dll以后再c#里面调用。现在遇到一个问题,需要请教大神们。。
    我的c#如何往dll里面传递复数的参数,和取出计算以后复数的结果呢?
    c#我引用了System.Numerics;,里面有complex的类型了
    谢谢大神们!!

回复列表 (共3个回复)

沙发

我尝试的结果 是编译运行无错误,但是计算输出的结果没有变化,下面是我的fortran代码
subroutine kerrde(dk,ek,rratio)
    !dec$ attributes c,dllexport,alias:'Kerrde'::kerrde
    complex*16 rratio
    ddk=2*dreal(rratio)/(1-rratio*dconjg(rratio))
    dk=0.5*atan(ddk)
    eek=2*dimag(rratio)/(1+rratio*dconjg(rratio))
    ek=0.5*asin(eek)
    return
end subroutine kerrde


下面是我的c#代码
        [DllImport("CoreDll.dll", CallingConvention = CallingConvention.Cdecl)]  
        public static extern void Kerrde(Complex rratio, out double dk, out double ek);

            double x1,x2;
            Complex x=new Complex(1, 1.554);

            CoreMain.Kerrde(x, out x1, out x2);

板凳


输出的 x1 x2都是0

3 楼


1、C#中将复数拆成实部和虚部传递给Fortran;
2、C#中定义复数结构体,然后将复数结构体传入Fortran

我来回复

您尚未登录,请登录后再回复。点此登录或注册