实例化 ActiveX 对象
Posted
技术标签:
【中文标题】实例化 ActiveX 对象【英文标题】:Instantiating an ActiveX Object 【发布时间】:2010-09-23 00:39:46 【问题描述】:我在 Visual Studio 2008 的项目中导入了一个 ActiveX 库,使用:
#import "TeeChart8.ocx" named_guids
现在我想创建由 ActiveX 库公开的对象。但是,我无法理解 API。
在我使用 #import
构建项目后创建了两个文件,一个 .tli 文件和一个 .tlh 文件。
.tlh 文件中有以下行:
_COM_SMARTPTR_TYPEDEF(ITChart, __uuidof(ITChart));
当我在 ITypeLib 查看器 (Oleview) 中打开 ActiveX 库 TeeChart8.ocx 时,我可以看到 ITChart
。另外,如果我在代码中输入ITChartPtr->Invoke
,智能感知会告诉我有一大堆参数需要填写。
基本上,我想知道如何实例化一个 ActiveX 对象,以及我必须在哪里寻找我需要的信息?
【问题讨论】:
【参考方案1】:可能不足以创建 ActiveX 函数 CoCreateInstance。 ActiveX 必须正确初始化(理论可以在这里找到ActiveX Controls Overviews and Tutorials :-)
最简单的方法是使用CAxWindow(ATL 框架)
在这里,collected various information 了解如何创建 ActiveX 控件
【讨论】:
【参考方案2】:当它是一个简单的 COM 对象时,您可以使用以下内容(假设一个名为 TChart 的组件类与名为 ITChart 的接口一起使用):
ITChartPtr chart(__uuidof(TChart));
有关在#import 语句生成的.tlh 文件中使用_COM_SMARTPTR_TYPEDEF
宏定义的ITChartPtr
类型的更多信息,请参阅com_ptr_t
。
如果它是一个完整的 ActiveX 控件,还有更多内容,正如 Victor 在他的 answer 中所说的那样。
【讨论】:
是的,有一个名为 TChart 的 coclass。除了导入 .ocx 文件之外,我还必须添加其他包含吗?因为它没有构建,因为它不识别 ITChartPtr。 这在本文social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/…987654324@的帮助下工作【参考方案3】:在您的 API 文档中查找函数 CoCreateInstance。
【讨论】:
以上是关于实例化 ActiveX 对象的主要内容,如果未能解决你的问题,请参考以下文章
当前线程不在单线程单元中,因此无法实例化 ActiveX 控件
.(Java中)实例化对象:就是创建一个对象,用啥运算符来实现对象的实例化?