0
HRESULT hr = S_OK;
KSPROPERTY ksprop;    
ZeroMemory(&ksprop, sizeof(ksprop));
PVOID pData = NULL;
ULONG valueSize = 0;
ULONG dataLength = 0;
KSPROPERTY_CAMERACONTROL_S cameraControl;
ZeroMemory(&cameraControl, sizeof(cameraControl));
ksprop.Set = PROPSETID_VIDCAP_CAMERACONTROL;
ksprop.Id = KSPROPERTY_CAMERACONTROL_ZOOM;
ksprop.Flags = KSPROPERTY_TYPE_SET;
cameraControl.Property = ksprop;
cameraControl.Flags = KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
cameraControl.Capabilities = KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
cameraControl.Value = 50;

pData = &cameraControl;
dataLength = sizeof(cameraControl);
hr = m_pKsControl->KsProperty(
            &ksprop, sizeof(ksprop),
            pData, dataLength, &valueSize);    

这里 hr “传递给系统调用的数据区太小了。”
我在 windows 7 机器上编译 vs 2010。

4

1 回答 1

0

您可能在第四个参数中提供了一个太小的缓冲区。

很容易检查出来,请参阅IKsControl::KsProperty文档:

要确定特定属性请求所需的缓冲区大小,您可以调用此方法并将 PropertyData 设置为 NULL 并且 DataLength 等于零。该方法返回 HRESULT_FROM_WIN32(ERROR_MORE_DATA),BytesReturned 包含所需缓冲区的大小。

于 2013-04-08T21:41:29.780 回答