vb6 - How zu übergeben, eine Funktion für parameter?
Wie kann ich tun, um pass einer Funktion durch die parameter, die später aufgerufen werden, in VB6?
wäre so etwas wie das, was ich brauche, kann jede dieser Optionen:
Private Sub Command1_Click()
Call callMethod(MyPrivateFunction)
Call callMethod(MyPublicFunction)
Call callMethod(MyPrivateSub)
Call callMethod(MyPublicSub)
End Sub
Private Function MyPrivateFunction()
MsgBox "MyPrivateFunction"
End Function
Public Function MyPublicFunction()
MsgBox "MyPublicFunction"
End Function
Private Sub MyPrivateSub()
MsgBox "MyPrivateSub"
End Sub
Public Sub MyPublicSub()
MsgBox "MyPublicSub"
End Sub
Public Function callMethod(ByRef func As Object)
Call func
End Function
- Muss es sein, die Funktion Objekt selbst? Warum nicht übergeben wird ein string, dann verwenden Sie eine case-Anweisung zum aufrufen der entsprechenden Funktion?
- Ich verwende "Microsoft.XMLHTTP" und dann den Aufruf der Methode müssen myHttp.OnReadyStateChange = xFunction. Und xFunction übergeben werden sollen, durch die parameter
- Ich kann mich nicht erinnern, vb6 all zu gut, aber ich glaube, Sie brauchen, um zu verwenden, AddressOf um einen Rückruf zu registrieren. Und die Funktion muss deklariert werden in einem Modul.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIRC gibt es eine "AddressOf" - Funktion in VB6-um Funktion-Adressen, aber Sie werden wahrscheinlich große Schwierigkeiten haben, tatsächlich mit der Funktion Adresse aus VB6.
SOP-Weg zu handhaben, ist mit "CallByName ()", die ermöglicht es Ihnen, Sie wissen, aufrufen von Funktionen, etc. durch Ihre Namen.
schließlich können Sie auch nehmen Sie die hohe Straße, durch die Verwendung der standard-OO-Lösung: Anstelle der übergabe die Funktion, eine eigene Klasse schreiben, die eine spezielle Schnittstelle mit Ihrem eigenen design "MyFunctionInterface". Diese Schnittstelle hat nur eine Methode "FunctionToCall(..)", die Sie implementieren können, in verschiedene Klassen, die zum Aufruf der verschiedenen Funktionen, die Sie benötigen. Dann übergeben Sie eine Instanz einer dieser Klassen, um Ihre routine, erhält es als "MyFunctonInterface" und fordert die "FunctionToCall" - Methode auf. Der Kurs, der findet eine ganze Menge kleinere design-änderungen...
Können Sie T-pass-Funktion, aber Sie können ein Objekt übergeben, verhält sich wie eine Funktion (genannt ein "Funktor" manchmal). Ich benutze diese die ganze Zeit. Wenn Sie "Funktor" - Klasse eine Schnittstelle Implementiert, wird der Anruf geben Sie sicher. Zum Beispiel:
Abstrakte Klasse (Schnittstelle) IAction.cls:
Funktor zeigt, dass eine url im Standard-browser:
Jetzt können Sie eine Reihe von diesen Klassen, speichern Sie Sie in einer Auflistung, geben Sie zu jeder Funktion oder Methode, die erwartet, dass ein IAction, etc...
Ihrem Kommentar, dass Sie Microsoft.XMLHTTP OnReadyStateChange ist interessant. Die MSDN-Seite für OnReadyStateChange sagt, es "ist konzipiert für den Einsatz in scripting-Umgebungen und ist nicht leicht zugänglich in Microsoft® Visual Basic®".
Derselben Seite sagt Sie, dass in Visual Basic 6 das sollten Sie tun. Setzen Sie diese variable Deklaration auf Modulebene
dann werden Sie in der Lage, das Ereignis behandeln in der üblichen Art und Weise, wie dieser.
Nebenbei gibt es weitere Diskussion über den Aufruf von Funktionen von Namen in diese Frage. Aber ich denke, es ist die falsche Lösung für dein problem.