computercrustie Geschrieben 29. Oktober 2004 Geschrieben 29. Oktober 2004 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) Zitieren
Klotzkopp Geschrieben 29. Oktober 2004 Geschrieben 29. Oktober 2004 , 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. Zitieren
computercrustie Geschrieben 29. Oktober 2004 Autor Geschrieben 29. Oktober 2004 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). Zitieren
Empfohlene Beiträge
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.