4

私はいくつかの古いVB6コードを見ています。私はVBを初めて使用し、C / Javaのバックグラウンドを持っているため、いくつかの割り当てステートメントを理解していません。これが1つの例です-

     Private Type UGH
       Rsp(3) As Byte
       ProgramId(7) As Byte
       RID(7) As Byte
       TID(3) As Byte
       FL(39) As Byte
    End Type
    Private UHeader As UGH

その後、割り当ては次のように行われます-

    With UHeader
    StringToByteArray UHeader.ProgramId(), "ABCDPQRS"

私の質問は、上記の割り当てでProgramIdの後に括弧が使用されているのはなぜですか?私にはそれは関数呼び出しのように見えますが、明らかに関数呼び出しではありません。それでは、それは何ですか?

4

4 に答える 4

5

まあそれは実際には必要ありません。括弧なしで同じ行を呼び出すと、まったく同じことが行われます。許可される理由は、バイト配列であるためです。

たぶん、このように行を書き直すと、読みやすくなります。

call StringToByteArray(UHeader.ProgramId(), "ABCDPQRS")

しかし、これも有効です。

call StringToByteArray(UHeader.ProgramId, "ABCDPQRS")

StringToByteArrayメソッドがサブルーチンではなく関数である場合は、おそらくもっと意味があります。

Private Function StringToByteArray(ByVal strValue As String) As Byte()
    'conversion code left out
End Function

次に、次のように呼び出すことができます。

UHeader.ProgramId() = StringToByteArray("ABCDPQRS")

またはこれ:

UHeader.ProgramId = StringToByteArray("ABCDPQRS")
于 2012-05-01T13:30:31.583 に答える
1

この場合の括弧は、配列を指定するために使用されます。の場合Rsp(3) as Byte、0から2までのインデックスが付けられた3バイトの配列を示します。

次の行の場合:StringToByteArray UHeader.ProgramId(), "ABCDPQRS", StringToByteArrayはバイト配列を受け取るメソッドです。配列をメソッドに渡すときは、として渡しますarray()

于 2012-05-01T13:29:27.933 に答える
0

UHeader.ProgramIdは、実際には配列へのポインターです。あなたは単にこれを行うことができます:StringToByteArray UHeader.ProgramID, "ABCDPQRS"。VB6の規則では、関数の前にCallステートメントがない限り、関数には引数リストの括弧が必要であり、サブには括弧がない必要があります。

参照によって配列を渡すため(デフォルト)、サブルーチンで実行される操作は配列自体で実行されます。基本的に、配列とリテラル文字列へのポインタを渡すと、サブルーチンは配列に文字列内の文字を入力します。必要に応じて、「非公式な」関数呼び出しのようなものです。

于 2012-05-08T21:49:06.627 に答える
0

括弧は配列構文にも使用されます。

StringToByteArray UHeader.ProgramId(), "ABCDPQRS"つまり、厳密には割り当てではなく、メソッド(サブルーチンまたは関数)の呼び出しである と言われています。StringToByteArrayプログラムのどこかで定義され、おそらくByRef配列パラメーター、文字列パラメーターを取り、文字列パラメーターをバイトバッファーにコピーします。

于 2012-05-01T13:31:09.447 に答える