如何用C ++编写自注册COM服务器(exe)

时间:2013-07-11 02:46:30

标签: c++ com

我是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;
}

事情是CoRegisterClassObject成功,但CoCreateInstance告诉我对象没有注册。我做错了什么? (我将代码统一到相同的模块中进行调试,因为它在不同的应用程序中不起作用)。

UPD2:Peter Huene帮助了这个 - 必须使用CLSID而不是IID。现在它在进行中。但是当在进程外调用时(来自独立客户端),CoCreateInstance永远不会返回。为什么会这样?

0 个答案:

没有答案