Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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.

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

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?

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

Geschrieben

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

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

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

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

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