kleines prob mit dll



  • hi leute,
    ich hab nach ner längeren Zeit nochmal angefangen zu programmieren und festgestellt, dass ich noch nichtmal mehr eine DLL geladen bekomm...:(

    hoffe mir kann einer helfen hiermal mein Werk:

    DLL

    #include "stdafx.h"
    #include "windows.h"
    #include "dll.h"
    
    #ifdef _MANAGED
    #pragma managed(push, off)
    #endif
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
        return TRUE;
    }
    
    EXPORT bool MSGBOX()
    {
    	MessageBox(NULL, L"Nachricht aus der DLL !", L" DLL ", NULL);
    	return true;
    

    Dll.h

    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec (dllexport)
    #else
    #define EXPORT __declspec (dllexport)
    #endif
    
    EXPORT bool MSGBOX();
    

    programm:

    #pragma comment("lib","dll.lib")
    #include "stdafx.h"
    #include "windows.h"
    #include "dll.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	MSGBOX();
    	return 0;
    }
    

    die Fehlermeldung:
    prog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_MSGBOX" in Funktion "_wmain".
    C:\Dokumente und Einstellungen\as\Eigene Dateien\Visual Studio 2005\Projects\DLL-Test\prog\Debug\prog.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    ich hoffe mal jmd kann mir helfen 🙂
    mfG noha

    PS:
    ich hoffe es macht keinen Unterschied ob ich eine Konsolenanwendungs oder eine Windowsanwendungs - Projekt erstelle.



  • Beim Programm, welches die DLL laden soll, musst du bei der deklaration der Funktion __declspec(dllimport) verwenden, nicht export.



  • das scheint nix zu ändern

    wieder ähnliche Fehlermeldung:

    prog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) bool __cdecl MSGBOX(void)" (__imp_?MSGBOX@@YA_NXZ)" in Funktion "_wmain".
    C:\Dokumente und Einstellungen\as\Eigene Dateien\Visual Studio 2005\Projects\DLL-Test\prog\Debug\prog.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


  • Mod

    In dem Modul in dem Du die DLL benutzen willsst musst Du

    __declspec( dllimport )
    

    verwenden! Und nicht nochmal die Funktion als extportiert angeben.



  • in dem prog dass die DLL benutzen soll, habe ich die Funktion folgendermaßen bekannt gemacht:

    __declspec (dllimport) bool MSGBOX();
    

    wenn das so richtig ist, liegt der fehler da nicht



  • Hast du auch die zur DLL passende Lib eingebunden?



  • noha_391 schrieb:

    in dem prog dass die DLL benutzen soll, habe ich die Funktion folgendermaßen bekannt gemacht:

    __declspec (dllimport) bool MSGBOX();
    

    Da fehlt dann aber noch ein "extern "C"".



  • ist es auch nicht, bekomm trotzdem die Fehlermeldung:

    prog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__MSGBOX" in Funktion "_wmain".
    C:\Dokumente und Einstellungen\as\Eigene Dateien\Visual Studio 2005\Projects\DLL-Test\prog\Debug\prog.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


  • Mod

    Dann Lege mal dieses Mini-Projekt irgendwo ab, damit man sich das mal ansehen kann.

    Schau mal mit DEPENDS.EXE in die DLL hinein damit Du siehst welche Signatur die Funktion hat.



  • werde es morgen mal zum angucken bereitstellen....

    was ist DEPENDS ?


  • Mod

    Ein Tool mit dem man die Entry-Points von DLLs ansehen, kann, bzw. welche externen DLLs von einem Moudl verwendet werden.

    Gehört als Tool zum Visual Studio! Oder auch hier: http://dependencywalker.com/



  • hier das projekt:

    http://rapidshare.com/files/131114709/prog.rar.html
    http://rapidshare.com/files/131114710/Dll.rar.html

    depends sagt erkennt schonaml die funktion die sich dort befindet
    aber ich bekomm 2 Warnungen vom Programm ( mein englisch ist nicht so gut aber ich glaube mal, dass das nix mit meinem Problem zu tun hat)

    Warning: At least one delay-load dependency module was not found.
    Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.


  • Mod

    Argh...

    Ist Dir eigentlich nicht klar, dass Du auch die DLL.LIB irgendwo in dem PROG-Projekt hinterlegen musst. Wie soll den PROG.SLN wissen wo die DLL.LIB liegt.

    Du hast nur angegeben suche sie dort....

    Am einfachsten geht, dass indem Du in der Proj-Solution die DLL:vcproj einfügst und eine Abhängigkeit zwischen Prog und Dll herstellst.



  • ich habe die lib in das Verzeichnis Dll und debug gepackt, so dass beim kompilieren darauf zugegriffen werden kann...

    ( sonst bekäm ich doch die Meldung dass die Datei nicht gefunden werden konnte... )


  • Mod

    Ich habe einfach nur das DLL Projekt eingefügt und das wars...



  • was hast du denn genau gemacht ? bzw wie hast du es gemacht ?


  • Mod

    Habe ich doch geschrieben: In die Solution der EXE habe ich das DLL Projekt eingefügtund die Projekt Abhängigkeiten gesetzt.



  • Wenn die DLL nicht im selben Verzeichnis wie das Programm liegt, musst du dem Linker das Verzeichnis hinzufügen, bei Code::Blocks heißt der Tab Search directories.



  • aber die dll liegt doch im gleichen Verzeichnis wie das Programm, und auch die lib, da ich diese dorthin kopiert habe...


Anmelden zum Antworten