簡體   English   中英

C#DLL不能影響VB6應用程序引用傳遞的數字的值

[英]C# DLL cannot affect value of a number passed by reference from a VB6 application

我有一個調用VB6 DLL的遺留VB6應用程序,我試圖將VB6 DLL移植到C#而不觸及主VB6應用程序代碼。 舊的VB6 DLL有一個接口通過引用接收VB6長(32位整數),並更新了該值。 在我編寫的C#DLL中,主VB6應用程序從未看到更新的值。 它就像真正編組到C#DLL的內容一樣,是對原始數據副本的引用,而不是對原始數據的引用。 我可以通過引用成功傳遞數組,並更新它們,但單個值不行。

C#DLL代碼看起來像這樣:

[ComVisible(true)]
public interface IInteropDLL
{
   void Increment(ref Int32 num);
}
[ComVisible(true)]
public class InteropDLL : IInteropDLL
{
    public void Increment(ref Int32 num) { num++; }
}

調用VB6代碼看起來像這樣:

Private dll As IInteropDLL
Private Sub Form_Load()
    Set dll = New InteropDLL
End Sub
Private Sub TestLongReference()
    Dim num As Long
    num = 1
    dll.Increment( num )
    Debug.Print num      ' prints 1, not 2.  Why?
End Sub

我究竟做錯了什么? 我需要做些什么來解決它? 提前致謝。

dll.Increment( num )

因為您正在使用括號,所以值會被值強制傳遞,而不是通過引用傳遞(編譯器會創建一個臨時副本並通過引用傳遞 )。

刪除括號:

dll.Increment num

編輯: MarkJ的 更完整的解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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