C # не может найти точку входа в Фортран dll - PullRequest
1 голос
/ 12 января 2011


Мне дали работающую программу на Фортране, и я должен написать для нее C # GUI (не спрашивайте, почему). Эта программа уже имеет графический интерфейс FORTRAN, поэтому я извлек все вычислительные подпрограммы и поместил его в FORTRAN dll. Эта dll состоит из 4 файлов: одной статической библиотеки, одного файла FORTRAN77 (.for) и двух файлов FORTRAN90 (.f90). Я поместил все подпрограммы, которые должны вызываться из кода C #, в EXPORT.f90.
ФОРТРАН КОД:

MODULE MYVAR
  REAL*8 LK
  COMMON LK
END MODULE    

SUBROUTINE SETLK(NEWLK)
  !DEC$ ATTRIBUTES DLLEXPORT :: SETLK
  USE MYVAR
  REAL*8 NEWLK
  LK = NEWLK
END

SUBROUTINE GETLK(LKOUT)
  !DEC$ ATTRIBUTES DLLEXPORT :: GETLK
  USE MYVAR
  REAL*8, INTENT(OUT):: LKOUT
  LKOUT = LK
END

Теперь я пытаюсь вызвать их на C #

[DllImport(@"MYDLL.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl,
EntryPoint="SETLK")]
public static extern void SETLK(ref double NEWLK);

[DllImport(@"MYDLL.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl,
EntryPoint="GETLK")]
public static extern void GETLK(out double LKOUT);


static void Main(string[] args)
{
    double d1 = 1.234;
    SETLK(ref d1);
    double d2;
    GETLK(out d2);
    Console.WriteLine(d2.ToString());
}

Я получаю EntryPointNotFoundException «Не удалось найти точку входа« SETLK »в« MYDLL.dll »». Что мне нужно сделать, чтобы это работало?
Thanx

Ответы [ 2 ]

1 голос
/ 12 января 2011

В этой ветке предлагается, чтобы вам был нужен файл .def для объявления экспорта функций (как вы это делали в программировании Windows)

1 голос
/ 12 января 2011

Загляните в свою DLL с помощью инструмента, подобного PE Explorer. Он скажет вам, какие именно функции экспортируются.

...