Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • 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

  • 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.

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.
  • 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?

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?

  • 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

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?
  • 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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.