I
Hier hab ich gelesen, dass ActiveX-DLLs die Funktionen DllRegisterServer und DllUnregisterServer bereit stellen müssen, um in der Registry eingetragen werden zu können.
Tatsächlich erfolgt eine solche Aktion nämlich nicht durch Hilfsprogramme wie regsvr32.exe, sondern durch die Komponenten selbst. Dafür stellen sie – wie API-Funktionen aus anderen DLLs – jeweils die Funktionen "DllRegisterServer" und "DllUnregisterServer" zur Verfügung, die sich um die notwendigen Eintragungen in der Registry kümmern und lediglich "von außen angestoßen" werden müssen.
Meine ActiveX-DLL beinhaltet keine dieser Funktionen, das COM Control erbt von folgenden Klassen, die ebenfalls keine der beiden Funktionen bereit stellen.
class CRTSClientObj :
public CComControl<CRTSClientObj>,
public IRTSClientObj,
public IPersistStreamInitImpl<CRTSClientObj>,
public IPersistStorageImpl<CRTSClientObj>,
public IOleControlImpl<CRTSClientObj>,
public IOleObjectImpl<CRTSClientObj>,
public IOleInPlaceActiveObjectImpl<CRTSClientObj>,
public IOleInPlaceObjectWindowlessImpl<CRTSClientObj>,
public IViewObjectExImpl<CRTSClientObj>,
public IObjectSafetyImpl<CRTSClientObj, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
Das Registrieren per regsvr32 funktioniert aber trotzdem. Wie ist das möglich?