主题:有c#和fortran混合编程的问题请教老师们 复数传参问题
lingdu0001
[专家分:0] 发布于 2012-05-12 12:01:00
现在在给我老板的fortran程序进行封装,将其编译成dll以后再c#里面调用。现在遇到一个问题,需要请教大神们。。
我的c#如何往dll里面传递复数的参数,和取出计算以后复数的结果呢?
c#我引用了System.Numerics;,里面有complex的类型了
谢谢大神们!!
回复列表 (共3个回复)
沙发
lingdu0001 [专家分:0] 发布于 2012-05-12 12:04:00
我尝试的结果 是编译运行无错误,但是计算输出的结果没有变化,下面是我的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);
板凳
lingdu0001 [专家分:0] 发布于 2012-05-12 12:08:00
输出的 x1 x2都是0
3 楼
pasuka [专家分:670] 发布于 2012-05-12 18:21:00
1、C#中将复数拆成实部和虚部传递给Fortran;
2、C#中定义复数结构体,然后将复数结构体传入Fortran
我来回复