我有Excel插件,我添加了很多类模块,现在它非常笨重。我想将其转换为类型库或COM包,以便我可以将其重用于MS Office套件中的其他应用程序。如何为OLE自动化编写类库?
我将加载项作为类库项目移植到Visual Studio,但Excel自动化无法识别已编译的.dll文件中的类。直觉上我想我需要一个清单,一个接口或类似的东西在我的代码中。
为了公开类的方法和属性以用于OLE自动化,我需要知道些什么?
我有Excel插件,我添加了很多类模块,现在它非常笨重。我想将其转换为类型库或COM包,以便我可以将其重用于MS Office套件中的其他应用程序。如何为OLE自动化编写类库?
我将加载项作为类库项目移植到Visual Studio,但Excel自动化无法识别已编译的.dll文件中的类。直觉上我想我需要一个清单,一个接口或类似的东西在我的代码中。
为了公开类的方法和属性以用于OLE自动化,我需要知道些什么?
我假设,因为你使用的短语清单,您使用的是.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。
希望这会有所帮助, Bill。
(假设它是一个.NET项目)
而且具有的GUID添加到您的接口和类,您还需要将它们与标记有ComVisible特性属性标记(除非你已经打上它的整机组装) 。另外,您需要使用tlbexp.exe将元数据作为COM类型库导出,以便在非托管客户端中引用。