Unresolved External beim Einbinden einer (MSVC) DLL (war: Unresolved External)



  • Also, ich habe beim Versuch des dynamischen Einbindens einer DLL ein entsprechende Fehlermeldung, was die Methode "_OpenDevice" betrifft.
    Komischerweise gibt es aber im hanzen Projekt keine entsprechende Methode, sondern nur "OpenDevice". Hat das irgendwas mit irgendwelchen Namenskonventionen zu tun oder unterschieden zwischen MSVC und BCB, den eigentlich war der ganze Quellcode für MS gedacht.
    Hat überhaupt jemand einem Verdacht?

    P.S. Bitte bitte, gebt die Suchfunktion wieder frei.

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Wenn ich Deinen text richtig interpretiere willst Du irgendwo irgendeine die X-beliebige DLL-Funktion OpenDevice() aufrufen, richtig?



  • Fast.
    Die Funktion in der DLL heist ungefähr "mvOpenBoard".
    Diese versuche ich (bzw. die die das geschrieben haben) dynamisch zu laden, indem es einem Funktionszeiger zugewiesen wird der OpenDevice heist.

    Deswegen kann ich das auch gar nicht verstehen, da selbst in der DLL diese Funktion nicht existiert.



  • Mit 'n bisschen Code könnte man vielleicht konkret werden ...



  • Ich habe eine Funktionssammlung eined Drttanbiertes, hier mal eine Stark gekürtzte Fassung.

    //HEADER
    extern "C" {
    
    void		CloseDevice (DEV_T *dev);
    DEV_T FAR*	OpenDevice(int boardnr, CHAR FAR* dllname_par, CHAR FAR* inifile, INT FAR* result);
    
    }
    
    //C_DATEI
    //----------------------------------------------------------------------------------------
    DEV_T FAR* OpenDevice ( int boardnr, CHAR FAR* dllname_par, CHAR FAR* inifile, INT FAR* result)      
    {
        if( OpenDriverDLL( dllname_par,inifile,result ) >= 0)
        {
            if( ( boardnr >= 0 ) && PCIDevice[g_SelDevNr].fkt.SelBoard )
                PCIDevice[g_SelDevNr].fkt.SelBoard( NULL, boardnr );
            return InitDevice( result );
        }
        else	
            return NULL;
    }
    //----------------------------------------------------------------------------------------
    
    void CloseDevice( DEV_T *dev )
    {
        if ( SelectBoard( dev ) >= 0)
        {
    		if( g_usageCount > 0 ) // maybe someone will call this function too often...
    			--g_usageCount;
    		if( g_usageCount == 0 ) // other devices might still need these memory
    			mvFreeCamTypeDefinitions();
            PCIDevice[g_SelDevNr].fkt.CloseDevice( PCIDevice[g_SelDevNr].PCIsxDev );
            PCIDevice[g_SelDevNr].PCIsxDev = NULL;
            CloseDriverDLL();
        }
    }
    //----------------------------------------------------------------------------------------
    

    Compiliren lässt sich alles Problemlos, die Probleme gehen halt beim linken los.

    Ich #include die Header in mein Projekt und rufe dort z. Bsp. die OpenDevice(...) auf.

    Jetzt bekomme ich den Linker Fehler, das er _OpenDevice aus der Procject.obj
    nicht finden kann - geht auch nicht, gibts ja gar nicht. Den eigentlich heist das ja OpenDevice nur Borland 4.0 hängt da vorne noch den _ ran. Das kann ich zwar in den Projecteinstellungen fürs ganze Project abschalten (habe ich vorhins rausgefunden) und dann Linkt er OpenDevice auch ordentlich aber ann meckert er als Ergebnis meine main an, weil die genau umgekehrt dann nur als main drin steht und er nach _main sucht.



  • Schau Dir mal auf meiner Seite die Beispiele zum dyn. Einbinden einer DLL an.



  • Kann es sein, dass der Link kaputt ist? Bei mir wird die Seite (www.fatman98.de.vu) nicht gefunden...



  • @alle

    Habe jetzt eine weitaus angenehmere und funktionierende Lösung für mein Problem gefunden.

    @F98
    Auf deiner Website war ich als aller erstes, da ich mich erinnerte das dort was über dll stand. Leider hats mir aber nicht geholfen, vielleicht bin ich in dem Bezug bissel schwer von Begriff.



  • Blackshadow schrieb:

    Kann es sein, dass der Link kaputt ist? Bei mir wird die Seite (www.fatman98.de.vu) nicht gefunden...

    Jupp, manches mal kackt der Redirektor ab (je nach Mondphase), ich habe jetzt mal meine Signatur etwas abgeändert.

    Bigwill schrieb:

    @alle
    Habe jetzt eine weitaus angenehmere und funktionierende Lösung für mein Problem gefunden.

    Können wir evtl. alle davon profitieren? 😉


Anmelden zum Antworten