我遇到了一个我正在尝试使用的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