DLL将Fortran导入C#

时间:2019-04-05 10:46:30

标签: c# fortran dllimport

我想在C#应用程序中运行fortran dll。

我尝试使用System.Runtime.InteropServices中的DllImport来这样做。无法从dll中执行子例程,因为无法获取“ System.BadImagFormatException”。

以下是Fortran示例代码, cmdwmaindll是我要在C#中调用的dll

program CallDll
    !DEC$ ATTRIBUTES::Cndwmaindll
    implicit none

    ! Variables
      character*4 cond1in, cond2in, brnamein
      real cgpmin, ecwtin, lcwtin, condffin, wbrinein,thr1in, thr2in
      real tsat1in, tsat2in, dt1in, dt2in
      character*3 hconfigin
      real ctn1out, ctn2out,lt1out, lt2out,WPDFtout

      cond1in = 'V058'
      cond2in = cond1in
      cgpmin = 125.00
      ecwtin = 85.00
      lcwtin = 0.00
      condffin = 0.00025
      wbrinein = 0.0
      brnamein = '00'
      thr1in = 31.4
      thr2in = 31.4
      tsat1in = 105.8
      tsat2in = 105.5
      dt1in = 160.0
      dt2in = 160.0
      hconfigin = 'STD'
      call Cndwmaindll(cond1in, cond2in, cgpmin, ecwtin, lcwtin, &
                       condffin, brnamein,wbrinein,thr1in, &
                       thr2in,tsat1in,tsat2in,dt1in,dt2in, &
                       hconfigin, &
                       ctn1out,ctn2out,lt1out,lt2out,WPDFTout)
      Write(*,*) ctn1out, ctn2out, lt1out, lt2out, WPDFTout
    end program CallDll

C#代码段

[DllImport(@"Cndwmaindll.dll", CharSet = CharSet.Ansi,CallingConvention = CallingConvention.Cdecl)]
        public static extern void Cndwmaindll([In] char[] cond1in, [In]char[] cond2in, ref float cgpmin, ref float ecwtin, ref float lcwtin, ref float condffin,
          ref string brnamein, ref float wbrinein, ref float thr1in, ref float thr2in, ref float tsat1in, ref float tsat2in, ref float dt1in, ref float dt2in, [In] char[] hconfigin,
         ref float ctn1out, ref float ctn2out, ref float lt1out, ref float lt2out, ref float WPDFtout);

0 个答案:

没有答案