文字列を渡したByVal
は、BStr内のC文字列を含む文字の最初の文字のアドレスを渡します。 StrPtr
も同じです。
これには2つの理由があります。 UnicodeをAPI呼び出しと文字列生成に渡します。 APIにUnicodeを渡す
は、API関数のUnicode文字列を送信するときは、文字列ではなくバイト配列にStrPtr
を使用することができ
を呼び出します。
Dim ByteArr() as Byte
Var1="My Text"
ByteArr = Var1
APICall(ByteArr(0))
APICall(StrPtr(Var1))
両方とも、Unicode文字列をAPI関数に渡す必要があります。 Windows 95がUnicodeを実行しなかったので、declare
ステートメントを使用すると、Unicode文字列がANSI文字列に変換されます。
一方のStringビル
あなたは、文字列の建物であれば、そのはLeft
、Right
、およびMid
文、ない機能を使用してVBAに組み込まれ(彼らはオーバーロードされます) 。
Sub Main()
Dim Var As String
Var = "gggggggggggg"
MsgBox StrPtr(Var)
Mid(Var, 1, 2) = "xx"
MsgBox StrPtr(Var) & " - " & Var
End Sub
ByValの対のByRef
一部の著者は、に適用されたときよりも、 文字列に適用されたとき、それは別の意味を持つことを意味し、ByValキーワードを 文字列のために過負荷になっていることを言いたいですその他の変数。率直に言って、私はそれを見ない。 ライティング:
ByVal str As String
文字列へのポインタであるBSTR(実際ABSTR)の内容を渡すVBを伝えます。したがって、ByValは通常 を処理しています.BSTRの内容が別のオブジェクト へのポインタであるため、これは参照渡しをシミュレートします。同様に:
ByRef str As String
は、期待通りにBSTRのアドレスを渡します。
Visual BasicのとのWin32 APIプログラミング、6弦が、Visual Basicでオライリー、MSDNライブラリから2001年10月
StrPtrを
文字列がある章BSTRとして保存されます。 のVarPtrをString型の変数に使用すると、BSTRのアドレスが取得されます。 は、その文字列のポインタへのポインタです。 文字列バッファー自体のアドレスを取得するには、StrPtr関数を使用する必要があります。この 関数は、文字列の最初の文字のアドレスを返します。 文字列はVisual BasicでUNICODEとして格納されることを考慮してください。
文字列の最初の文字のアドレスを取得するには、文字列 をStrPtr関数に渡します。
例:
Dim lngCharAddress as Long
Dim strMyVariable as String
strMyVariable = "Some String"
lngCharAddress = StrPtr(strMyVariable)
あなたはAPI呼び出しに UNIOCODE文字列へのポインタを渡す必要があるときは、この機能を使用することができます。
HOWTOは:Visual BasicのQ199824での変数のアドレスを取得 Microsoft Knowledge Baseの、MSDN 2001年10月
そのため、CorelのようなVBAを実装する企業(VBA/VB6言語の一部ではありません)は、VBAでそれを実装することはできません。 VB6の仕様はここにありますhttps://msdn.microsoft.com/en-us/library/dd361851.aspx
VB6では 'Left'や' Right'文はなく、 'Mid' /' Mid $ 'のみを代入の対象とすることができます。 – wqw