002
05.04.2011, 15:52 Uhr
0xdeadbeef
Gott (Operator)
|
ActiveX hängt mit COM und OLE zusammen - eine Art windowsspezifisches CORBA. "Objekt" ist hier nicht im Sinne eines C++-Objektes zu verstehen, sondern als Objekt, das vom ORB gehalten wird und zu dem man ein Interface anfordert.
Ich hab ActiveX immer vermieden, aber ich meine, dass sich der COM-ORB um die DLL kümmert. Du wendest dich wie gehabt mit CoCreateInstance(Ex) an den COM-ORB, um ein Objekt zu erstellen und ein Interface darauf anzufordern. Also
C++: |
HRESULT hr; IDeinInterface *iface;
hr = CoCreateInstance(CLSID_DEINE_CLASS_ID, NULL, CLSCTX_INPROC_SERVER, IID_DEINE_INTERFACE_ID, static_cast<void**>(&iface));
if(SUCCEEDED(hr)) { // iface benutzen iface->Release(); }
|
Wichtig ist, dass die ActiveX-Dll richtig installiert ist, damit der COM-ORB sie findet. Insbesondere bedeutet das, dass die CLSIDs registriert sein müssen. Die Parameter zu CoCreateInstance solltest du in der MSDN nachschlagen; was für dich am sinnvollsten ist, kann ich aus der Entfernung nicht sagen.
Alles unter dem Vorbehalt: Ich bin wahrlich kein ActiveX-Meister. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |