c++ 使用tlb文件的COM自动化

vdgimpew  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(262)

考虑到我是Windows环境和COM编程的新手。
我必须自动化应用程序(CANoe)访问。CANoe将自身暴露为COM服务器,并提供CANoe. h、CANoe_i. c和CANoe.tlb文件。我如何编写一个C客户端,用于访问应用程序的对象和函数?
另外,请指定如何从C
访问tlb文件中的代码。

pobjuy32

pobjuy321#

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

#import "CANoe.tlb"

这将导入类型库,并将其转换为头文件和实现文件-它还将导致实现文件与您的项目一起构建,并包含头文件,所以这是很多神奇的东西。
然后,您将获得类型库中定义的类型和对象的智能指针 Package 器的大量typedef。例如,如果有一个名为Application的CoClass实现了接口IApplication,你可以这样做:

ApplicationPtr app(__uuidof(Application));

这将导致在运行时创建coclass应用程序并将其绑定到变量app,您可以像这样调用它:

app->DoSomeCoolStuff();

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

flvlnr44

flvlnr442#

使用import指令导入.tlb文件-这将为您提供COM组件公开的接口的C等效项。
您还需要将COM组件注册到注册表(在组件的.dll文件上运行regsvr32)。之后,您可以调用CoCreateInstance()(或_com_ptr_t::CreateInstance(),因为它通常更方便)来创建实现接口的类的示例。然后你可以调用接口的方法-它的工作方式几乎和普通的C
接口和类一样。

1cosmwyk

1cosmwyk3#

更简单的方法是使用#include语句在.cpp文件中包含.h和_i. c项目。
由于您还没有获得dll,并且只提供了tlb,因此您可以使用regtlibv12.exe注册tlb,它是visual studio的一部分(这是VS2005版本)。通过注册tlb,将在注册表中创建相应的条目,然后您可以根据需要使用COM库功能。
编辑:顺便说一句,你需要DLL无论如何示例化COM组件成功。
要创建接口指针,一种更安全的方法是使用CComPTR,如下所示:

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

相关问题