Patrick.Karre Geschrieben 9. Oktober 2007 Geschrieben 9. Oktober 2007 Hallo Forum, ich möchte, ähnlich wie in VB, ein Objekt auf ein Programm erstellen und das Objekt verwenden. Leider weiß ich nicht genau, wie ich dies anstelle. Hat jemand von euch ein gutes Beispiel für mich? Mit besten Grüßen aus Erlensee Patrick Zitieren
Klotzkopp Geschrieben 9. Oktober 2007 Geschrieben 9. Oktober 2007 Könntest du dein Anliegen etwas genauer beschreiben? Das hier: ein Objekt auf ein Programm erstellen finde ich doch etwas schwammig formuliert. Zitieren
Patrick.Karre Geschrieben 9. Oktober 2007 Autor Geschrieben 9. Oktober 2007 Ja stimmt, sorry. Ich möchte mir eine Instace von einem Programm wie z.B. MS-Word oder MS-Outlook oder einen Drittanbieter besorgen. unter VB war das ganz einfach: Dim objApp Set objApp = CreateObject("APPLICATIONSNAME") objApp.Open objApp.Quit Das gleiche möchte ich in C++ machen, bisher habe ich es schon mit CoCreateInstace versucht, verstehe aber noch nicht ganz, wie ich es für die einzelnen Funktionen verwenden muss. Beste Grüße Patrick Zitieren
Klotzkopp Geschrieben 9. Oktober 2007 Geschrieben 9. Oktober 2007 Schau mal hier rein: Using Visual C++ to automate Office Zitieren
Patrick.Karre Geschrieben 9. Oktober 2007 Autor Geschrieben 9. Oktober 2007 Gut, Office war kein gutes Beispiel ;-) Ich weiß das es für Office fertige Lösungen gibt. Ich möchte allerdings ein Programm von einem Drittanbieter wie z.B. Acrobat oder AdressPlus verwenden. Auf diese Pogramme kann ich auch ein Objekt erstellen und das würde ich gerne machen. Zitieren
Klotzkopp Geschrieben 9. Oktober 2007 Geschrieben 9. Oktober 2007 Ich weiß das es für Office fertige Lösungen gibt. Ich möchte allerdings ein Programm von einem Drittanbieter wie z.B. Acrobat oder AdressPlus verwenden. Auf diese Pogramme kann ich auch ein Objekt erstellen und das würde ich gerne machen.Das ist keine "fertige Lösung", und auch nicht Office-spezifisch. Die beschriebene Vorgehensweise kannst du auf jedes Programm anwenden, das eine Automatisierungsschnittstelle anbietet. Zitieren
Patrick.Karre Geschrieben 10. Oktober 2007 Autor Geschrieben 10. Oktober 2007 Hmmm, okay. Wenn ich CoCreateInstance verwende bekomme ich zwar ein neues Objekt aber wenn ich GetActiveObject verwende, bekomme ich immer die Meldung VORGANG NICHT VERFÜGBAR. Weiterhin würde ich gerne eine Liste der Funktionen aus dem Objekt bekommen. In VB geht das ja ganz gut. Hast Du vielleicht ein Beispiel für mich? Zitieren
Klotzkopp Geschrieben 11. Oktober 2007 Geschrieben 11. Oktober 2007 Weiterhin würde ich gerne eine Liste der Funktionen aus dem Objekt bekommen.Öffne die .OLB/.TLB mit Visual Studio. Das sollte den Objekt Browser anwerfen. Hast Du vielleicht ein Beispiel für mich?Du möchtest ein Beispiel für die Benutzung der Automatisierungsschnittstelle eines Programms, sagst aber nicht, welches es ist? Das könnte schwierig werden. Wie bist du denn nun vorgegangen? Hast du eine import-Direktive benutzt, oder hast du den Klassenassistenten Wrapper erstellen lassen? Zitieren
Patrick.Karre Geschrieben 11. Oktober 2007 Autor Geschrieben 11. Oktober 2007 Hallo Klotzkopp, genau das ist das Problem. Es handelt sich um eine EXE-Datei. Das komplette Automationsmodell was ich brauche, ist dort drinnen. Bisher habe ich mehrere Wege versucht, hier ist mein letzter Versuch: CoInitialize(NULL); HRESULT hr; IUnknown* pIUVIPSQL; IDispatch* pIDVIPSQL; CLSID clsidAGVIPSQLApplication; if (SUCCEEDED(::CLSIDFromProgID(L"AGVIP.SQL.Application.1", &clsidAGVIPSQLApplication))) { // Objekt von AG-VIP SQL besorgen // Komplett neue Instant öffnen, darf aber nicht sein, dass Programm ist bereits offen! hr = ::CoCreateInstance(clsidAGVIPSQLApplication, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&pIDVIPSQL); // Hier kommt immer, VORGANG NICHT VERFÜGBAR (AUCH WENN DAS PROGRAMM BEREITS OFFEN IST) // Wenn eine Instance neu erzeugt worden ist, klappt allerdings der Aufruf hr = ::GetActiveObject(clsidAGVIPSQLApplication, NULL, &pIUVIPSQL); // Aktionen durchführen // ... } // COM deinitialisieren CoUninitialize(); Auf Irgendeinem Grund hatte er mit bei Application appTEST; appTEST->FUNKTIONEN die Funktionen von dem Programm mit appTest angezeigt, allerdings hatte ich einen Compilerfehler bekommen, dass Application unbekannt ist. Beste Grüße Patrick Zitieren
Klotzkopp Geschrieben 11. Oktober 2007 Geschrieben 11. Oktober 2007 genau das ist das Problem. Es handelt sich um eine EXE-Datei.Du kannst auch eine .EXE-Datei mit dem Object Browser öffnen. Bisher habe ich mehrere Wege versucht, hier ist mein letzter Versuch:COM-Automation von Hand? Warum gerade der schwierigste Weg? Warum nicht mit #import? Zitieren
Patrick.Karre Geschrieben 11. Oktober 2007 Autor Geschrieben 11. Oktober 2007 Hallo Klotzkopp, das Problem ist, das Programm liegt nicht auf jedem Rechner im gleichen Verzeichnis. Daher kann ich #import nicht verwenden. Wie müsste ich alternativ vorgehen? Ich muss leider sagen, dass ich in C++ noch nie ein Objekt auf ein anderes Programm erstellt habe, daher auch die Fragen. Beste Grüße Patrick Zitieren
Klotzkopp Geschrieben 11. Oktober 2007 Geschrieben 11. Oktober 2007 das Problem ist, das Programm liegt nicht auf jedem Rechner im gleichen Verzeichnis. Daher kann ich #import nicht verwenden.Das eine hat mit dem anderen nichts zu tun. Die Importdirektive wirkt sich zur Compilezeit aus, nicht zur Laufzeit. Wie müsste ich alternativ vorgehen? Ich muss leider sagen, dass ich in C++ noch nie ein Objekt auf ein anderes Programm erstellt habe, daher auch die Fragen.:confused: Das steht doch auf der MSDN-Seite, auf die ich dich hingewiesen habe. Zitieren
Patrick.Karre Geschrieben 11. Oktober 2007 Autor Geschrieben 11. Oktober 2007 Okay, das sich der Import nur zur Compilerzeit auswirkt wusste ich nicht. Wenn ich den #import verwende, wie kann ich dann auf die Objekte zugreifen und mir das bestehende Objekt holen? 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.