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 .data
    

    Weiterhin 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 Verweise
    

    Ich 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...

    😋


Anmelden zum Antworten