Com-Klasse bzw. Objekt in dll



  • Hi Leute,

    ich hab mir ne ganz normale Extension-Dll geschreiben.
    Nun muss ich aber noch eine oder zwei Com-Klasse da mit rein packen, damit ich die dll gut auch in anderen Projekten nutzen kann. Will einen COM-Sever einbauen der mir über Connectionpoints dann die jeweiligen apps an meiner dll anmeldet. So was muss ich alles in meine Dll reinpacken um solche Klassen schreiben zu können? Hab mir mal ein ATL-Projekt mit de Wizard generiert. Hat auch gut geklappt. Aber das ist nun eine extra dll und ich will keine zweite, sondern alles in einer. Das ganze com-Zeug per Hand zu schreiben ist auch blöd. Also wie kannich das ganze nun anstellen.Am besten waäre natürlich das Ding vom Wizard zu kopieren aber ich glaube das geht nicht so einfach.

    Gruß,

    Stalin



  • Womit willst du das COM-Objekt den schreiben? ATL ( 😃 ) oder MFC ( 😞 )?

    "Im Prinzip" mußt dein DLL nur drei Funktionen implementieren:
    DllRegiserServer - CoClasses registrieren
    DllUnregisterServer - CoClasses deregistrieren
    GetClassObject - Class Factory zurückliefern

    Dann natürlich die Class Factory selbst, und die CoClasses....



  • peterchen schrieb:

    "Im Prinzip" mußt dein DLL nur drei Funktionen implementieren:

    4 Funktionen: Auf DllCanUnloadNow würde ich auf gar keinen Fall verzichten wollen, dann schon eher auf DllRegisterServer/ DllUnregisterServer.



  • ups vergessen 🤡

    Auf register/unregister und CanUnloadNow kann man problemlos verzichten, wenn man keine Instanzierung durch CoCreateInstance braucht, sodnern das DLL selbst fragt.

    Wahrscheinlich ist's das beste eine neues Projekt zu erstellen, und "beides" reinzumischen. Kommt aber drauf an was Stalin nun für die COM's verwenden will.



  • Hallo Leute,

    war im Urlaub und bin nun wieder da.
    Eigentlich ist es mir egal. hab bis jetzt halt immer ein ATL-Com Project gemacht zum testen. Also wäre mir das lieber. Nun erstellt mir der Wizard halt immer die ganzen dateien mit *.idl, *.rgs usw. Muss ich dass dann alles von Hand schreiben? Wie kann ich ein makefile schreiben um die bauen zu können so mit midl-compiler usw, da ich wenn es geht alles in der Konsole bauen möchte und auf das Studio verzichten möchte...
    Also habt ihr ne Idee?

    Gruß,

    Stalin



  • So hab jetzt was probiert und es compiliert immerhin. Aber jetzt bekomm ich immer diesen Linkfehler:

    mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 bereits in main.obj defin
    iert
    mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 bereits in main.obj def
    iniert; zweite Definition wird ignoriert
       Bibliothek C:\Ewl\dlib\WIN32\bphone.lib und Objekt C:\Ewl\dlib\WIN32\bphone.e
    

    Woran kann das liegen? ich alles eingebunden was ich brauch aber so einen Fehler hatte ich noch nie. Kann mir jemand helfen?? 😕 😕

    PS: main.obj ist von mir und dort liegt dllmain und das zeug für die Comklasse wie dllregisterserver usw. dllmodul.obj ist nicht von mir...

    Gruß,

    Stalin



  • Die DllMain ist in den MFC-Bibliotheken für MFFC-DLL#s bereits implementiert, du solltest als okeine zweite iMplementaiton anbieten.



  • Aber wieso denn nicht???
    Ich hab nur folgendes drin stehen:

    extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
    {
    	if(dwReason == DLL_PROCESS_ATTACH)
    	{
    		aBaseDLL.hInst = hInstance;
    		_Module.Init(ObjectMap, hInstance, &LIBID_COMSERVRLib);
    		DisableThreadLibraryCalls(hInstance);
    	}
    	return TRUE;
    }
    

    bevor ich das com-Zeug drin hatte hat es auch funktioniert...


Anmelden zum Antworten