我可以从同一项目中的另一个ATL简单对象访问ActiveX项目中的函数吗?

Can I access in ActiveX project functions from another ATL simple object in the same project?

本文关键字:项目 ActiveX 访问 单对象 函数 另一个 我可以 ATL 简单      更新时间:2023-10-16

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

虽然你没有在你的问题中提到它,我假设你目前没有访问你想要创建的对象的接口/协类声明。

如果你想使用的控件有一个与它关联的应用程序ID,你可以使用#import指令将接口和类型定义直接拉入你的c++源文件。例如,如果应用程序ID是"Library"。MainObject"你可以在

下面这样做
#import "progid:Library.MainObject"

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

#import "typelibraryname.tlb"

一旦你有访问声明,你可以调用CoCreateInstance就像你会对任何其他COM对象。您可以使用__uuidof(typename)来获取接口或协类的GUID。