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);    

here hr 「システム コールに渡されるデータ領域が小さすぎます。」
Windows 7 マシンの vs 2010 でコンパイルしています。

4

1 に答える 1

0

4 番目のパラメーターで小さすぎるバッファーを指定する可能性があります。

これを確認するのは簡単IKsControl::KsPropertyです。ドキュメントを参照してください。

特定のプロパティ要求に必要なバッファー サイズを決定するには、PropertyData を NULL に設定し、DataLength をゼロに設定してこのメ​​ソッドを呼び出します。このメソッドは HRESULT_FROM_WIN32(ERROR_MORE_DATA) を返し、BytesReturned には必要なバッファーのサイズが含まれます。

于 2013-04-08T21:41:29.780 に答える