班级未注册

时间:2009-11-23 18:23:09

标签: c++ com visual-studio-2005

我正在通过Andrew W. Troelsen的“开发人员研讨会到COM和ATL 3.0”工作。

我正在尝试在第3章实施该实验。

它向您展示了如何构建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

注意:我正在使用Windows 7

有人可以帮忙吗?

由于


知道了!

我手动添加:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \类\ CLSID {EFC76CF8-71B8-477b-890A-1233BD9177CB} \ InprocServer32 =“C:\ Users \ Steven \ Documents \ Visual Studio 2005 \ Projects \ CarInProcServer \ release \ CarInProcServer.dll”

到注册表。

似乎将.reg文件与此条目合并在一起无法正常工作。感谢Ken White的帮助。 (以及其他提出解决方案的人)

3 个答案:

答案 0 :(得分:4)

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

cd \Users\Steven\Documents\Visual Studio 2005\Projects\CarInProcServer\release 
regsvr32 CarInProcServer.dll

答案 1 :(得分:2)

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

答案 2 :(得分:0)

CLSID_CoCar的值是否等于reg文件中的值? ({EFC76CF8-71B8-477b-890A-1233BD9177CB}),还是将它们重新生成为不同的值?

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

你有没有打电话给CoInitialize?