ActiveX Controls mit WINAPI entwerfen/laden
-
Hallo!
Ist es möglich, mit WINAPI ActiveX Controls zu entwerfen, oder ist man auf die MFC hierbei angewiesen? Bei neuen Projekten, kann man hier ja leicht ein Projekt dazu erstellen.
WINAPI Controls zu laden, wird sicherlich mit der WINAPI funktionieren, aber wie? Gibt es dazu gute Seiten?Danke,
Gruß,
Kevin
-
Prinzipiell geht das.
Für simple ActiveX-Controls (grob: alles ohne UI) ist das auch nicht schwierig:
CoInitializeEx(COINIT_APARTMENTTHREADED, 0); // oder wie du dein threading jhalt haben willst IMyInterface * pItf = NULL; HRESULT hr = CoCreateInstance(&coClassID, NULL, CLSCTX_ALL, &interfaceID, (void **)&pItf); // coClassID: Class ID der Componente // interfaceID: IID des Interfaces das du willst // CLSCTX_ALL: dir ist es egal wo der COM server läuft if (!FAILED(hr)) { ... // mach mit deinem pItf was du willst.. pItf->Release(); }Dazu allerdings zwei Kommentare:
- Smart Pointer: Wenn du nicht tagelang nach vergessenen Releases jagen willst, nimm wenigstens smart pointer für die Interface-zeiger. _com_ptr_t ist mein Favorit. Guck dir auch die möglichkeiten von #import an - das kann aus einer typelib "sinnvolle" wrapperklassen generieren, die viel bequemer zu nutzen sind als die raw interfaces.
Wenn du "richtige" ActiveX-Controls (also mit Nutzerinterface und allem Schnickschnack) willst, geht das natürlich auch. Dazu mußt du aber eine Menge Client-Interfaces implementieren, und das macht generell keinen Spaß, insbesondere wenn du verschiedenste (unbekannte) Controls unterstützen willst.
Für COM-Komponenten gibt es aber noch die ATL (am besten zusammen mit der "halboffiziellen" WTL). Die ATL ist zwar primär für die Entwicklung von (leichtgewichtigen) COM-Komponenten gedacht, bringt aber auch ganz guten Integrationscode mit. Nur vor Templates darfst du dich nicht scheuen.
View Spaß...

-
OK, überzeugt, ich nehm die MFC

Aber wie geht das mit dem Laden?
-
Laden von was?
WINAPI controls kannst du auch in einer MFC-Anwendung verwenden, die MFC Klassen sind ja nur wrapper um die API-Controls.
-
Ich würde ATL nehmen
-
@profi2: Ich auch, aber nur weil ich beides kenne

-
ich meine, wie man mit der WINAPI ein ActiveX Control lädt und einbindet.
-
Weiß niemand, wie man mit der WINAPI ActiveX Controls lädt und anzeigt?
Wenn man mit der WINAPI ActiveX Controls erstellt, wie soll das gehen? Was muss man bei Datei->Neu->Projekte auswählen? Da gibts ja nicht leeres ActiveX Control
-
Ich würd's schon hinkriegen - aber dazu müßte ich ein kleineres Buch schreiben.
a) Warum muß es WInAPI sein?
b) Fang doch mal an in der MSDN zu stöbern, welche Interfaces es diesbezüglich gibt, welche das Control und welche der Cient implementieren muß usw. Es gibt dutzende solcher Schnittstellen, je nach gewünschter Funktionalität.