2つのパラメータを持つtest
というメソッドを持つCOM DLLを呼び出すC#プログラムがあります。最初のパラメータにはByVal
が渡され、2番目にはByRef
が渡されます。ByRefを使用したCOM Interopメソッドのシグネチャ
これは、COM DLLが何をするかです:
Public Sub test(ByVal a As String, ByRef b As String)
a = "a"
b = "b"
End Sub
これは、C#のプログラムが何をするかです:
test.Class1 x = new test.Class1();
string a = "1";
string b = "2";
x.test(a, ref b);
私はref
キーワードを削除した場合、コンパイラは私をすることをアドバイスしないことに注意してくださいref
キーワードが欠けて、パラメータByVal
を渡しました。 ref
が欲しいと分かるまで気づかないので、これは大きな問題になる可能性があります。なぜコンパイラがこの動作を示すのか知っていますか?
@MartinVerjans C#プロジェクトでは "Option Strict ON"はありません – CRK
@HansPassant私はrefキーワードなしでプログラムをテストし、文字列の値は変更しません。したがって、ByRefの代わりに文字列Byvalを渡してください。 – CRK