0

我有一个 COM 控件,它有一个MyCOMCtl类,该类具有Data属性,可在生成的 COM Interop 程序集中作为get_Data使用。为此 COM 控件生成了两个不同的互操作程序集:

  1. 通过在 VS2010 中添加 COM 控件,会自动生成一个互操作(和 Ax...)。
  2. 从 VS2010 命令提示符使用 TBIMP v4 工具。

问题是,当使用 TLBIMP 生成互操作程序集时,get_Data 变为:

dynamic MyCOMCtl::get_Data(...)

但是当它由VS2010自动生成时,它变成:

object MyCOMCtl::get_Data(...)

我的代码需要第二个返回object的代码。VS2010 项目面向.NET Framwork 4 Client Profile,TLBIMP 版本为 4.0.30319.1。

为什么会这样?有没有办法纠正这个问题?

4

1 回答 1

0

我猜你把事情搞混了。出于向后兼容性的原因tlbimp,不应创建动态类型。

但是,Visual Studio 在使用NoPIA时会生成动态类型。NoPIA 意味着您不必将主互操作程序集与您的控件一起提供。此外,不再生成类型tlbimp。相反,它们是在导入类型库的程序集中直接创建的。您可以(而且恕我直言应该)通过右键单击 Visual Studio 中的 COM 引用,选择“属性”菜单并将“嵌入互操作类型”属性设置为 false 来禁用此设置。您将看到,Visual Studio 生成的引用也创建了一个object返回类型。

然而,这还不完全正确。如果您使用 tlbimp 为您的控件生成(主)互操作库,您还应该引用它!不要向您的项目添加 COM 引用。而是浏览 tlbimp 生成的互操作库并添加这个。

于 2014-06-23T06:46:08.720 回答