web-dev-qa-db-ja.com

CallキーワードはVB6で何をしますか?

プロジェクトには、次のようなコードがいくつかあります。

Private Sub Method1()
    Call InnerMethod
End Sub

Private Sub Method2()
    InnerMethod
End Sub

Private Sub InnerMethod()
    '' stuff
End Sub

Method2に対してMethod1を実行する利点は何ですか?

33
Ant

[〜#〜] msdn [〜#〜] から:

プロシージャを呼び出すときにCallキーワードを使用する必要はありません。ただし、Callキーワードを使用して引数を必要とするプロシージャを呼び出す場合は、argumentlistを括弧で囲む必要があります。 Callキーワードを省略する場合は、argumentlistを囲む括弧も省略する必要があります。 Call構文を使用して組み込み関数またはユーザー定義関数を呼び出す場合、関数の戻り値は破棄されます。

例えば:

Sub Proc1()
    Debug.Print "Hello World"
End Sub

Sub Proc2(text As String)
    Debug.Print "Hello " & text
End Sub

イミディエイトウィンドウで、

Proc1

その後、「Hello World」が印刷されます。入力した場合

Call Proc1

その後、「Hello World」が印刷されます。入力した場合

Proc2 "World"

その後、「Hello World」が印刷されます。入力した場合

Call Proc2 "World" 

コンパイルエラーが発生します。入力する必要があります

Call Proc2("World")
37
Patrick Cuff

Callはメソッドを呼び出す以外に特別なことは何もしません。すべての行がキーワードで始まる必要があったBasicの昔からのこだわりです。 "Let"はこれらのキーワードの別の1つであり、常に割り当ての前に置かれていましたが、必須ではなくなりました。

Method1とMethod2はまったく同じことを行います。

11
Martin Brown

ByRef引数を持つ関数で 'call'キーワードの大きな違いを発見しました(これはMS-Access VBAエディターで見つかりました)。 'Call'キーワードなしで関数を呼び出している場合、呼び出し先にはByRef arumentsは設定されません。例:

Private Function Test(Optional ByRef refArg As String) As Boolean    
    refArg = "Test"
    Test = True
End Function

Callキーワードなしで関数を呼び出す場合

Dim a As String
Test(a)

aは、呼び出しが戻った後、空の文字列になります

Callキーワードを使用して関数を呼び出す場合

Dim a As String
Call Test(a)

aには文字列Testが含まれます

次のリンクで提供される詳細な説明: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx

5
Abraham

違いはありません。

2
James Sun

post は、callを使用する必要がある場合と、それを使用しない場合、およびパラメーターを括弧で囲む場合を示しています。

MSDNから call についての詳細を読むこともできます。基本的な主な違いは、callを使用して関数を呼び出すと、戻り値にアクセスできないことです。

2
JoshBerke