0

我有一个需要从我的 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);
4

1 回答 1

2

如果我没记错的话,那就是旧 COM 运行时脚本库中的 Dictionary 对象:SCRRUN.dll 将COM-TLB 导入您的项目并将您正在获取的变体转换为该类型。

于 2012-06-25T16:09:42.400 回答