Com 如何为OLE自动化编写类库?

Com 如何为OLE自动化编写类库?,com,activex,typelib,ole-automation,Com,Activex,Typelib,Ole Automation,我有Excel外接程序,我添加了太多的类模块,它现在非常庞大。我想将其转换为类型库或COM包,以便可以将其重新用于MS Office套件中的其他应用程序 我将外接程序作为类库项目移植到Visual Studio,但Excel Automation无法识别编译的.dll文件中的类。直觉上,我认为我需要一个清单,一个接口或者类似的东西在我的代码中 要公开类的方法和属性以便在OLE自动化中使用,我需要知道什么?我假设,由于您使用了短语manifest,所以与VS6.0相比,您是在使用.net开发平台V

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

我将外接程序作为类库项目移植到Visual Studio,但Excel Automation无法识别编译的.dll文件中的类。直觉上,我认为我需要一个清单,一个接口或者类似的东西在我的代码中


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

我假设,由于您使用了短语manifest,所以与VS6.0相比,您是在使用.net开发平台VS2003、VS2005或VS2008组装此DLL

这提供了注册.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地狱

希望这有帮助, 比尔。

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

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