【问题标题】:How To Make A Suitable .DLL for type-library conversion如何制作适合类型库转换的 .DLL
【发布时间】:2018-02-10 09:33:38
【问题描述】:

我的 COM 类型库 .tlb(由 regasm OF .NET v4+ 生成)中的类型不完整它的症状。 我知道它是不完整的,因为所有生成的类都出来了。如structs 和 b。具有空接口主体(未定义方法)。

我确定我在使我的 .dll 适合 regasm 时做错了;我已经更改了 Assembly-Info 并为所有类型创建了默认构造函数。我是不是打算做其他事情?

【问题讨论】:

  • 很难再提供帮助。你有 .net 代码来展示吗?复制位?
  • 您可能创建了一个IDispatch 接口,用于后期绑定。如果您想查看您的方法,您需要切换到dualIUnknown 接口。
  • 是的,@Aurora 谢谢。如何切换到 DUAL 界面?
  • 如何在程序集中公开 COM 接口?有一个单独的公共接口,由你的类实现?还是您只是在项目设置中将程序集标记为 COM 可见?
  • @Aurora 是的,我所做的只是让它 COM 可见。

标签: c++ dll com tlb


【解决方案1】:

如果将程序集标记为 COM 可见,则所有具有默认构造函数的公共类都将在 dispinterface 的帮助下公开。此接口类型是为后期绑定客户端设计的,例如脚本语言,它们通过调度标识符 (DISPID) 调用方法和属性。附带的类型库不会包含接口的任何条目。

为了绑定到固定布局,您需要切换到dualIUnknown 接口。只需按如下方式编辑您的AssemblyInfo.cs

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(true)]
[assembly: ClassInterface(ClassInterfaceType.AutoDual)]

现在,接口的方法在类型库和 IntelliSense 中都是可见的。

但是请注意,对于 AutoDual 公开的类,您在更新程序集时需要小心。请参阅this 链接了解更多信息。

【讨论】:

  • 非常感谢@Aurora!
猜你喜欢
  • 1970-01-01
  • 2020-06-24
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2021-03-10
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多