代码之家  ›  专栏  ›  技术社区  ›  Steven Keith

类未注册

  •  1
  • Steven Keith  · 技术社区  · 16 年前

    我正在通过安德鲁·W·特洛尔森的《开发人员到COM和ATL3.0的工作坊》工作。

    我正试图在第三章中实现这个实验室。

    它向您展示了如何构建一个COM客户机来连接到早期实验室开发的进程内COM服务器。

    当我运行客户机时,在调用“cogetClassObject”时收到错误“class not registered”。

    下面是一段代码:

    // Get the class factory pointer of CoCar.
    hr = CoGetClassObject(CLSID_CoCar, CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory, (void**)&pCF);
    
    if(SUCCEEDED(hr))
    {
        // Make a CoCar & get ICreateCar
        hr = pCF->CreateInstance(NULL, IID_ICreateCar, (void**)&pICreateCar);
        pCF->Release();
    }
    else
    {
        char buff[100];
        BOOL bRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, hr, 0, buff, sizeof(buff), 0);
        std::cout << buff << std::endl;
    }
    

    我尝试通过将以下.reg文件与系统注册表合并来注册该类:

    REGEDIT
    HKEY_CLASSES_ROOT\CarInProcServer.CoCar\CLSID = {EFC76CF8-71B8-477b-890A-1233BD9177CB}
    HKEY_CLASSES_ROOT\CLSID\{EFC76CF8-71B8-477b-890A-1233BD9177CB} = CarInProcServer.CoCar
    HKEY_CLASSES_ROOT\CLSID\{EFC76CF8-71B8-477b-890A-1233BD9177CB}
    \InprocServer32 = C:\Users\Steven\Documents\Visual Studio 2005\Projects\CarInProcServer\release\CarInProcServer.dll
    

    不确定这是否相关,但这是我的.def文件:

    LIBRARY "CarInProcServer"
    EXPORTS
    DllGetClassObject   @1  PRIVATE
    DllCanUnloadNow     @2  PRIVATE
    

    注意:我用的是Windows7

    有人能帮忙吗?

    谢谢


    知道了!

    我手动添加了:

    hkey_local_machine\software\wow6432node\classes\clsid_efc76cf8-71b8-477b-890a-1233bd9177cb_ \ inprocserver32=“c:\users\steven\documents\Visual Studio 2005\projects\carinprocserver\release\carinprocserver.dll”

    到注册表。

    似乎将.reg文件与其中的此条目合并不起作用。感谢肯·怀特的帮助。(以及其他提出解决方案的人)

    3 回复  |  直到 11 年前
        1
  •  4
  •   Ken White    16 年前

    打开命令提示符,切换到dll文件夹,然后运行regsvr32.exe:

    cd \Users\Steven\Documents\Visual Studio 2005\Projects\CarInProcServer\release 
    regsvr32 CarInProcServer.dll
    
        2
  •  2
  •   Brian R. Bondy    16 年前

    是否尝试用regsvr32.exe注册COM服务器?

        3
  •  0
  •   bacar    16 年前

    clsid_cocar的值是否等于注册表文件中的值?(EFC76CF8-71B8-477B-890A-1233BD9177CB),或者它们是否重新生成为不同的值?

    如果是这样,您是否检查过这些值是否已正确合并到注册表中?

    你给CoInitialize打过电话吗?

    推荐文章