Zum Inhalt springen

Frage zu der Funktion "CreateObjekt" in VB6


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe mal eine Frage zu der Funktion "CreateObjekt" in VB6

Und zwar kann man ja in der FormLoad mit folgender Anweisung

ein COM - Objekt erzeugen und darauf zugreifen.

------------------------

Dim Anwendung As Object

Private Sub Form_Load()

'Anwendungs Object erzeugen

Set Anwendung = CreateObject("Hier muss das richtige drinstehen damit das klappt")

End Sub

-----------------------------------

Jetzt steht dazu bei MS:

CreateObject kann in Visual Basic nur dann zur Erstellung von Klasseninstanzen verwendet werden,

wenn diese explizit als COM-Komponenten verfügbar gemacht werden.

CreateObject-Funktion (Visual Basic)

Wenn ich jetzt auf eine x-beliebige Anwendung über VB6 zugreifen möchte,

wie mache ich das COM Objekt dieser Anwendung dann verfügbar ?

Also ohne Verweis sondern zur erst zur Laufzeit.

Und wie bekomme man heraus, was in Set Anwendung = CreateObjekt("?????")

stehen muss, damit das dann auch funktioniert.

Weiß das jemand ?

Gruß

Eleu

Geschrieben

Hallo,

ich verstehe nicht ganz, wie du dir das Erzeugen der Instanz zur Laufzeit vorstellst, ohne dass dieses zur Entwurfszeit bekannt ist.

Wenn man diese Instanz erzeugt, dann will man ja später deren Methoden und Eigenschaften benutzen, dh. man muß wissen, welche sie überhaupt hat.

Gruß Martin

Geschrieben
Wenn ich jetzt auf eine x-beliebige Anwendung über VB6 zugreifen möchte,

wie mache ich das COM Objekt dieser Anwendung dann verfügbar ?

Die wenigsten Anwendungen haben überhaupt eine COM-Schnittstelle. Das ist nichts, was man für jede Anwendung "freischalten" könnte. COM-Objekte müssen in der Anwendung implementiert sein, das passiert nicht automatisch.

Wenn also eine Anwendung gar keine COM-Schnittstelle hat, kannst du nichts machen.

Wenn sie eine hat, die aber nur nicht registriert ist, kannst du die Regstrierung mit regsvr32.exe (bei DLLs) durchführen. EXE-COM-Server haben üblicherweise einen Kommandozeilenschalter für die Regstrierung. Beides erfordert allerdings Administratorrechte.

Und wie bekomme man heraus, was in Set Anwendung = CreateObjekt("?????")

stehen muss, damit das dann auch funktioniert.

Das bestimmt die Anwendung/Bibliothek selbst, du musst es also vorher wissen.

Wie gesagt, das ist kein Mechanismus, um beliebige Anwendungen aus VB zu benutzen. Die Anwendung muss das explizit anbieten.

Geschrieben
Hallo,

ich verstehe nicht ganz, wie du dir das Erzeugen der Instanz zur Laufzeit vorstellst, ohne dass dieses zur Entwurfszeit bekannt ist.

Wenn man diese Instanz erzeugt, dann will man ja später deren Methoden und Eigenschaften benutzen, dh. man muß wissen, welche sie überhaupt hat.

Hallo MartinSt,

also ich glaube, wenn das Objekt nicht über einen Verweis dem Projekt bekannt gemacht wird, sondern erst zur Laufzeit, nennt man es späte Bindung.

Bin mir jedenfalls sicher, das es bei manchen Applikationen funktioniert,

da ich einen Datenaustausch ohne Verweis im Projekt schon mal Richtung WinCC hinbekommen habe.

Das bestimmt die Anwendung/Bibliothek selbst, du musst es also vorher wissen.

Wie gesagt, das ist kein Mechanismus, um beliebige Anwendungen aus VB zu benutzen. Die Anwendung muss das explizit anbieten.

Hallo Klotzkopp,

hatte gehofft, dass es irgendwie über "dcomcnfg" herauszufinden ist.

Da sind ja irgendwie COM Objekte aufgelistet.

Weiß aber nicht wo ich da gucken muss / kann.

