注册表中已有注册过类,但是CoCreateInstance()=0x80040154

时间:2021-03-16 09:00:54
如题
hr = CoCreateInstance( __uuidof(SoftUSBHub),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(ISoftUSBHub),
reinterpret_cast<void**>(&piSoftUSBHub) );

返回值0x80040154
SoftUSBHub = {4195454B-4ACE-44CD-B4B9-30CEE8D8951B}
ISoftUSBHub = {0442B742-2BD3-4B07-99D8-65B6395BCDB0}
这2个CLSID注册表中都有,但是我不能确定这2个注册表项是正确的
还有在baidu上看到有人说这和注册类是否支持CLSCTX_INPROC_SERVER方式有关
真是万事开头难( ⊙ o ⊙ )!

10 个解决方案

#1


你的线程是STA还是MTA?

#2





引用 1 楼 jiangsheng 的回复:
你的线程是STA还是MTA?

版主你好,我这个是win32控制台程序,没有使用线程,怎么选STA/MTA,我用的是VS2008
至于STA/MTA,我看到.NET这2种模式,COM的使用和.NET有关么
我又看了下注册表:{4195454B-4ACE-44CD-B4B9-30CEE8D8951B}(SoftUSBHub)是在HKEY_CLASSES_ROOT\CLSID下,{0442B742-2BD3-4B07-99D8-65B6395BCDB0}(ISoftUSBHub)在HKEY_CLASSES_ROOT\interface下,这个有影响么,而且他们下面都没有InProcServer32项
要使用ATL么
完蛋了现在又变成"0x80070002系统找不到指定的文件"

#3


若没有使用线程相关的东西话,首先检测下是否正确注册,
重新注册下该组件。
若上述没有问题且仍存在你所述问题,看下是否支持CLSCTX_INPROC_SERVER,可能该组件不支持以这种方式创建。

#4


本帖最后由 VisualEleven 于 2014-03-03 12:13:27 编辑
注册表中已有注册过类,但是CoCreateInstance()=0x80040154注册表中已有注册过类,但是CoCreateInstance()=0x80040154不好意思我已经有点神志不清了,重新描述下状况:
注册表HKEY_CLASSES_ROOT\CLSID下有{4195454B-4ACE-44CD-B4B9-30CEE8D8951B}SoftUSBHub
注册表HKEY_CLASSES_ROOT\interface下有{0442B742-2BD3-4B07-99D8-65B6395BCDB0}ISoftUSBHub
hr = CoCreateInstance( __uuidof(SoftUSBHub),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(ISoftUSBHub),
reinterpret_cast<void**>(&piSoftUSBHub) );

返回值0x80040154 没有注册类别

#5


使用regsvr32 xxx.dll注册一下

#6


你用的是托管的??

#7


应该不是注册的问题了,现在问题是"0x80070002系统找不到指定的文件".我的目的是使用DSF架构来实现虚拟USB设备,我跑了一下微软提供的Create1.1Kbd.wsf文件(cscript.exe Create1.1Kbd.wsf)命令行提示:C:\Program Files\dsf\GenericHID\TestGenericHid.wsf(53, 16) (null): 系统找不到指定的文件。
53:Dim DSF     : Set DSF = CreateObject("DSF.DSF")
这里的DSF和前面的SoftUSBHub以及ISoftUSBHub类似.抓狂了啊 注册表中已有注册过类,但是CoCreateInstance()=0x80040154

#8


引用 6 楼 hdt 的回复:
你用的是托管的??
我建的是控制台程序,应该不是托管的吧?

#9


你要注册的那个dll是不是托管地?

#10


引用 9 楼 hdt 的回复:
你要注册的那个dll是不是托管地?
这个我就不晓得了,SoftUSBHub和ISoftUSBHub应该都是WDK注册的

#1


你的线程是STA还是MTA?

#2





引用 1 楼 jiangsheng 的回复:
你的线程是STA还是MTA?

版主你好,我这个是win32控制台程序,没有使用线程,怎么选STA/MTA,我用的是VS2008
至于STA/MTA,我看到.NET这2种模式,COM的使用和.NET有关么
我又看了下注册表:{4195454B-4ACE-44CD-B4B9-30CEE8D8951B}(SoftUSBHub)是在HKEY_CLASSES_ROOT\CLSID下,{0442B742-2BD3-4B07-99D8-65B6395BCDB0}(ISoftUSBHub)在HKEY_CLASSES_ROOT\interface下,这个有影响么,而且他们下面都没有InProcServer32项
要使用ATL么
完蛋了现在又变成"0x80070002系统找不到指定的文件"

#3


若没有使用线程相关的东西话,首先检测下是否正确注册,
重新注册下该组件。
若上述没有问题且仍存在你所述问题,看下是否支持CLSCTX_INPROC_SERVER,可能该组件不支持以这种方式创建。

#4


本帖最后由 VisualEleven 于 2014-03-03 12:13:27 编辑
注册表中已有注册过类,但是CoCreateInstance()=0x80040154注册表中已有注册过类,但是CoCreateInstance()=0x80040154不好意思我已经有点神志不清了,重新描述下状况:
注册表HKEY_CLASSES_ROOT\CLSID下有{4195454B-4ACE-44CD-B4B9-30CEE8D8951B}SoftUSBHub
注册表HKEY_CLASSES_ROOT\interface下有{0442B742-2BD3-4B07-99D8-65B6395BCDB0}ISoftUSBHub
hr = CoCreateInstance( __uuidof(SoftUSBHub),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(ISoftUSBHub),
reinterpret_cast<void**>(&piSoftUSBHub) );

返回值0x80040154 没有注册类别

#5


使用regsvr32 xxx.dll注册一下

#6


你用的是托管的??

#7


应该不是注册的问题了,现在问题是"0x80070002系统找不到指定的文件".我的目的是使用DSF架构来实现虚拟USB设备,我跑了一下微软提供的Create1.1Kbd.wsf文件(cscript.exe Create1.1Kbd.wsf)命令行提示:C:\Program Files\dsf\GenericHID\TestGenericHid.wsf(53, 16) (null): 系统找不到指定的文件。
53:Dim DSF     : Set DSF = CreateObject("DSF.DSF")
这里的DSF和前面的SoftUSBHub以及ISoftUSBHub类似.抓狂了啊 注册表中已有注册过类,但是CoCreateInstance()=0x80040154

#8


引用 6 楼 hdt 的回复:
你用的是托管的??
我建的是控制台程序,应该不是托管的吧?

#9


你要注册的那个dll是不是托管地?

#10


引用 9 楼 hdt 的回复:
你要注册的那个dll是不是托管地?
这个我就不晓得了,SoftUSBHub和ISoftUSBHub应该都是WDK注册的