Ich habe ein C# -Programm, das eine COM-DLL aufruft, die eine Methode test
mit zwei Parametern hat: der erste Parameter wird ByVal
übergeben, der zweite wird ByRef
übergeben.COM Interop-Methodensignatur mit ByRef
Dies ist, was die COM-DLL tut:
Public Sub test(ByVal a As String, ByRef b As String)
a = "a"
b = "b"
End Sub
Dies ist, was C# Programm macht:
test.Class1 x = new test.Class1();
string a = "1";
string b = "2";
x.test(a, ref b);
Ich stelle fest, dass, wenn ich ref
Schlüsselwort entfernen, wird der Compiler Rat ich nicht, dass Ich vermisste das Schlüsselwort ref
und übergibt den Parameter ByVal
. Dies kann ein großes Problem sein, wenn ich das Schlüsselwort ref
vermisse, weil ich es nicht bemerken kann, bis ich weiß, dass es die ref
will. Weißt du, warum der Compiler dieses Verhalten zeigt?
@MartinVerjans gibt es keine "Option Strict ON" in C# -Projekten – CRK
@HansPassant Ich teste das Programm ohne ref-Schlüsselwort, und es ändert nicht den Wert der Zeichenfolge. Übergeben Sie die Zeichenfolge ByVal statt ByRef, wenn Sie ihm das nicht mitteilen. – CRK