Veröffentlicht 9. Oktober 200717 j 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
9. Oktober 200717 j Könntest du dein Anliegen etwas genauer beschreiben? Das hier: ein Objekt auf ein Programm erstellen finde ich doch etwas schwammig formuliert.
9. Oktober 200717 j Autor 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
9. Oktober 200717 j Autor 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.
9. Oktober 200717 j 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.
10. Oktober 200717 j Autor 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?
11. Oktober 200717 j 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?
11. Oktober 200717 j Autor 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
11. Oktober 200717 j 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?
11. Oktober 200717 j Autor 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
11. Oktober 200717 j 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.
11. Oktober 200717 j Autor 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?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.