gpt4 book ai didi

c++ - HRESULT "Class Not Registered"实现简单的 COM 服务器 DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:55 24 4
gpt4 key购买 nike

我正在关注这个网站教程:

http://progtutorials.tripod.com/COM.htm

初步证据:Visual Studio 2010、Windows 7 64 位。

并且我正在对第 3 部分中的示例进行编码。(实现服务器 DLL)。我已经完全按照所示输入代码,并且在第 4.1 节中概述的代码的第 12 行执行此代码时出现“类未注册”异常(教程向您展示了如何访问 DLL,我有按照 3.1 的要求):

 hresult hr = CoGetClassObject(CLSID_Car, CLSCTX_SERVER, NULL, IID_IClassFactory, (void **) &pClassFactory);

我试过运行:

 regsvr32 xyz.dll 

xyz.dll 是我的 dll 的路径,以便注册 DLL。这导致在尝试查找 DLLRegisterServer 时出错:

enter image description here

我已经跑了

 REGEDIT
HKEY_CLASSES_ROOT\CarDLL.Car\CLSID = {d969084c-b758-43ea-a218-a48763167abd}
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd} = CarDLL.Car
HKEY_CLASSES_ROOT\CLSID\{d969084c-b758-43ea-a218-a48763167abd}\InProcServer32 = C:\Users\wiocl2\Documents\Visual Studio 2010\Projects\CarDLL\debug\CarDLL.dll

我假设将我需要的所有 GUID 都放在注册表中(GUID 是由我生成的)。

我假设需要将一个函数添加到允许它注册的类中,但我不知道如何执行此操作以及如何弄清楚它。我有点迷茫,因为我已经很长时间没有使用 COM 了。如果有人能在正确的方向上插入我,那将会很有帮助。

编辑:哦,是的,我搬家了 #include//包含 DEFINE_GUID 的定义

从 iid.cpp 到 iid.h 文件,否则我在构建时遇到 Unresolved external 错误。

最佳答案

最可能的解释是:您将 COM 对象构建为 32 位 DLL,但注册是作为 64 位 DLL 执行的。

处理方法:打开管理员权限命令窗口并导航到 DLL 的位置 (C:\Users\wiocl2\Documents\Visual Studio 2010\Projects\CarDLL\debug)。在那里,输入:

c:\windows\sysWOW64\regedit <filename of .reg file whose contents are displayed above>

这将运行 32 位版本的 REGEDIT,确保在配置单元的正确部分创建注册表条目。要验证这一点,您应该在 HKLM\Software\Wow6432Node\Classes\CLSID 中看到 {d969084c-b758-43ea-a218-a48763167abd} 的条目,不是 HKLM\Software\类\CLSID。

DllRegisterServer 是一种可以在 COM 服务器 DLL 中实现的方法,如果您想使用 regsvr32 执行与当前使用 . REG 方法。同样的警告适用:对于 32 位 DLL,您需要调用 c:\windows\sysWOW64\regsvr32.exe

是的! COM 仍然大部分仍然存在并且很好 :) 至少在 VS 2012 中仍然有对它的标准支持。

希望对您有所帮助。

关于c++ - HRESULT "Class Not Registered"实现简单的 COM 服务器 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15010702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com