0

我有一个 ActiveX 控件项目 (.ocx),其中包含一个主控件类和几个其他 ATL 简单对象。主控件类暴露了很多功能;如果我可以在其他 ATL 对象中使用其中一些函数,那将是实用的。这可能吗?我是否必须在其导出的 ATL 对象之一中实例化我的 ActiveX 控件(以及如何?),还是有其他方法?

4

1 回答 1

1

尽管您在问题中没有提到它,但我假设您当前无权访问要创建的对象的接口/coclass 声明。

如果您要使用的控件具有与之关联的应用程序 ID,您可以使用该#import指令将接口和类型定义直接拉入您的 C++ 源文件。例如,如果应用程序 ID 是“Library.MainObject”,您可以执行以下操作

#import "progid:Library.MainObject"

这将直接访问对象类型库。如果它没有与之关联的应用程序 ID,则您可能需要采取一些额外的步骤。获取类型库的一种方法是使用 Visual Studio 附带的 OLE 对象查看器实用程序。在对象查看器中找到它后,您可以将类型库保存为文件。如果您在对象查看器中找不到它,您可以尝试直接打开 OCX 模块,如果它包含类型库,您可以将其导出到文件中。一旦你有了类型库,你就可以用它#import来拉入声明。

#import "typelibraryname.tlb"

一旦您可以访问声明,您就可以CoCreateInstance像调用任何其他 COM 对象一样调用这些声明。您可以使用 __uuidof(typename) 获取接口或 co-class 的 GUID。

于 2013-05-29T18:48:54.290 回答