0

我有 Excel 插件,我添加了很多类模块,现在它非常庞大。我想将其转换为类型库或 COM 包,以便我可以将其重新用于 MS Office 套件中的其他应用程序。

我将加载项作为类库项目移植到 Visual Studio,但 Excel 自动化无法识别已编译的 .dll 文件中的类。直觉上,我认为我的代码中需要一个清单、一个接口或类似的东西。

为了公开类的方法和属性以在 OLE 自动化中使用,我需要知道什么?

4

2 回答 2

1

我假设由于您使用了短语 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。

希望这会有所帮助,比尔。

于 2008-09-24T22:42:52.913 回答
1

(假设它是一个 .NET 项目)

除了必须将 Guid 添加到您的接口和类之外,您还需要用 ComVisible 属性标记它们(除非您已经用它标记了整个程序集)。此外,您需要使用 tlbexp.exe 将元数据导出为 COM 类型库,以便在非托管客户端中进行引用。

于 2008-09-24T22:47:44.667 回答