c++ - 直接访问 C++ ATL COM 对象

标签 c++ dll com atl

我有一个接口(interface)的 ATL/COM 实现,我需要在我的主代码中实例化它并传递给另一个 COM 对象。此实现是在 C++ 中。

在我的主要 C++ 代码中,我想直接访问对象(而不是通过 COM 端口),并直接访问类成员和方法。

我认为要走的路是在 ATL/COM 类中添加 DECLARE_NO_REGISTRY();然后调用 myCOMClass:CreateObject() 而不是 CoCreateInstance;但我不知道如何使用它(也没有找到任何示例)。

我尝试了几种组合都没有成功。

在我的主要代码中:

//I added this line to call the lib directly
#include "comClass\StdAfx.h"
#include "comClass\comClass_i.c"
#include "comClass\comClass.h"

//I removed this line to bypass COM
//#import  "comClass\comClass.dll"

//What can I put here to replace this block, bypass COM
//and being able to access class members??
CoInitialize(NULL);
comClassInterface *myObject = NULL;
HRESULT hr = ::CoCreateInstance(__uuidof(comClass),
    NULL,
    CLSCTX_INPROC_SERVER,
    __uuidof(comClassInterface),
    (void**)&myObject);

最佳答案

或多或少的“标准”wat 直接创建 COM 对象:

CComObject<comClass> *myObject;
CComObject<comClass>::CreateInstance(&myObject);

基本上就是这样。如果类不是抽象的,您也可以只执行“new comClass”,这在您使用 ATL 时通常是这种情况。

关于c++ - 直接访问 C++ ATL COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738716/

相关文章:

c++ - 字符串的内存损坏

c++ - 在ov5640上使用V4L2设置ctrl

c# - 用 C# 编写的托管 OleDB 提供程序

c# - 如何从 c# 返回列表并通过 com 在 vc++ 中使用它

c++ - 分发使用 MinGW g++ 编译的程序

c++ - 加载的 2D 纹理未将自身绑定(bind)到 QUAD

c# - 使用 Advanced Installer 和 C# 创建安装文件

php - 适用于 Windows 的 PECL 扩展

dll - 如何取消包含dll或其他二进制文件的其他开发人员的更改?

visual-studio - 是否可以在 VS2008 中调试 COM dll?