Ich wurde ein funktionierendes FORTRAN-Programm gegeben und ich muss C# GUI dafür schreiben (frag nicht warum). Dieses Programm hat bereits eine FORTRAN-GUI, also habe ich alle Computer-Subroutinen extrahiert und in die FORTRAN-DLL gestellt. Diese DLL besteht aus 4 Dateien: einer statischen Bibliothek, einer FORTRAN77-Datei (.for) und zwei FORTRAN90-Dateien (.f90). Ich habe alle Subroutinen, die von C# aufgerufen werden sollen, in EXPORT.f90 eingefügt.
Fortran-Code:C# kann keinen Einstiegspunkt in Fortran dll finden
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
Jetzt versuche ich, sie in 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());
}
ich EntryPointNotFoundException erhalten zu nennen "Fail-Einstiegspunkt 'SETLK' in 'MYDLL.DLL' zu finden". Was muss ich tun, damit es funktioniert?
Danke
Danke zu machen. es hat funktioniert, aber ich kann immer noch nicht verstehen, warum ich EXPORT _SETLK @ 4 anstelle von EXPORT SETLK schreiben muss. Wenn es nur SETLK ist, bekomme ich 3 Warnungen: 1. kann keine eindeutige Übereinstimmung für das Symbol "SETLK" finden; 2. _SETLK definiert in. \ Debug \ EXPORT.obj; 3. _SETLK @ 4 definiert in. \ Debug \ EXPORT.obj; das führt zu Fehlern –