如何为类型库转换制作合适的.DLL

时间:2017-09-01 10:25:08

标签: c++ dll com tlb

我的COM类型库.tlb(由regasm OF .NET v4+生成)的类型不完整我不确定这是因为cppc.exe派生了错误的标题对于它或如果这只是它的一个症状。 我知道它不完整,因为所有生成的类都出来了。作为struct s和b。使用空接口体(未定义方法)。

我确定在使我的.dll适合于赎罪时,我做错了什么;我已经改变了Assembly-Info,并为所有类型制作了默认构造函数。我打算做其他事吗?

1 个答案:

答案 0 :(得分:1)

如果将程序集标记为COM可见,则在dispinterface的帮助下公开具有默认构造函数的所有公共类。此接口类型设计用于后期绑定客户端,例如脚本语言,它通过Dispatch标识符(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链接。