是什么导致 pMoniker->BindToObject 到 return 800700c1
What's causing pMoniker->BindToObject to return 800700c1
抓包设备有效,但绑定失败。 800703E8 通常表示过滤器未注册。 win10-64
if (SUCCEEDED(hr))
{
char tempDevicePathUTF8[256];
memset(tempDevicePathUTF8,0,256);
tempDevicePathUTF8[0] = 0;
WideCharToMultiByte(CP_UTF8, 0, varName.bstrVal, -1,
tempDevicePathUTF8,
sizeof(tempDevicePathUTF8), NULL,
NULL);
if (strncmp(tempDevicePathUTF8,
(const char*) deviceUniqueIdUTF8,
deviceUniqueIdUTF8Length) == 0)
{
// We have found the requested device
deviceFound = true;
hr = pM->BindToObject(0, 0, IID_IBaseFilter,
(void**) &captureFilter);
if FAILED(hr)
{
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture,
_id, "Failed to bind to the selected capture device %d",hr);
}
if (productUniqueIdUTF8
&& productUniqueIdUTF8Length > 0) // Get the device name
{
GetProductId(deviceUniqueIdUTF8,
productUniqueIdUTF8,
productUniqueIdUTF8Length);
}
}
}
它是webrtc中常见的捕获步骤,在大多数计算机上都能很好地执行,但这个特定的计算机不能。
0x800700C1
是 ERROR_BAD_EXE_FORMAT
,表示捕获设备有问题(即使您认为它是有效的)。典型问题之一是设备已正确注册 32 位应用程序,但未正确注册 64 位应用程序(反之亦然)。无论哪种方式,都是特定 DirectShow 过滤器的 COM 注册问题。
抓包设备有效,但绑定失败。 800703E8 通常表示过滤器未注册。 win10-64
if (SUCCEEDED(hr))
{
char tempDevicePathUTF8[256];
memset(tempDevicePathUTF8,0,256);
tempDevicePathUTF8[0] = 0;
WideCharToMultiByte(CP_UTF8, 0, varName.bstrVal, -1,
tempDevicePathUTF8,
sizeof(tempDevicePathUTF8), NULL,
NULL);
if (strncmp(tempDevicePathUTF8,
(const char*) deviceUniqueIdUTF8,
deviceUniqueIdUTF8Length) == 0)
{
// We have found the requested device
deviceFound = true;
hr = pM->BindToObject(0, 0, IID_IBaseFilter,
(void**) &captureFilter);
if FAILED(hr)
{
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture,
_id, "Failed to bind to the selected capture device %d",hr);
}
if (productUniqueIdUTF8
&& productUniqueIdUTF8Length > 0) // Get the device name
{
GetProductId(deviceUniqueIdUTF8,
productUniqueIdUTF8,
productUniqueIdUTF8Length);
}
}
}
它是webrtc中常见的捕获步骤,在大多数计算机上都能很好地执行,但这个特定的计算机不能。
0x800700C1
是 ERROR_BAD_EXE_FORMAT
,表示捕获设备有问题(即使您认为它是有效的)。典型问题之一是设备已正确注册 32 位应用程序,但未正确注册 64 位应用程序(反之亦然)。无论哪种方式,都是特定 DirectShow 过滤器的 COM 注册问题。