Binary Behavior / COM / ATL
-
Hallo C++ Gemeinde,
ich habe zu Binary Behavior / COM / ATL eine Frage (vermutlich sogar mehrere).
Unter http://msdn.microsoft.com/workshop/browser/behaviors/howto/creating.asp gibt es ein Beispiel für die Erstellung von Binary Behaviors (als Ersatz beispielsweise für HTC).
Dieses Beispiel um neue Methoden und Dispatch-Ids zu erweitern, wodurch diese dann aufgerufen werden ist auch kein Problem.
Nun möchte ich aber folgende Funktionalität:
Das Objekt soll eine Methode getObject haben, welches ein weiteres Objekt an den IE liefert und über welches auf dessen Methoden zugegriffen werden können. Dies würde ja bedeuten, dass die Dispatch-Ids auch in diesem neuen Objekt abgefragt werden müssen. Wie genau muss ich hier vorgehen?
Ein JavaScript-Aufruf würde dann in etwa wie folgt aussehen:
function Test (obj)
{
obj.GetObject().DoIt();
}Kann mir hierbei jemand Tipps geben?
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das Objekt soll eine Methode getObject haben, welches ein weiteres Objekt an den IE liefert und über welches auf dessen Methoden zugegriffen werden können. Dies würde ja bedeuten, dass die Dispatch-Ids auch in diesem neuen Objekt abgefragt werden müssen.
Ja
Wie genau muss ich hier vorgehen?
Dein neues Objekt einfach auch von IDispach ableiten

-
Danke, hab ich gemacht und auch die Methoden QueryInterface, AddRef und Release implementiert. Sieht nun so aus:
HRESULT Test::QueryInterface(REFIID iid, void **ppvObj) { if (iid == IID_IUnknown) { *ppvObj = this; AddRef(); return S_OK; } return E_NOINTERFACE; } ULONG Test::AddRef() { return ++m_cRef; } ULONG Test::Release() { if (--m_cRef == 0) { delete this; return 0; } return m_cRef; }Jedoch kann ich die Klasse immer noch nicht instanzieren, da der Debugger der Meinung ist, dass es sich um eine abstrakte Klasse handelt.
Die Ausgabe sieht wie folgt aus:
'HRESULT Test::QueryInterface(const IID &,void ** ) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::QueryInterface'
'ULONG Test::AddRef(void) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::AddRef'
'ULONG Test::Release(void) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::Release'
'HRESULT Test::QueryInterface(const IID &,void ** ) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::QueryInterface'
'ULONG Test::AddRef(void) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::AddRef'
'ULONG Test::Release(void) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::Release'
'HRESULT Test::QueryInterface(const IID &,void ** ) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::QueryInterface'
'ULONG Test::AddRef(void) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::AddRef'
'ULONG Test::Release(void) throw()' : pure virtual function was not defined
Test.h(50) : see declaration of 'Test::Release'Sollte doch eigentlich alles da sein, oder was genau könnte ich falsch machen?
-
Entwarnung. Ich konnte das Problem mittlerweile lösen.
Danke.