我有一个需要从我的 C# 程序调用的第三方 DLL。
我已将 dll 添加到我的项目中的引用中,并且 VS2010 已生成一个 COM - 互操作包装器 dll。DLL 中定义的接口和类现在可以在我的程序中使用,并且可以正常工作。
现在的问题是返回由整数的键值对和 TSEnt 对象组成的“字典”的方法。在 DLL 中,返回类型定义为 VARIANT*,在包装器中定义为“对象”。DLL 不包含任何字典接口。
我在 C# 中找到的唯一可以成功将此返回值转换为的接口是 IEnumerable。但是使用 foreach 语句从返回值中获取值只返回一个 int32,它是底层键/值对的键部分。
我如何获得这本字典的价值部分?
我试图将其转换为 IDictionary、IDictionary< int、object >、Hashtable 等等,但结果都相同……转换错误。我猜这个 DLL 最初是用早期版本的 Visual Basic 编写的。
请帮助...这个问题在过去的两周里一直困扰着我...
问候杰斯珀·桑加德
从文档中:
Query(String ObjectType, String PropName, String Pattern)
Queries the repository for Objects of type ObjectType with the property PropName
that have the value Pattern. Returns a Dictionary object containing a list of TSEnt
objects that the repository returns. This list is keyed by the index of the elements
in the list starting from 0. Pattern can contain ‘*’ as wildcard. If the Property
name is a Domained value, use the Display Value in the repository model.
从 DLL(ITypeLib 查看器):
[id(0x00000006), helpstring("method Query")]
HRESULT Query(
[in] BSTR Type,
[in] BSTR PropertyName,
[in] BSTR Pattern,
[out, retval] VARIANT* result);
VS中的定义:
[DispId(6)]
object Query(string Type, string PropertyName, string Pattern);