【问题标题】:"dynamic" return type present when using TLBIMP to generate interop assembly使用 TLBIMP 生成互操作程序集时存在“动态”返回类型
【发布时间】:2014-08-10 21:33:34
【问题描述】:

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

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

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

dynamic MyCOMCtl::get_Data(...)

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

object MyCOMCtl::get_Data(...)

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

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

【问题讨论】:

    标签: .net visual-studio-2010 dynamic com-interop tlbimp


    【解决方案1】:

    我猜你把事情搞混了。 tlbimp 不应出于 backwards compatibility 的原因创建动态类型。

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2014-06-20
      • 2010-10-21
      • 2019-11-03
      • 2011-02-09
      • 2011-12-22
      • 2011-02-28
      • 1970-01-01
      • 2018-09-04
      相关资源
      最近更新 更多