簡體   English   中英

使用ByRef進行COM互操作方法簽名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM