返回SAFEARRAY(Long)的COM对象,导致SafeArrayTypeMismatchException

时间:2012-10-31 18:38:36

标签: vb.net com safearray

我为我们使用他们提供的API类型库在工作中使用的程序编写插件。它是一个名为SCAPI的COM对象。 COM对象是为VB6编写的,所以当我为.NET添加它的引用时,会创建它的Interop版本。

当我使用下面的代码时,它应该根据文档返回SAFEARRAY(Long),我收到一个错误,说我有一个SafeArrayTypeMismatchException。

 Dim oBag As SCAPI.PropertyBag = tempModel.PropertyBag
 Dim x = oBag.Value("Created")

错误是从SCAPI.PropertyBagClass.get_Value(Object Property)函数抛出的,它是COM对象的一部分,而不是我写的。经过我所做的所有研究之后,我似乎无法弄清楚我需要做些什么来实现这个目标。我已经使用tlbimp.exe获取方法信息,但它似乎没有包含任何[out]标签,即使我使用了相同的函数oBag.Value(“Name”),它返回一个字符串值并且不会抛出错误:

 .method public hidebysig newslot specialname abstract virtual 
         instance object 
         marshal( struct) 
         get_Value([in] object  marshal( struct) Property) runtime managed internalcall
 {
 .custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 01 00 02 60 00 00 )                         // .....`..
 } // end of method ISCPropertyBag::get_Value

0 个答案:

没有答案