Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用C++;_C++_Com - Fatal编程技术网

C++ 如何使用C++;

C++ 如何使用C++;,c++,com,C++,Com,我是一个COM的完全初学者,并且正在掌握它的细节。 现在我正试图解决一个问题(这是我测试作业的一部分) 我需要做的是在原生C++中建立一个自注册exe com服务器,即一个可在执行中登记一些COM对象的可执行文件。我发现的大多数示例都讲述了在dll中实现服务器并在其上使用regsvr32,但我需要完全自注册exe 有人能解释一下我是怎么做到的吗 UPD:好的,再多说一点:它不起作用。下面是一个片段: int _tmain(int argc, _TCHAR* argv[]) { IClas

我是一个COM的完全初学者,并且正在掌握它的细节。 现在我正试图解决一个问题(这是我测试作业的一部分)

我需要做的是在原生C++中建立一个自注册exe com服务器,即一个可在执行中登记一些COM对象的可执行文件。我发现的大多数示例都讲述了在dll中实现服务器并在其上使用regsvr32,但我需要完全自注册exe

有人能解释一下我是怎么做到的吗

UPD:好的,再多说一点:它不起作用。下面是一个片段:

int _tmain(int argc, _TCHAR* argv[])
{
    IClassFactory *factory = new ISimpleServerFactory();
    DWORD classToken;

    ::CoInitialize(NULL);
    CoRegisterClassObject(
        IID_ISimpleServer, 
        factory, 
        CLSCTX_LOCAL_SERVER, 
        REGCLS_MULTIPLEUSE, 
        &classToken);

    ISimpleServer *pISimpleServer = NULL;

    HRESULT hr = CoCreateInstance(
        CLSID_CSimpleServer, 
        NULL, 
        CLSCTX_LOCAL_SERVER, 
        IID_ISimpleServer,
        (void **)&pISimpleServer);         //<<<<<<<<<<<<<<<< FAILS

    if(SUCCEEDED(hr))
        printf("Instantiation successful\n");

    if(pISimpleServer != NULL)
        pISimpleServer->Release();

    std::cin.ignore();
    CoRevokeClassObject(classToken);
    ::CoUninitialize();
    return 0;
}
int-tmain(int-argc,_-TCHAR*argv[]
{
IClassFactory*工厂=新的ISimpleServerFactory();
德沃德类令牌;
::协同初始化(空);
CoreRegisterClassObject(
IID_是一个简单的服务器,
工厂
CLSCTX_本地_服务器,
REGCLS_多重程序,
&类令牌);
ISimpleServer*PiImpleServer=NULL;
HRESULT hr=CoCreateInstance(
CLSID_CSIMPLE服务器,
无效的
CLSCTX_本地_服务器,
IID_是一个简单的服务器,

(void**)和pISimpleServer);//这取决于您正在寻找的注册类型。至少有两种可能。在活动COM对象已运行时注册以进行访问,以及注册COM对象以使其在尚未运行时自动运行。您到底在寻找什么?请提供有关您要求的详细信息s、 一般来说,我的任务听起来像“创建两个控制台应用程序-服务器和客户端。当服务器运行时,注册COM服务器(退出时注销)。客户端必须在执行时使用实现的COM对象。”。就像那样。这并没有澄清问题。“客户端必须在执行时使用实现的COM对象”可以选择任何一种方式。如果在服务器运行时只注册服务器COM对象,则必须先运行服务器,否则客户端将失败。但是如果静态注册服务器COM对象,则操作系统可以在客户端需要时自动运行服务器,然后在客户端使用完服务器后终止服务器。因此,再次需要在两方面都要更明确地说明您的需求。假设手动运行。(我用内存翻译了这个问题,事实上非常明确)CLSID(类ID)表示类本身的ID。IID(接口ID)表示接口的ID。COM对象(类的实例)可以公开许多接口,每个接口都有自己的标识符(IUnknown是唯一需要的被视为COM对象的接口)。