Мне была предоставлена рабочая программа FORTRAN, и мне нужно написать C# GUI для нее (не спрашивайте почему). Эта программа уже имеет графический интерфейс FORTRAN, поэтому я выделил все вычислительные подпрограммы и поместил их в dll FORTRAN. Эта dll построена из 4 файлов: одна статическая библиотека, один файл FORTRAN77 (.for) и два файла FORTRAN90 (.f90). Я поместил все подпрограммы, которые должны быть вызваны из кода C# в EXPORT.f90.
FORTRAN КОД:C# не может найти точку входа в dll Fortran
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
спасибо. он работал, но я все еще не могу понять, почему мне приходится писать EXPORT _SETLK @ 4 вместо EXPORT SETLK. если это просто SETLK, я получаю 3 предупреждения: 1. Не могу найти уникальное соответствие для символа «SETLK»; 2. _SETLK определяется в. \ Debug \ EXPORT.obj; 3. _SETLK @ 4, определенный в. \ Debug \ EXPORT.obj; которые приводят к ошибкам –