Fortran-DLL unter VisualStudio aus C ansprechen
-
Hallo,
ich habe Fortran-Quellen, die ich aus C heraus ansprechen möchte. Habe die Quellen erfolgreich kompiliert.
!DEC$ ATTRIBUTES DLLEXPORT :: START SUBROUTINE START() INTEGER J,M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC,NWRITE INTEGER IPVT(3) ...Ein bindump liefert
File Type: DLL Section contains the following exports for lmdif.dll 0 characteristics 4450BF73 time date stamp Thu Apr 27 14:56:19 2006 0.00 version 1 ordinal base 2 number of functions 2 number of names ordinal hint RVA name 1 0 00007E38 START 2 1 00007E38 _START@0 Summary 1000 .dataWeiterhin habe ich eine Header-Datei geschrieben, um die externe Funktion START ansprechen zu können:
extern "C" void START(void);Dummerweise klappt das so nicht:
lmdif_test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _START Debug/lmdif_test.exe : fatal error LNK1120: 1 unaufgeloeste externe VerweiseIch habe schon mit underscores herumgespielt und die !DEC$ ATTRIBUTES DLLEXPORT :: START am Anfang eingefügt, aber irgendwie klappt das nicht.
Hat wer ein Kochrezept für solche Fälle?
Gruß,
Tobias
-
Wenn Du keine Import-LIB hast, dann musst Du die Funktion via LoadLibrary und GetProcAddress einbinden... sowas in der Form:
typedef void (__stdcall *PFunc) (); PFunc pFunc = NULL; HMODULE hMod = LoadLibrary(_T("my.dll")); pFunc = (PFunc) GetProcAddress(hMod, "Func");
-
Ich arbeite unter einfachem C. Da müße es doch reichen, den Header einzubinden und die dll zu linken, oder?
Der Aufruf
main() { START(); }sollte doch zum Aufruf der dll führen... hoffe ich!
-
Wie willst Du eine DLL "linken", wenn Du keine LIB-Datei dazu hast?
-
Ähhh- habe mich grad mal schlau gemacht. Hast natürlich völlig recht. Für Dummies wie mich: "Projekteinstellungen -> Linker -> lmdif.lib einbinden.
Herzlichen Dank - wieder was gelernt...
