ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 14.12.2000

Diese Seite wurde zuletzt aktualisiert am 14.12.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Global heisst überall

Zurück...


Anzeige

(-hg) mailto:hg_globalobject@aboutvb.de

Wenn Sie möchten, dass eine ActiveX-Server-Anwendung (Active-DLL, -EXE, -Control u.a.) Zugriff auf die globalen Standard-Objekte einer Client-Anwendung, wie etwa deren App-Objekt oder deren Forms-Collection, haben soll, können Sie diese Objekte natürlich je nach Bedarf über Eigenschaften oder Methoden an eine Klasse des Servers weiterreichen.

Da diese Objekte selbst wiederum Unter-Objekte des uninstanziert zur Verfügung stehenden Global-Objekts sind, stellt sich die Frage, ob Sie nicht gleich dieses an die Server-Anwendung weiterreichen könnten. Eine dumme Frage, nicht wahr? Denn ich würde sie ja wohl kaum stellen, wenn ich nicht eine positive Antwort darauf hätte. Anderenfalls wäre nämlich dieser Artikel an dieser Stelle bereits an sein Ende gelangt.

Nun gut, die Antwort lautet also: Ja, natürlich, das geht. Und wie? Steigen Sie ein - aber halten Sie sich fest - das wird eine kleine Fahrt auf der Syntax-Achterbahn!

Denn schon in deren erster Kurve scheint Visual Basic sein eigenes Global-Objekt einfach nicht anerkennen zu wollen. Bereits bei der Eingabe blöken Visual Basics optische Alarmfanfaren los - es wird Ihnen ein Syntax-Fehler signalisiert. Wie das bei Achterbahnen so üblich ist, gibt es wie immer irgendwelche Bügel, die für Sicherheit sorgen. Hier heißen die Sicherheitsbügel "Eckige Klammern". Es gibt nämlich Fälle, in denen Visual Basic herumkaspert und sich gegen bestimmte Bezeichner auflehnt, etwa weil sie aus wildfremden Quellen stammen und nicht ganz VB-konform sind, oder weil es reservierte Schlüsselwörter sind. Für solche Fälle wird die Möglichkeit vorgehalten, einen solchen Bezeichner in eckige Klammern zu setzen. Das klappt zwar nicht immer - doch hier erfüllt diese Schreibweise den gewünschten Zweck, und die Fanfaren-Optik beruhigt sich.

Vorausgesetzt, die Server-Klasse verfügt über eine Methode zur Übergabe des Global-Objekts (zu dieser Methode kommen wir gleich anschließend), dann tippen Sie folgendes:

ServerInstanz.SetGlobal [Global]

Die erste Kurve wäre also mit syntaktischer Eleganz genommen, die Fahrt geht weiter. Wir fahren in den Tunnel ein (ja, ja, diese Achterbahn ist ein außergewöhnliches Exemplar!), durch den wir nun mal hindurch müssen, wenn das von den Sicherheitsbügeln so schön festgehaltene Global-Objekt in der Übergabemethode auf der Serverseite ankommen soll.

Der Tunnel ist dunkel - Sie können nicht erkennen, welchen Daten- bzw. Objekttyp unser Global-Fahrgast eigentlich hat. Ihr Versuch, den Übergabeparameter dieser Methode daher pauschal als Datentyp Object zu deklarieren, wird allerdings fehlschlagen - das Global-Objekt scheint für Visual Basic gar kein Objekt zu sein.

Überlegen wir einmal, was wir über unseren Global-Fahrgast wissen. Nicht viel, sagen Sie? Sie wussten bisher ja auch noch nicht gar nicht mal, dass es dieses Objekt überhaupt als solches gibt?

Einverstanden - es ist ein UVO, ein "Unbekanntes VB-Objekt" (eine recht spacige Achterbahn, oder?). Wenn wir nun also den Sitz in dem Achterbahnschlitten ausdrücklich als für UVOs reserviert beschriften, dann glaubt uns Visual Basic das sogar (für Eingeweihte: Das Global-Objekt trägt keinen IDispatch-Mantel, aber es schlägt ein vTable-Herz in ihm).

Public Sub SetGlobal(GlobalObject As IUnknown)
  Set ClientGlobalObject = GlobalObject
End Sub

Ach ja, Sie meinen, ich hätte vergessen, die Variable ClientGlobalObject zu deklarieren? Aber, nicht doch! Das habe ich mir für den letzten Looping unserer Syntax-Achterbahnfahrt aufgespart. Oder hätten Sie etwa erwartet, dass Visual Basic glücklich und zufrieden wäre, wenn Sie diese Variable an dieser Stelle nun endlich und simplerweise als Object deklarieren würden? Nein, VB ließe Sie dann in diesem Looping eiskalt kopfunter hängen, zur Strafe.

In Ihrer wachsenden Panik greifen Sie, jetzt wohl schon sichtlich grün im Gesicht und reichlich genervt, zum letzten Heilmittel - zur Bordapotheke von VB. Sie geben einfach den Objektlieferanten "VB" samt dem Punkt dahinter ein, der Visual Basic wie so oft dazu bringt, seine Geheimnisse zu offenbaren, und wühlen sich durch das Angebot. Und siehe da - auf einmal kennt VB sein Global-Objekt nun doch:

Private ClientGlobalObject As VB.Global

Tief Luft holen - es ist vorbei, wir rollen in der Schlussgeraden aus. Ich gönne Ihnen den jetzt wahrlich erholsamen Spaß mit dem Global-Objekt auf der Serverseite.

Debug.Print ClientGlobalObject.App.Title
Debug.Print ClientGlobalObject.Forms.Count
ClientGlobalObject.Forms(0).Move 0, 0
Debug.Print ClientGlobalObject.App.ThreadID

Habe ich da richtig gehört? Sie schielen auf die ThreadID? Nun, bitte, wenn Sie unbedingt wollen - die Fahrt in der API-Geisterbahn machen Sie aber bitte ohne mich...!


Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer