我为我们使用他们提供的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