Close()-Methode in VB6-Klasse

Hallo,

ich sitze hier gerade vor einem Problem, dessen Lösung sich davor drückt, sich mir zu erschließen:

Ich muss eine Methode mit dem Namen Close() in eine Klasse implementieren, jedoch wird folgende Zeile als Syntax-Fehler erkannt:

**Public Sub Close()**
[...]
End Sub

Mittlerweile habe ich auch schon eine Idee, woran es liegt: In VB gibt es eine globale Methode „Close“ um einen Dateihandle zu schließen.
Anscheinend gibt es allerdings einen Weg, da auch die „ADODB.Connection“ Klasse eine „Close“ Methode aufweist und offensichtlich eine ActiveX-DLL ist.

Auch Ideen oder Anregungen sind sehr willkommen.
Danke und liebe Grüße,
Stephan

Hallo Stephan,

kenne mich zwar in VB6 nicht aus, aber meist gibts ja ähnliche Konstrukte.

Zu deiner Frage.

Ist das eine „eigene“ Klasse, oder hast du die aus einer bestehenden abgeleitet? Bei einer eigenen Klasse habe ich leider keine Idee, da mE über die Klasse alles gekapselt wird und somit keine Einschränkungen bestehen dürften.

Hat die Klasse ein Erbe, dürfte von dort die Sub kommen. In c# gibt es für diese Fälle die Möglichkeit:

class Square : ShapesClass
{
 int x, y;
 // Because ShapesClass.Area is abstract, failing to override
 // the Area method would result in a compilation error.
 public override int Area()
 {
 return x \* y;
 }
}

Dabei wird durch override angegeben, dass man die bestehende Methode (hier Area, die INT zurückgibt) ändern (überschreiben) möchte.

Hoffe, das hilft etwas.

mfg

Dirk.Pegasus

Hallo Stephan,

Anscheinend gibt es allerdings einen Weg, da auch die
„ADODB.Connection“ Klasse eine „Close“ Methode aufweist und
offensichtlich eine ActiveX-DLL ist.

Ja, aber diese muss nicht in VB geschrieben sein !

Mit C/C++ muss man das Interface eigentlich selber erstellen, bzw. wird mit einem Wizard erstellt.
Dafür hat man dann auch volle Kontrolle über das Ganze, macht aber auch wesentlich mehr arbeit beim Programmieren.
In VB kümmert sich VB selber um die ganze Geschichte, dafür gibt es dann aber andere Limiten.

Andersrum gibt es auch viele falsche Aussagen im Netz und vielen Büchern. Ich hatte einmal das Problem Array mit variabler grösse aus eîner ActiveX zurückgeben zu müssen.
Rein in VB ist das kein Problem, meine ActiveX wurde aber in C++ geschrieben.

Überall war zu lesen, dass dies aus C++ nicht möglich sei !

Nachdem ich mich dann etwas mit dem ActiveX-Interface auseinandergesetzt hatte, gings dann auch :wink:

Da in C++ das ganze Interface zugänglich ist, ist da auch immer eine Möglichkeit für eine Lösung vorhanenden.
VB kapselt die ganzen Interfaces, was den Umgang damit vereinfacht, aber nur diejenigen Möglichkeiten bietet, die vorgesehen wurden. Um andere Möglichkeiten zu benutzen, müsste man den VB-Compiler oder VBA-Interpreter anpassen.

MfG Peter(TOO)

Hallo,

danke für deine Antwort:
Ja, es ist eine eigene Klasse und wie bereits oben geschrieben kommt die Funktion mit der VB-Methode „Close()“ ins Gehege.

Gruß und herzlichen Dank,
Stephan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Stephan!

ich sitze hier gerade vor einem Problem, dessen Lösung sich
davor drückt, sich mir zu erschließen:
Ich muss eine Methode mit dem Namen Close() in eine
Klasse implementieren, jedoch wird folgende Zeile als
Syntax-Fehler erkannt:

Public Sub Close()
[…]
End Sub

Mittlerweile habe ich auch schon eine Idee, woran es liegt: In
VB gibt es eine globale Methode „Close“ um einen Dateihandle
zu schließen.

Das sollte eigentlich egal sein. Ich kann Close-Methoden in Klassen reinhauen wie ich will…

Solche Späße hatte ich aber auch schon. Wenn ich solche Compiler/Debugger-Fehlermeldungen kriege, die eigentlich unlogisch sind, ist der Fehler des öfteren wo anders. Schneide mal Deine Methode Close aus und lass das noch mal debuggen. Dann wird wahrscheinlich ein anderer Fehler auftauchen. Den beheben, dann Deine Methode wieder einfügen, und das Thema sollte erledigt sein.

Was ich auch schon hatte: Funktion ausschneiden, Debuggen, keine Fehlermeldung mehr, wieder einfügen, alles läuft. Ich weiß, logisch ist das nicht, aber wir haben’s ja mit Computern zu tun…

Gruß, Manfred