如何为 type-library 转换制作合适的 .DLL

How To Make A Suitable .DLL for type-library conversion

我的 COM 类型库 .tlb(由 regasm OF .NET v4+ 生成)中的类型不完整我不确定这是不是因为 cppc.exe 派生了错误的 header 或者这仅仅是它的一个症状。 我知道它是不完整的,因为所有生成的 类 都出来了。作为 structs 和 b。接口体为空(未定义方法)。

我确定我在使我的 .dll 适合重性高潮时做错了什么;我更改了 Assembly-Info 并创建了默认构造函数 for-all 类型。我是不是想做点别的事情?

如果您将程序集标记为 COM 可见,则所有具有默认构造函数的 public class 都会在 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 公开了 class,您在更新程序集时需要小心。有关详细信息,请参阅 this link。