实例化 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中)实例化对象:就是创建一个对象,用啥运算符来实现对象的实例化?

c#为啥实例化对象?啥情况下实例化对象?

C#怎么实例化对象?具体是实例化啥?

C++ 中,类的实例化对象是指啥?如果确保它的实例化对象只得一个?

c++实例化一个对象