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

时间:2020-03-06 14:39:54  来源:igfitidea点击:

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

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

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

解决方案

我假设由于我们使用了短语清单,因此与VS 6.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部分使用单独的接口。 DLL Hell认为,这样做的原因与接口更改时COM的可破坏性有关。

希望这可以帮助,
账单。

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

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