我有用C#編寫的.dll
,我在Visual Basic中使用它來創建Com對象。我從我的Visual Basic代碼中調用C#函數。我對這項技術很陌生,遇到這樣的問題。在C#代碼中,我有一個方法,它接收一個回調函數作爲參數,從服務器獲取數據然後調用該回調函數。現在我需要從我的Visual Basic代碼中調用該函數並傳遞迴調函數。 我認爲它應該是這個樣子將回調函數從Visual Basic傳遞到C#
// C# dll
public bool GetDataFromServer(int someData1, Action<MyCustomType> callback, int someData2)
{
// request to server, get data, create an object of MyCustomType
// call callback and pass MyCustomType object to it as a parameter
}
// Visual Basic part
Public Sub DisplayData(ByRef resp As My_Dll.MyCustomType)
' do something with resp
End Sub
// call Dll method
My_Dll.GetDataFromServer(1, DisplayData, 2) ' I get a compile error
但我無法得到它的工作,但事件不會編譯。我收到一個編譯錯誤,說「參數不可選」。我也試着通過回調函數AddressOf
,但我再次收到錯誤 - 「AddressOf運算符的使用無效」。 現在我的問題是 - 我做錯了什麼?將回調函數從Visual Basic傳遞給C#並將其調用的正確方法是什麼?
謝謝你的時間!
如何使用'async'和'await'來代替回調? –
其實我需要回撥,因爲我要訂閱。所以我的回調應該一次又一次地根據服務器響應來調用。 – nabroyan
VBA沒有代表。您是否考慮傳遞一個C#可以存儲並在完成時調用的對象? – DanL