我有一个ActiveX控件项目(.ocx),它包含一个主控件类和几个其他ATL简单对象。主控制类暴露了许多功能;如果我可以在其他ATL对象中使用其中一些函数,那将是切实可行的。这可能吗?我是否必须在其导出的ATL对象中实例化我的ActiveX控件(以及如何?),还是有另一种方式?
答案 0 :(得分:1)
虽然你没有在你的问题中提到它,但我假设你现在无法访问你想要创建的对象的接口/ coclass decalration。
如果要使用的控件具有与之关联的应用程序ID,则可以使用#import
指令拉入接口并直接在C ++源文件中键入定义。例如,如果应用程序ID是“Library.MainObject”,您可以执行类似下面的操作
#import "progid:Library.MainObject"
这将直接访问对象类型库。如果它没有与之关联的应用程序ID,则可能需要执行一些额外步骤。获取类型库的一种方法是使用Visual Studio附带的OLE Object Viewer实用程序。在对象查看器中找到它后,您可以将类型库保存为文件。如果在对象查看器中找不到它,可以尝试直接打开OCX模块,如果它包含类型库,则可以将其导出到文件中。获得类型库后,可以使用#import
来获取声明。
#import "typelibraryname.tlb"
一旦您可以访问声明,就可以像调用任何其他COM对象一样调用CoCreateInstance
。您可以使用__uuidof(typename)来获取接口或共同类的GUID。