C#调用Fortran写的DLL
用的是绑在VS.net上的IntelFortran编译器Fortran的代码SubroutinexyADD(x,y)IMPLICITNONE!强制类型声明!DEC$ATT...
用的是绑在VS.net上的Intel Fortran编译器
Fortran的代码
Subroutine xyADD(x,y)
IMPLICIT NONE !强制类型声明
!DEC$ ATTRIBUTES DLLEXPORT::xyADD
!DEC$ ATTRIBUTES ALIAS:'xyADD'::xyADD
integer x,y
integer sum
write(*,*)'输入计算数据'
read(*,*) x,y
sum=x+y
write(*,*)"Subroutine in DLL"
write(*,*) sum
return sum
End Subroutine
C#的代码
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("fdll1.dll",CallingConvention=CallingConvention.StdCall)]
public extern static int xyADD(ref int x,ref int y);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
int x, y, result;
x = int.Parse(textBox1.Text);
y = int.Parse(textBox2.Text);
result = xyADD(ref x, ref y);
textBox3.Text = result.ToString();
}
}
大家帮我看看哪里不对,出现的错误是Intel Fortran runtime error 很长恨可怕的一个错误界面
哦 write(*,*)
read(*,*)
弄掉了就可以运行了。只是得到的结果是很长的数字,和预期的不一样。但ref关键字我觉得应该要用的,Fortran里参数传递都是地址传递,C#也得和它统一啊? 展开
Fortran的代码
Subroutine xyADD(x,y)
IMPLICIT NONE !强制类型声明
!DEC$ ATTRIBUTES DLLEXPORT::xyADD
!DEC$ ATTRIBUTES ALIAS:'xyADD'::xyADD
integer x,y
integer sum
write(*,*)'输入计算数据'
read(*,*) x,y
sum=x+y
write(*,*)"Subroutine in DLL"
write(*,*) sum
return sum
End Subroutine
C#的代码
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("fdll1.dll",CallingConvention=CallingConvention.StdCall)]
public extern static int xyADD(ref int x,ref int y);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
int x, y, result;
x = int.Parse(textBox1.Text);
y = int.Parse(textBox2.Text);
result = xyADD(ref x, ref y);
textBox3.Text = result.ToString();
}
}
大家帮我看看哪里不对,出现的错误是Intel Fortran runtime error 很长恨可怕的一个错误界面
哦 write(*,*)
read(*,*)
弄掉了就可以运行了。只是得到的结果是很长的数字,和预期的不一样。但ref关键字我觉得应该要用的,Fortran里参数传递都是地址传递,C#也得和它统一啊? 展开
2个回答
展开全部
参数没事,主要是C#中用的是图形界面,而FORTRAN的DLL竟然用了:
write(*,*)
read(*,*)
这两个东西只能用在控制台界面~~~~~
计算结果不对的俺在编程爱好者论坛已回复:
Fortran代码改改:
Function xyADD(x,y)
IMPLICIT NONE
!DEC$ ATTRIBUTES DLLEXPORT::xyADD
!DEC$ ATTRIBUTES ALIAS:'xyADD'::xyADD
integer x,y
integer xyADD
xyADD=x+y
End Function
write(*,*)
read(*,*)
这两个东西只能用在控制台界面~~~~~
计算结果不对的俺在编程爱好者论坛已回复:
Fortran代码改改:
Function xyADD(x,y)
IMPLICIT NONE
!DEC$ ATTRIBUTES DLLEXPORT::xyADD
!DEC$ ATTRIBUTES ALIAS:'xyADD'::xyADD
integer x,y
integer xyADD
xyADD=x+y
End Function
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询