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。
答案 0 :(得分:0)
您可能会在第四个参数中提供一个太小的缓冲区。
很容易看到这一点,请参阅IKsControl::KsProperty
文档:
确定特定属性所需的缓冲区大小 请求,您可以将PropertyData设置为NULL并调用此方法 DataLength等于零。该方法返回 HRESULT_FROM_WIN32(ERROR_MORE_DATA)和BytesReturned包含 所需缓冲区的大小。