Com 如何为OLE自动化编写类库?
我有Excel外接程序,我添加了太多的类模块,它现在非常庞大。我想将其转换为类型库或COM包,以便可以将其重新用于MS Office套件中的其他应用程序 我将外接程序作为类库项目移植到Visual Studio,但Excel Automation无法识别编译的.dll文件中的类。直觉上,我认为我需要一个清单,一个接口或者类似的东西在我的代码中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
要公开类的方法和属性以便在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类型库,以便在非托管客户端中引用