COM-Server einbinden
-
Hallo,
ich hab immer noch Probleme mit dem einbinden eines COM-Servers in ein VisualC++ Projekt.
Der Server besteht aus einer DLL. Der Server stellt verschiedene Funktionen zur Verfügung.
Der Server kann Ereignisse (Events) erzeugen.Ich hab insofern bisher erfolg gehabt, als dass ich die Funktionen des Dervers nutzen kann. Das Vorgehen war hierbei wie folgt:
Erzeugen einer .idl-Datei aus Dem OLE/COM Viewer in Visual C++. Diese Datei habe ich meinem Projekt hinzugefügt und compiliert und hierbei eine .h und eine .c-Datei erstellt. Diese habe ich ebebfalls ins Projekt eingebunden.
In meiner Applikation habe ich den Code
//************************************************
CLSID clsid;
CLSIDFromProgID(OLESTR("OGP.DataInterface"),&clsid);
HRESULT hr;
IUnknown* pISL;
IDataInterface * pDataInterface;
IDataInterfaceEvents * pDataInterfaceEvents;
hr=CoCreateInstance(
clsid,
NULL,
CLSCTX_INPROC_SERVER,
IID_IUnknown,
(void**) &pISL);if (SUCCEEDED(hr))
{
BOOL boStop=TRUE;
pISL->QueryInterface(DIID_IDataInterfaceEvents,(void**)& pDataInterfaceEvents);
pISL->QueryInterface(IID_IDataInterface,(void**)& pDataInterface);pDataInterface->MakeConnect(0);
TErrCode Error;
pDataInterface->Request(OLESTR("Test"),&Error);
}
//*************************************************
in InitInstance() eingefügt.Das erzeugen des Zeigers IDataInterface klappt und ich kann die Funktionen des COM-Servers nutzen (MakeConnect(), Request).
Allerdings habe ich es bisher immer noch nicht geschafft die Events des Servers abzufangen.
Im entsprechenden Codeabschnitt der Headerdatei sind die Eventfunktionen auch nicht aufgeführt.Ich habe schon experimentiert mit BEGIN_SINK_MAP() usw. hatte aber keinen Erfolg.
Als zweiten Weg habe ich auch versucht den COM-Server über den Klassenassistenten einzubinden. Hierzu habe ich eine Klasse hinzugefügt aus einer Typbibliothek. Hierduch wurden 2 Klassen in meinem Projekt erzeugt
IDataInterface mit den entsprechenden Funktionen und
IDataInterfaceEvents allerdings ohne Funktionen
Im Header gab es Einträge, die sich auf die Eventfunktionen beziehen:
// Methode 'OnConnect' wird wegen eines ungültigen Rückgabetyps oder Parametertyps nicht verwendetMach ich da noch was falsch, oder ist evtl mit dem COM-Server irgend was faul?
Danke für die Hilfe
Stefan
-
Du musst Dir eine Klasse anlegen, die aussieht wie IDataInterfaceEvents, sozusagen die Funktionen überschreibt.
Danach legst Du eine Instanz dieser Event-Klasse an. Wenn Du mit ATL arbeitest, nimm AtlAdvise, ansonsten AfxConnectionAdvise, um die Eventklasse mit dem Server zu verbinden
-
+ (in MSDN nachgeschaut)
In MFC gibts dafür COleDispatchDriver
In ATL ist es IDispEventImpl
-