求救大佬
https://www.cnblogs.com/potential/archive/2012/11/05/2755899.html依据这篇博客进行的操作,显示异常为
[url=]图片[/url]
Fortran编译器用的Intel Parallel Studio XE 2019,项目为.Net FrameWork 4框架下的Fortran Dynamic-link Library,新建.f90文件,代码如下:
[Fortran] 纯文本查看 复制代码 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)中编写的调用代码如下:
[C#] 纯文本查看 复制代码 using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace MixedProgram
{
public static class FortranMethod
{
[DllImport("TestDll.dll" ,CallingConvention = CallingConvention.Cdecl)]
public static extern double Add(double a, double b);
[DllImport("TestDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern double Sortandfindmax(double[] arry, int length);
}
}
Main方法下的执行代码如下:
[C#] 纯文本查看 复制代码 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[i] + "");
}
double b = FortranMethod.Sortandfindmax(Array, Array.Length);
Console.Write("\n" + "排序后:");
for (int i = 0; i < Array.Length; i++)
{
Console.Write(Array[i] + "");
}
Console.WriteLine("\n" + "最大值为:");
Console.WriteLine(b);
Console.ReadKey();
}
}
启动出现错误:引发的异常:“System.BadImageFormatException”(位于 MixedProgram.exe 中)
“System.BadImageFormatException”类型的未经处理的异常在 MixedProgram.exe 中发生
试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
|