【问题标题】:Direct access to C++ ATL COM objects直接访问 C++ ATL COM 对象
【发布时间】:2016-08-12 19:57:39
【问题描述】:

我有一个接口的 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);

【问题讨论】:

  • 感谢您的建议。在 Visual Studio 中创建一个简单的 ATL COM 类会产生一些远非最小示例的东西。也许问题还不够清楚,但我尝试找到方法来做我需要的事情,而不是修复代码。
  • 你肯定需要展示一些相关的代码。
  • 我添加了一些代码,希望更清楚。

标签: c++ dll com atl


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 2012-11-03
    • 2011-03-17
    • 2022-01-26
    • 2013-06-21
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多