Also ich verstehe dich so, dass wenn eine App. ein COM Objekt unterstützt, dieses nur ansprechbar ist, wenn man die Schnittstellendoku vom Hersteller hat. :(

Gruß

Eleu

Geschrieben

Was versprichst du dir denn eigentlich davon?

Selbst wenn eine Anwendung eine COM-Schnittstelle hat, heißt das nicht, dass du damit die Anwendung so kontrollieren kannst, wie das bei den Office-Produkten der Fall ist.

Das COM-Automatisierungsinterface von Word zum Beispiel stellt praktisch alle Funktionen von Word zur Verfügung. Das muss aber nicht so sein. Weder muss eine COM-Schnittstelle dieselbe Funktionalität zur Verfügung stellen wie die Anwendung selbst, noch muss sie vollständig sein.

Ich habe hier beispielsweise eine Anwendung, die eine COM-Schnittstelle hat. Sie stellt von ihren vielen Funktionen genau zwei über COM zur Verfügung. Und in diesen beiden Funktionen verhält sie sich über COM anders, als wenn man die Funktion direkt aus der Anwendung aufrufen würde. Und man muss genau wissen, wie man diese Funktionen benutzt.

Du scheinst dir unter COM eine automatisch vorhandene Fernsteuerungsmöglichkeit für jede Art Anwendung vorzustellen, das ist aber nicht der Fall.

Beschreib also bitte, was du damit erreichen willst. Vielleicht geht's ja auch anders.

Geschrieben
Du scheinst dir unter COM eine automatisch vorhandene Fernsteuerungsmöglichkeit für jede Art Anwendung vorzustellen, das ist aber nicht der Fall.

Beschreib also bitte, was du damit erreichen willst. Vielleicht geht's ja auch anders.

Es ist eine rein theoretische Frage, die im Prinzip nur dazu dient,

meinem eigenen Verständnis auf die Sprünge zu helfen.

Also kein konkretes Projekt.

Ich hatte angenommen, dass die Eigenschaften und Methoden von COM Objekten, falls sie vorhanden sind, ähnlich wie bei Klassen, offen verfügbar sind.

Wenn auch keine Beschreibung dieser Eigenschaften und Methoden vorliegt,

so ist doch vielleicht durch ausprobieren etwas möglich ?

Eine Eigenschaft "value" wäre ja zum Beispiel ziemlich selbsterklärend.

Aber wo findet man zur entsprechenden Applikation den Namen der .dll oder der .exe und die Eigenschaften und Methoden die von diesen COM - Objekten veröffentlicht werden ?

Kann man das gar nicht herausfinden ?

Oder ist das die berühmte Nadel im Heuhaufen ?

Geschrieben
Wenn auch keine Beschreibung dieser Eigenschaften und Methoden vorliegt,

so ist doch vielleicht durch ausprobieren etwas möglich ?

Ausprobieren halte ich für gewagt. Du solltest nicht irgendwelche Funktionen aufrufen, von denen du nicht weißt, was sie tun. Erstens kannst du die Wirkung unter Umständen gar nicht beobachten, weil beispielsweise nur der interne Zustand eines Objekts geändert wird, oder weil eine Wirkung erst im Zusammenspiel mit anderen Funktionsaufrufen eintritt. Zweitens kann so ein Aufruf durchaus unerwünschte Effekte haben. Gelöschte Dateien gehören da vermutlich noch zu den kleineren Problemen.

Aber wo findet man zur entsprechenden Applikation den Namen der .dll oder der .exe und die Eigenschaften und Methoden die von diesen COM - Objekten veröffentlicht werden ?

Alle COM-Objekte werden registriert, d.h. die Informationen darüber, welche DLL, OCX oder EXE ein bestimmtes Objekt bereitstellt, steht in der Registry unter der CLSID des Objekts (das ist der 16-Byte-Zahlenwert wie {000209FF-0000-0000-C000-000000000046}).

Wenn du in VB CreateObject benutzt, sucht das Programm in der Registry nach dem angegebenen Namen (die sog. ProgID), um darüber die CLSID zu ermitteln, und darüber wiederum die zu benutzende DLL oder EXE.

Wenn das Objekt das IDispatch-Interface implementiert (und das muss es, um aus VB6 benutzbar zu sein), kannst du die Methoden und Eigenschaften zur Laufzeit ermitteln.

Das sagt dir aber immer noch nicht, wie das Objekt zu benutzen ist.

Geschrieben

Ich glaube, ich habe jetzt den Mechanismus verstanden der dahintersteckt.

Vielen Dank dafür.

Versuche auf einer alten stand allone Maschine sind m.E. schmerzfrei.

Wo findet man denn in der Registry die jeweilige ProgID ?

Geschrieben
Wenn das Objekt das IDispatch-Interface implementiert (und das muss es, um aus VB6 benutzbar zu sein), kannst du die Methoden und Eigenschaften zur Laufzeit ermitteln.

Wie meinst Du das genau ?

Kann ich die verfügbaren Methoden u. Eigenschaften

des COM - Objektes über VB zur Laufzeit auch auflisten ?

Wenn ja, wie denn ?

Ich habe gelesen, dass man das mit dem Tool "oleview" von MS kann.

Geht das damit, oder gibt es etwas besseres ?

Ich habe mir das Tool overview.exe downgeloaded und bekomme beim Start

des Programms die Meldung das er die IViewers.dll nicht finden kann.

post-58959-14430448797922_thumb.jpg

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