Zum Inhalt springen

OLE-Automation - Klassendefinition einer "coclass"


Empfohlene Beiträge

Hallo !

Ich arbeite momentan an einer Schnittstelle (via OLE) zu MS Project 2002 und bin auf folgendes Problem gestossen:

Ich habe aus der .olb von MS-Project mit VC++ 7 Klassen generieren lassen, mit denen ich Project steuern möchte. Das starten und erzeugen eines neuen Files klappt wunderbar, nur bekomme beim Aufrufen der get_Project() Methode nicht das (von mir) erwartete Klassenobjekt zurück. Und zwar benötige erst einmal das Klassengerüst einer Klasse, die in der odl wie folgt definiert ist:


[

  uuid(1019A320-508A-11CF-A49D-00AA00574C74),

  helpcontext(0x000200a9)

]

coclass Project {

    [default] dispinterface _IProjectDoc;

    [default, source] dispinterface _EProjectDoc;

};

Die beiden Klassen _IProjectDoc und _EProjectDoc kann ich mit dem Klassenassistent erzeugen lassen, aber ich benötige die Klasse "Project", da diese wie oben erwähnt von der Methode get_Project() der Application zurückgegeben wird. Nun meine Frage: wie kann ich deren Klassendefinition erzeugen (sie wird nicht im Assistenten angezeigt) ? Die Application-Klasse ist in der .olb ähnlich definiert:

[

  uuid(36D27C48-A1E8-11D3-BA55-00C04F72F325),

  helpcontext(0x0002008e)

]

coclass Application {

    [default] dispinterface _MSProject;

    [source] dispinterface _EProjectApp;

    [default, source] dispinterface _EProjectApp2;

};

Hier habe ich einfach die generierte Klasse _MSProject in "Application" umbenannt und es funktioniert (zumindest kann ich MS Project starten und File öffnen etc.) nur eben hilft das Umbenennen der Klasse aus Abs. 1 von "_IProjectDoc" in "Project" nichts (es lässt sich zwar kompilieren, aber zur Laufzeit bekomme ich Ausnahmefehler beim OleDispatcher).

Weiss jemand von euch weiter ?

PS: im Internet finde ich nichts zu diesem Problem (oder mir fehlen die richtigen Suchbegriffe)

Link zu diesem Kommentar
Auf anderen Seiten teilen

, nur bekomme beim Aufrufen der get_Project() Methode nicht das (von mir) erwartete Klassenobjekt zurück.
Sondern? Zeig bitte mal den Aufruf.

Die beiden Klassen _IProjectDoc und _EProjectDoc kann ich mit dem Klassenassistent erzeugen lassen, aber ich benötige die Klasse "Project", da diese wie oben erwähnt von der Methode get_Project() der Application zurückgegeben wird.
Wie kommst du darauf? get_Project sollte eigentlich nur ein LPDISPATCH zurückgeben.

Die generierten Klassen sind von COleDispatchDriver abgeleitet, und damit Wrapper um Interfaces, nicht um CoClasses. Es gibt keinen Grund, da irgendetwas umzubenennen.

Den Rückgabewert von get_Project solltest du an eine Instanz der Wrapperklasse von _IProjectDoc oder _EProjectDoc binden können, je nachdem, welches Interface du brauchst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem habe ich soeben gelöst, indem ich die Wrapper-Klassen mit dem Klassenassistent von VC++6 (anstatt dem von VC++7) erstellt habe, dann da bekomme ich wie du bereits gesagt hast, einen LPDISPATCH Zeiger zurück und kann damit jetzt auf die Projekt-Struktur zurückgreifen.

Aber jetzt habe ich das nächste Problem: Was muss ich implementieren, um die Events von MS-Project abzufangen ? Ich habe mich durch die MSDN gehangelt und versucht, die Beispiele die es dazu für Excel und Word gibt für MS-Project umzusetzen, allerdings scheitert es dort an der Eintragung meines Event-Objekts am Connection Point (Result(HRESULT) ist ungleich Null).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...