2011-01-12 11 views
1


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

Antwort

1

This thread empfiehlt Ihnen, eine DEF-Datei benötigen, um die Funktion Exporte zu erklären (wie Sie es gewohnt in nativen Windows-Programmierung)

+0

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 –

1

Schauen Sie in Ihre DLL mit einem Tool wie PE-Explorer. Es wird Ihnen sagen, welche exakten Funktionen exportiert werden.

+0

ok, vielen Dank. Es zeigt keine exportierten Funktionen in meiner DLL. so das Problem ist jetzt, diese Subroutinen exportiert –

Verwandte Themen