Funktion aus dll meldet Access violation nur im Release



  • Hallo,

    ich habe nicht so die Praxis mit LoadLibrary und co und hoffe, dass mir jemand weiterhelfen kann mit ein paar Tipps oder Ideen.

    Ich lade eine DLL und rufe darin eine Funktion auf. Die DLL ist installiert und wird anscheinend auch korreckt geladen.

    Im Debugmode läuft alles einwandfrei. Nur im Releasemode kommt Application error. The memory could not be read.

    Die exe habe ich im Releasemode debugged (danke an http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.html) und festgestellt, dass es in der Funktion der DLL kracht.

    Irgendwie steh ich jetzt auf dem Schlauch und weiss nicht, wie ich weitermachen soll. 😞



  • Hast du einen Zeiger vergessen, zu initialisieren? (Siehe der Artikel bei Codeproject, auf den ich verwiesen habe.)

    Sieht im Debugger etwas unterschiedlich aus?

    Ist es der selbe PC, wo das Problem auftritt?

    Ist die Dll von dir?

    🙂



  • Fehlt vielleicht AFX_MANAGE_STATE ?
    Oder wenn Ressourcen in der DLL sind, vielleicht CExtDllState ?



  • Hab mir jetzt Surviving for Release auf codeproject mal angesehen und besonders aufgefallen ist mir das Kapitel:

    Linkage Errors
    Linkage Types

    UINT (AFX_CDECL * AFX_THREADPROC)(LPVOID);
    UINT CALLBACK MyThreadFunc(LPVOID value)
    AfxBeginThread((AFX_THREAD_PROC)MyThreadFunc, this);
    AfxBeginThread(MyThreadFunc, (LPVOID)this);
    

    Nur leider hab ich bei diesen Macros gar keinen Plan.

    Hier mal ein Auszug von meinen Code:

    HINSTANCE hfTool;
     fpMyFunction  fpFunc;
      hfTool = loadStep7Dll ("MyDLL.DLL");
    
      fpFunc = (fpMyFunction) GetProcAddress (hfTool,"MyTestFunktion");
      fpFunc (para1, para2);   
    
      FreeLibrary (hfTool);
    

    Ich weiss nicht, was ich da noch initialisieren müsste, oder welche Macros ich zum Typecast der Funktion brauchen könnte.

    Und, natürlich führ ich Debug und Release auf dem gleichen PC aus. 🙂
    Die DLL's sind nicht von mir, werden aber an anderer Stelle (eigentlich) fehlerfrei benutzt.

    Gruß


Anmelden zum Antworten