关于C++调用::CoCreateInstance创建对象提示没有注册类的问题的解决

关于C++调用::CoCreateInstance创建对象提示没有注册类的问题的解决

  最近做一个C++项目的时候,遇到一个棘手的问题,是关于COM组件的,我完全不会这个技术,因为我没接触过C++后端,所以关于这个COM组件我更是一脸懵逼,我试着把自己编写的代码加入到其中,测试看看结果,但是在我代码运行之前,我要使用的对象没有办法创建出来:
在这里插入图片描述
它报的是xxx.没有注册类,我调试代码把问题定位到了以下一段代码:

	HRESULT hr;
	hr = m_Core.CoCreateInstance(CLSID_Core2);

于是我去了解了下这个方法,就是依靠具体的UUID去创建一个类,而这个类必须注册到我们系统的注册表中。

以下是很多种情况,可以对号入座试试:

解决方法:

看看提示到的dll文件有没有在系统文件夹中出现,没有的话就添加并注册

  于是我先去看了看问题描述的combase.dll,这个类肯定是需要在系统文件夹里面要出现的,因为要提示说要用到它 ;我打开了C:\Windows\System32和C:\Windows\SysWOW64文件夹(我也不知道是用哪个,说64位系统看Systeam32文件夹,32位看SysWOW64文件夹),看有没有combase.dll,如果没有就找一个放进去,然后使用regsvr32命令注册一下试试。对于部分dll文件没有注册类,这类办法应该是有作用的;但是我这里这个dll文件完全注册不了,所以这种解决办法对我没有作用。

看看注册的类的UUID具体是啥,能否在系统注册表中找到

  在程序种找到自己要创建类的UUID,对比UUID去查找注册表中的值,看是否有对应的值存在于注册表,如果没有的话,你得考虑这个类是自己设定的UUID值,还是其他程序主动写入注册表的,如果是你自己写入的话,你可以尝试将对应的类和UUID写入到注册表中(可以去百度一下),如果是程序写入的话,尝试卸载重装软件,以管理员身份运行安装,看看注册表中会不会出现对应的UUID。如果你发现UUID已经存在,并且还是出现没有注册类,那可能就是最后一种问题了。

看看自己的运行环境,将x64环境改为x86环境

  我这里的问题就是系统盘存在对应的dll文件,注册表中也有相应的值,但是就是无法创建出对象,会提示没有注册类的错误,这时候将自己的调试环境转换到了x86之后,我发现CoCreateInstance创建对象就成功了。

  这里我能想到的解决方案就只有以上几种,如果都不行,那只能自行去慢慢摸索了。

猜你喜欢

转载自blog.csdn.net/Whoo_/article/details/126350703