COM 自动化使用 tlb 文件

问题描述 投票:0回答:3

认为我是 Windows 环境和 COM 编程的新手。

我必须自动化应用程序 (CANoe) 访问。 CANoe 将自己公开为 COM 服务器并提供 CANoe.h 、 CANoe_i.c 和 CANoe.tlb 文件。 我如何编写 C++ 客户端来访问应用程序的对象和函数?

此外,请说明如何从 C++ 访问 tlb 文件中的代码。

c++ com automation typelib
3个回答
9
投票

Visual Studio 有很多内置支持,可以将类型库导入到您的 C++ 项目中,并使用这样定义的对象。例如,您可以使用

#import
指令:

#import "CANoe.tlb"

这将导入类型库,并将其转换为头文件和实现文件 - 它还会导致实现文件与您的项目一起构建并包含头文件,所以这里有很多神奇的东西。

然后,您将获得大量类型定义,用于智能指针包装器,用于类型库中定义的类型和对象。例如,如果有一个名为

Application
的 CoClass 实现了接口
IApplication
,您可以这样做:

ApplicationPtr app(__uuidof(Application));

这将导致在运行时创建 coclass 应用程序并将其绑定到变量

app
,您可以像这样调用它:

app->DoSomeCoolStuff();

错误处理是通过检查 COM 调用的结果并在必要时抛出适当的 _com_error 异常来完成的,因此这意味着您需要安全地编写异常。


1
投票

使用

import
指令导入 .tlb 文件 - 这将为您提供与 COM 组件公开的接口等效的 C++。

您还需要将 COM 组件注册到注册表(在组件的 .dll 文件上运行 regsvr32)。之后,您可以调用 CoCreateInstance()(或 _com_ptr_t::CreateInstance(),因为它通常更方便)来创建实现该接口的类的实例。然后你可以调用接口的方法——它的工作方式几乎与普通的 C++ 接口和类一样。


0
投票

更简单的方法是使用

 #include 
语句将 .h 和 _i.c 项目包含在您的 .cpp 文件中。

因为你没有得到dll,只提供了tlb,你可以使用regtlibv12.exe注册tlb,它是visual studio的一部分(这是VS2005版本)。通过注册 tlb,将在注册表中创建适当的条目,然后您可以根据需要使用 COM 库功能。

编辑:顺便说一句,您无论如何都需要 DLL 才能成功实例化 COM 组件。

要创建接口指针,一种更安全的方法是像这样使用 CComPTR:


CComPtr myPtr;
myPtr.CoCreateInstance(__uuidof("ClassNamehere"));
myPtr->Method(....);


© www.soinside.com 2019 - 2024. All rights reserved.