从 C# 中的 System.__Object 获取值

问题描述 投票:0回答:1

我有一个供应商特定的 COM 接口。智能感知在写入时显示属性;因此我写了类似的东西

App.Element.Car.seats

Visual Studio 以某种方式知道这一点。在自动完成窗口中,这些元素显示为

App
的属性,这是外部应用程序的 COM 接口。 Visual Studio 是否以某种方式读取 dll/库中可用的方法和属性?

但是,调用返回

System.__Object
,但它应该是某种类型的数字。我没有任何关于 COM 接口的文档;因此我必须只使用 dll。有没有办法获得正确的类型并检索以某种方式包含在
seats
中的实际值?

在 VB 中,这种表示法确实有效,但我必须使用 C#。

c# com-interop
1个回答
0
投票

Visual Studio 使用元数据为 COM 对象提供 IntelliSense,这就是它能够在您键入时建议属性和方法的方式。注册 COM 组件后,类型信息就可用,可供 Visual Studio 等开发环境使用。

但是,当使用 C# 中的 COM 互操作时,尤其是使用后期绑定时,事情可能会变得有点棘手。如果您访问的 COM 对象没有可用的强类型互操作程序集(或者如果您出于某种其他原因使用后期绑定),则结果通常是通用 System.__ComObject,它不提供太多类型信息C#。

我建议您使用类型库:如果 COM 组件附带类型库(.tlb 文件),您可以使用 Visual Studio 附带的 tlbimp.exe 工具将其导入到您的 C# 项目中。这将生成一个 .NET 互操作程序集,该程序集提供用于与 COM 组件交互的强类型类。

或者

使用dynamic:从C# 4.0开始,您可以使用dynamic关键字,它可以有效地在C#中提供后期绑定。这允许您以更像 VB 的方式使用 COM 对象:

dynamic app = GetComObject(); // Or however you get your COM object
var seats = app.Element.Car.seats;
© www.soinside.com 2019 - 2024. All rights reserved.