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

时间:2008-09-24 14:17:30

标签: com activex typelib ole-automation

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

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

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

2 个答案:

答案 0 :(得分:1)

我假设你使用了短语manifest,你使用.net开发平台VS2003,VS2005或VS2008组装这个DLL与VS 6.0相比

link提供了注册.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。

希望这有帮助, 比尔。

答案 1 :(得分:1)

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

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