[英]COM Interop Method Signature with ByRef
我有一個C#程序調用一個COM DLL,它有一個名為test
的方法,帶有兩個參數:第一個參數傳遞ByVal
,第二個傳遞ByRef
。
這就是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
關鍵字,這可能是一個大問題,因為在我知道它需要ref
之前我無法注意到它。 你知道為什么編譯器會出現這種行為嗎?
這是COM互操作代碼和C#語言版本4及更高版本的高度特定。 是的,它允許在這種特定情況下省略ref
。 C#版本4進行了大量調整,使Office編程更容易。 Office api最初設計用於早期VB版本,默認情況下使用ByRef。 VBA的情況仍然如此。 所以api有很多 ByRef的方法參數,即使它們實際上沒有修改傳遞的參數。
如有必要,編譯器將生成一個臨時變量,以使調用合法。 結果是你的變量沒有得到更新。 你需要注意的事情。 前進兩步,后退一步:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.