Dynamisches Listenobjekt



  • Hm. Ich schreibe eine Standard-DLL in der ich nun CList verwenden will, allerdings habe ich ein Problem beim Einbinden von "afxtempl.h" die ich in die "StdAfx.h" mit einbinde. Ich erhalte dann immer einen Fehler:

    WINDOWS.H already included. MFC apps must not #include <windows.h>

    Kommentiere ich in der StdAfx.h die windows.h aus, erhalte ich einen neuen Fehler:

    HKDLL error LNK2005: _DllMain@12 bereits in HKDLL.obj definiert

    Ich habe schon alle Obj usw. im Debug-Verzeichnis gelöscht und neu erstellen lassen, ohne Ergebnis.

    Wo ist der Fehler?



  • Lass einfach das "#include <windows.h>" weg und schon sind alle Probleme gelöst 😉



  • Hab ich ja gemacht, das führt ja leider zu Fehler Nummer 2 (s.o.)



  • MFC-Apps dürfen keine DllMain haben (bzw. die MFC stellt eine zur Verfügung)!
    Wenn Du was initialiseren willst, dann mach das in CWinApp::InitInstance

    PS: Siehe: http://msdn.microsoft.com/library/en-us/vclib/html/_mfcnotes_tn011.asp



  • Ich schreibe doch nur eine DLL, keine Applikation. Die Switches und Makros, die auf der Seite beschrieben sind, werden schon standardmäßig erzeugt, dass sollte also meiner Meinung nach nicht das Problem sein.



  • Ersetze einfach "MFC-Apps" durch "DLLs, welche MFC verwenden"



  • Ok, hab die DLLMain auskommenmtiert. Mein Problem ist nun, dass ich eigentlich in der DLLMain ein Objekt erzeugen, bzw. zerstören wollte:

    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    			case DLL_PROCESS_ATTACH: { Access = new CAccess(); break; }
    			case DLL_PROCESS_DETACH: { if (Access) delete Access; break; }
                      case DLL_THREAD_ATTACH:
    			case DLL_THREAD_DETACH: break;
    	}
    
        return true;
    }
    

    Das ist ja durch das Auskommentieren nicht mehr möglich. Kann ich die DLL-Main-Funktion von der MFC jetzt irgendwie überschreiben?



  • ????? Hast Du meinen Beitrag nicht gelesen ?????
    Mach es bitte in CWinApp:InitInstance

    (oder schmeiss die MFC raus)



  • Bitte nicht schlagen, ich hantiere erst seit ca. 2 Wochen mit VS. Beim BCB mußte ich nie solche Kopfstände machen.

    Deinen Beitrag habe ich schon gelesen, die MFC-Klasse benötige ich, leider weiß ich nicht wo und wie ich an "CWinApp:InitInstance" herumdoktern soll.



  • Wenn Du eine DLL erzeugst hast, welche mit die MFC verwendest, hättest Du normalerweise den Wizard nehmen können (File|New|Project|C++\MFC DLL).. .dann wird eine Datei erzeugt (Projektname.cpp) welche ganz unten eine Funktion enthält die wie folgt aussieht:

    BOOL CMFC_DLLApp::InitInstance()
    {
      CWinApp::InitInstance();
      // Hier die eigene Initialization machen...
      return TRUE;
    }
    


  • Ok, ich habe jezt ein neues Projekt auf MFC-Basis erzeugt. InitInstance ist unten im Quellcode vorhanden. Gibt es auch eine Möglichkeit auf das Entladen der DLL zu reagieren wie in der DLLMain?



  • ExitInstance? 🙂 :xmas1:



  • Einfach reinschreiben, und loslegen? 😮

    Ok, bevor ich hier noch mehr dumme Fragen zum Thema DLL-Alarm stelle, wo gibts brauchbare Tipps/Tuts für bloody MFC-Anfänger wie mich, die insbesondere das Thema Dialoge in DLLs abhandeln?


Anmelden zum Antworten