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#也得和它统一啊?
展开
 我来答
好小爱新
2010-07-08 · TA获得超过806个赞
知道小有建树答主
回答量:864
采纳率:100%
帮助的人:570万
展开全部
参数没事,主要是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
lcg1986
2010-07-07 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1613万
展开全部
public extern static int xyADD(ref int x,ref int y);
两个ref去掉看看.ref传的地址~~.你的DLL里面的参数可不是地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式