我遇到了一個我正在嘗試使用的COM庫的問題。當我調用一個特定的方法並將其傳遞給null
時,我得到一個ArgumentException異常。這發生在我在C#項目和VB.NET項目中(我調用方法使用Nothing
),我在Visual Studio 2008中的「COM」列表中添加了庫引用。當我在Python中調用此方法時,傳遞在None
中,該方法按預期工作,沒有錯誤。我的理解是Python通過DCOM與COM庫交互(而我只有最模糊的概念意味着什麼),而當我在C#/ VB.NET項目中引用它時,可能會直接使用COM庫。可能發生的事情會導致我傳遞的參數在獲取到COM庫之前搞砸了嗎?我不確定這裏發生了什麼事。我最近更新了COM庫到一個更新的版本,所以我想知道是否在某處發生版本衝突,導致異常。我從C#和VB.NET項目中刪除了所有對COM庫的引用,刪除了所有bin
和obj
目錄,並重新添加了引用。這確實會導致出現在obj
中的Interop.MyCOMLibrary.dll文件具有今天的日期,而不是我所看到的更早的日期。COM方法調用在C#,VB.NET中失敗,但在Python中工作
我對COM庫中的唯一文檔描述的方法如下:
Public Function AddItem(_
ByVal ItemData As Variant _
) As Object
我試圖搜索周圍的現在就Variant
參數的問題。
編輯:所以雖然Type.Missing
和其他解決方案讓我過去那種方法調用沒有錯誤,試圖從該方法的結果讀取返回的項目的某些字符串屬性的作用:
系統。 Runtime.InteropServices.COMException:項目不存在。
這是另一個例子,它在Python中工作,但在C#中拋出異常,所以我猜測更多的DCOM與COM怪異。或者這可能是一個線程問題,因爲我正在使用MSTest進行測試。
看起來像'Type.Missing'的作品!我發佈了一個關於如何傳遞'new object()'的函數,但我猜''Type.Missing'會更好,因爲它聽起來更接近我想傳遞的原始'null'。 – 2010-10-07 19:15:11