Ste*_*ith 1 c++ com visual-studio-2005
我正在学习 Andrew W. Troelsen 的“COM 和 ATL 3.0 开发人员研讨会”。
我正在尝试实现第三章中的实验。
它向您展示了如何构建 COM 客户端来连接到早期实验室中开发的进程内 COM 服务器。
当我运行客户端时,调用“CoGetClassObject”时收到错误“类未注册”。
这是一段代码:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过将以下 .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
Run Code Online (Sandbox Code Playgroud)
不确定这是否相关,但这是我的 .def 文件:
LIBRARY "CarInProcServer"
EXPORTS
DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是 Windows 7
有人可以帮忙吗?
谢谢
知道了!
我手动添加:
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 文件与其中的此条目合并不起作用。感谢肯·怀特的帮助。(以及其他提出解决方案的人)
打开命令提示符,切换到 DLL 的文件夹,然后运行 regsvr32.exe:
cd \Users\Steven\Documents\Visual Studio 2005\Projects\CarInProcServer\release
regsvr32 CarInProcServer.dll
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8598 次 |
| 最近记录: |