我正在尝试为符合UVC标准的USB相机编写UVC扩展单元驱动程序。
我从哪里开始?
我开始基于以下链接中提供的MSDN示例进行开发。 http://msdn.microsoft.com/en-us/library/ff556621%28v=vs.85%29.aspx
替换了过程中指定的所有GUID。我使用的是罗技Pro 9000 USB摄像头。使用UVCView工具获得UVC扩展guid并分配给PROPSETID_VIDCAP_EXTENSION_UNIT。
编写示例应用程序以访问此扩展单元。
IExtensionUnit * g_pIXCcontrol;
hr = CoCreateInstance(__uuidof(IExtensionUnit), NULL, CLSCTX_INPROC_SERVER,
IID_IExtensionUnit, (void **)&g_pIXCcontrol);
我面临什么问题?
CoCreateInstance返回未注册的类HRESULT:0x80040154(REGDB_E_CLASSNOTREG)。
我已经通过命令提示符使用regsvr32命令注册了uvcplgn.ax,这反过来又会在成功注册时抛出消息。但即使在注册之后,CoCreateInstance也会抛出类未注册的错误。
这可能是什么原因? MSDN示例是否错过了正确注册扩展单元的内容?
提前致谢
答案 0 :(得分:1)
CoCreateInstance
的第一个参数必须是COM类标识符CLSID
。 __uuidof(IExtensionUnit)
达成或预期的机会接近于零。
您应该使用CLSID_ExtensionUnit
(来自该示例)。
UPD。代码段,以使代码可以使用某些CLSID。
// Copy your CLSID of interest here in place of XXXXXXXX-YYYY-...
class __declspec(uuid("XXXXXXXX-YYYY-...")) ExtensionUnit;
CoCreateInstance(__uuidof(ExtensionUnit), ...
答案 1 :(得分:1)
MSDN中提供的UVC扩展示例代码的dll相关函数和注册部分存在一些问题。我通过修改dll相关代码和接口接收代码暂时解决了这个问题。
现在我可以在我的应用程序中完美地获得界面,并能够通过扩展单元与UVC USB摄像头进行通信。
感谢您的支持Roman R。