C# Fortran混合开发:在C#中调用Fortran的.dll显示异常
求救大佬https://www.cnblogs.com/potential/archive/2012/11/05/2755899.html依据这篇博客进行的操作,显示异常为
图片
Fortran编译器用的Intel Parallel Studio XE 2019,项目为.Net FrameWork 4框架下的Fortran Dynamic-link Library,新建.f90文件,代码如下:
DOUBLE PRECISION FUNCTION ADD(A,B)
!DEC$ ATTRIBUTES DLLEXPORT::ADD
!DEC$ ATTRIBUTES STDCALL,ALIAS:'Add'::ADD
DOUBLE PRECISION:: A,B
ADD=A+B
END
FUNCTION SORTANDFINDMAX(ARRAY,LENGTH)
!DEC$ ATTRIBUTES DLLEXPORT::SORTANDFINDMAX
!DEC$ ATTRIBUTES STDCALL,ALIAS:'Sortandfindmax'::SORTANDFINDMAX
DOUBLE PRECISION ::ARRAY(LENGTH)
INTEGER::I,J
DOUBLE PRECISION::SORTANDFINDMAX,TEMP
SORTANDFINDMAX=ARRAY(1)
DO I=1,LENGTH-1
DO J=I+1,LENGTH
IF(ARRAY(I).GT.ARRAY(J)) THEN
TEMP=ARRAY(I)
ARRAY(I)=ARRAY(J)
ARRAY(J)=TEMP
SORTANDFINDMAX=ARRAY(J)
END IF
END DO
END DO
END
解决方案生成成功,并将生成的。dll文件放到相应c#解决方案的Debug中。
在VS2019,C#控制台应用(基于.Net FrameWork 4)中编写的调用代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace MixedProgram
{
public static class FortranMethod
{
public static extern double Add(double a, double b);
public static extern double Sortandfindmax(double[] arry, int length);
}
}
Main方法下的执行代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MixedProgram
{
class Program
{
static void Main(string[] args)
{
//测试第一个方法
Console.WriteLine("请输入两个数相加");
double num1 = Convert.ToDouble(Console.ReadLine());
double num2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("输入的两个数是:" + num1 + "," + num2);
double sum = FortranMethod.Add(num1, num2);
Console.WriteLine("求和结果是:" + sum);
//测试第二个方法
double[] Array = { 1, 5, 2, 4, 3, 7, 6 };
Console.WriteLine("初始数组:");
for (int i = 0; i < Array.Length; i++)
{
Console.Write(Array + "");
}
double b = FortranMethod.Sortandfindmax(Array, Array.Length);
Console.Write("\n" + "排序后:");
for (int i = 0; i < Array.Length; i++)
{
Console.Write(Array + "");
}
Console.WriteLine("\n" + "最大值为:");
Console.WriteLine(b);
Console.ReadKey();
}
}
启动出现错误:引发的异常:“System.BadImageFormatException”(位于 MixedProgram.exe 中)
“System.BadImageFormatException”类型的未经处理的异常在 MixedProgram.exe 中发生
试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
DOUBLE PRECISION FUNCTION ADD(A,B)
!DEC$ ATTRIBUTES DLLEXPORT::ADD
!DEC$ ATTRIBUTES STDCALL,ALIAS:'Add'::ADD
DOUBLE PRECISION:: A,B
ADD=A+B
END
改为
Real(kind=8) FUNCTION Add(A,B) Bind(C,Name="Add")
!DEC$ ATTRIBUTES DLLEXPORT::Add
Real(8) , value :: A,B
ADD=A+B
END Function Add fcode 发表于 2020-12-30 08:32
DOUBLE PRECISION FUNCTION ADD(A,B)
!DEC$ ATTRIBUTES DLLEXPORT::ADD
!DEC$ ATTRIBUTES STDCALL,ALIAS:'A ...
感谢解答但改了过后还是不行,出现同样的错误,我看网上说是要将VS跟啥Intel Parallel Studio XE 2019绑定,不太懂,会使这个原因吗。还有如果我想研究C#与fortran混编,请问哪有相应的资料呀,VS的帮助文件有吗,还是说要去Itel官网找
Chastar 发表于 2020-12-30 09:37
感谢解答但改了过后还是不行,出现同样的错误,我看网上说是要将VS跟啥Intel Parallel Studio XE 2019绑 ...
会不会是这个原因,我安装IVF的时候vs里未安装C++的库
页:
[1]