Registration-free COM
-
Einen schönen guten Tag
VS2017 C++
ich möchte eine activeX "ax.dll" an meine "projekt.dll" registrieren.
Dazu habe ich die die "ax.tlb" und "ax.dll" für meine "projekt.dll" unter Projekteigenschaften Manifesttool/isolated COM eingetragen. Kompilieren/Linken ist OK, aber zur Laufzeit funktioniert die Bindung nicht.Meine Frage, funktioniert mein Vorhaben überhaupt so ? Was ich bisher im I-Net rausfand, das wäre grob umschrieben, ein Manifest bindet sich nur automatisch an eine Projekt.EXE, nicht aber an eine Projekt.DLL.
Für einen Tip wäre ich dankbar
-Uwe
-
Das funktioniert IMHO nur mit dem Prozess... also der EXE
-
Hallo Martin,
schade. Ich habe leider keine Lufthoheit über die EXE. Ich danke Dir für Deine Auskunft!
Viele Grüße
-Uwe
-
Falls du in der DLL eine Funktion hast die aufgerufen wird bevor das ActiveX Control erzeugt wird, dann ist es soweit ich weiss möglich die ActiveX DLL an dieser Stelle (temporär, für deinen Prozess) zu registrieren. Zumindest würde ich in dieser Richtung mal googeln. (Ich hab leider keinen Code dazu, aber ich denke es muss möglich sein und schätze dass dazu auch keine hunderten Zeilen Code nötig sind.)
ps: Sowas meine ich: https://stackoverflow.com/questions/45355499/how-to-register-a-com-class-in-memory
-
Mal was ganz anderes...
Du brauchst technisch evtl. die DLL gar nicht registrieren...
Wenn Du selber die DLL lädst und wenn Du selber dann DllGetClassObject aufrufst, dann hast Du eine Factory...
Mit der Factory kannst Du entsprechende Objekte nun selber erzeugen.Ich nutze den Trick auch erfolgreich. Ich benötige in dem Fall oft gar keine Registrierung und auch keine Typelib-Registrierung.
Hier kann man selbst by ATL Projekten (die eine Typelib benötigen) auch tricksen.https://stackoverflow.com/questions/11088227/use-com-object-from-dll-without-register
-
Hallo hustbaer und Martin,
was es so alles gibt. Dann werde ich mich durch eure Tipps arbeiten, ist Neuland für mich. Vielen Dank hierfür!
Gibt es noch etwas zu beachten ? denn es soll u.a. auf Terminal Server laufen, wobei hier in einer Benutzersitzung das Programm mehrere Instanzen, bzw. ein Anwender shared Sitzungen (Mehrfachanmeldung mit selben LogonUserName) auf dem Terminal Server haben kann. Die zuletzt genannte Sitzungen möchte ich zukünftig unterbinden, ist aber aus der Historie (WinNT4/Win2000) noch vorhanden.
Ein frohes Osterfest
-Uwe
-
Bitte
Terminal Server sollte denke ich keinen Unterschied machen. Es wird ja nichts in der Registry permanent registriert, sondern nur für den gerade laufenden Prozess im Speicher bekannt gemacht sozusagen. Und bei der Variante von Martin wird sowieso überhaupt gar nichts irgendwo registriert, sondern einfach direkt über die Class-Factory aus der DLL ein Objekt erzeugt.