用的是绑在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#也得和它统一啊?
C#调用Fortran写的DLL
答案:2 悬赏:0 手机版
解决时间 2021-03-01 10:15
- 提问者网友:且恨且铭记
- 2021-02-28 15:38
最佳答案
- 五星知识达人网友:第四晚心情
- 2021-02-28 16:03
参数没事,主要是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
全部回答
- 1楼网友:你可爱的野爹
- 2021-02-28 16:28
用depends工具打开你的dll文件,看下缺少哪些依赖的dll,找到之后放到你的dll同一个目录,界面上黄色问号的就是缺少依赖的dll。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