2016-04-20 102 views
0

我有一个接口的ATL/COM实现,我需要在我的主代码中实例化并传递给另一个COM对象。这个实现是用C++编写的。直接访问C++ ATL COM对象

从我的主要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); 
+0

请阅读http://stackoverflow.com/help/mcve –

+1

感谢您的建议。在Visual Studio中创建一个简单的ATL COM类产生的东西远非最小的例子。也许这个问题还不够清楚,但我试图找到我需要的方法,而不是修复代码。 – seb007

+0

你一定需要显示一些相关的代码。 –

回答

0

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

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

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