永发信息网

C#调用Fortran写的DLL

答案:2  悬赏:0  手机版
解决时间 2021-03-01 10:15
用的是绑在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竟然用了:
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
全部回答
用depends工具打开你的dll文件,看下缺少哪些依赖的dll,找到之后放到你的dll同一个目录,界面上黄色问号的就是缺少依赖的dll。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
7850k好还是860k加显卡好。那个方案好一些。
男友说只要我好好的就行!
安徽今年文科生577分选择那些学校合适
市政道路工程施工控制要点
前隆集贸市场在哪里啊,我有事要去这个地方
从陕西韩城到淄博博山区驾车怎么走
我和我女朋友吵架了可是马上情人节了我怎么办
数学与应用数学专业,大学学什么啊
受益匪浅 语重心长合起来造句
热的什么填空
L&G陶瓷精品馆地址在什么地方,想过去办事
苍耳的叶子用蒜臼子捣烂敷在关节处有消炎止痛
卖茅台镇贵赖酒发展下线入会得提出,是传销吗
带豹字的成语有哪些
请问上下开合的窗我应该怎样表达装修公司才明
推荐资讯
1994美国科学家在圣马太岛放养了29只驯鹿,由
广州雅居乐花园灏湖居交通方便吗?应该怎么过
当人体受伤出血时,有自动止血和加速凝血作用
遂宁市人口和计划生育委员会(西山北路)在什么
老房子翻新要拆墙,大概多少钱?怎么算的?
【测量仪器有哪些】测量仪器有哪些
北京师范大学生物好还是北京交通大学好?
@字什么意思iC0n
在临朐创业的话,干点什么比较好比较靠谱
3t加速器怎么用
QQ视频是不是能做假视频?看到的不一定是真人
苏州工业园区有哪些工资高,待遇好的电子厂或
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?