我有 Excel 插件,我添加了很多类模块,现在它非常庞大。我想将其转换为类型库或 COM 包,以便我可以将其重新用于 MS Office 套件中的其他应用程序。
我将加载项作为类库项目移植到 Visual Studio,但 Excel 自动化无法识别已编译的 .dll 文件中的类。直觉上,我认为我的代码中需要一个清单、一个接口或类似的东西。
为了公开类的方法和属性以在 OLE 自动化中使用,我需要知道什么?
我有 Excel 插件,我添加了很多类模块,现在它非常庞大。我想将其转换为类型库或 COM 包,以便我可以将其重新用于 MS Office 套件中的其他应用程序。
我将加载项作为类库项目移植到 Visual Studio,但 Excel 自动化无法识别已编译的 .dll 文件中的类。直觉上,我认为我的代码中需要一个清单、一个接口或类似的东西。
为了公开类的方法和属性以在 OLE 自动化中使用,我需要知道什么?
我假设由于您使用了短语 manifest,您正在使用 .net 开发平台 VS2003、VS2005 或 VS2008 组装此 DLL,而不是 VS 6.0
此链接提供了注册 .NET 程序集以用作 COM 组件所需的一组详细步骤。
文章没有提到我经常做的一件事是创建我自己的 GUID。使用“工具”菜单中的“创建 GUID”项,然后将它们插入到要为 COM 公开的类、接口和枚举之上。
[Guid("3838ADC1-E901-4003-BD0C-A889A7CF25A1")]
public interface IMyCOMClass {
void MyMethod();
}
[Guid("476BDEB6-B933-4ed5-8B86-7D9330A59356"),
ClassInterface(ClassInterfaceType.None)]
public class MyCOMClass : IMyCOMClass {
public void MyMethod() {
//implementation here
}
}
我要做的第二件事是为类实现的 COM 部分使用单独的接口。这样做的原因与接口更改时 COM 的可破坏性有关,想想 DLL Hell。
希望这会有所帮助,比尔。
(假设它是一个 .NET 项目)
除了必须将 Guid 添加到您的接口和类之外,您还需要用 ComVisible 属性标记它们(除非您已经用它标记了整个程序集)。此外,您需要使用 tlbexp.exe 将元数据导出为 COM 类型库,以便在非托管客户端中进行引用。