2013-04-03 2 views
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);  

здесь час «Область данных, переданная по системному вызову, слишком мал.»
Я компиляция по сравнению с 2010 годом на машине Windows 7.KsProperty() возвращает «Область данных, переданная по системному вызову, слишком мала» ERROR_INSUFFICIENT_BUFFER при установке камеры значения Увеличить

ответ

0

Возможно, вы предоставите буфер, который слишком мал в четвертом параметре.

Это легко проверить это, см IKsControl::KsProperty документов:

Чтобы определить размер буфера, который требуется для конкретного запроса свойства , вы можете вызвать этот метод с PropertyData набором на NULL и DATALENGTH равного до нуля. Метод возвращает HRESULT_FROM_WIN32 (ERROR_MORE_DATA), а BytesReturned содержит размер нужного буфера .

+0

Я попробовал, что я установить 3, 4 параметра NULL, но BytesReturned значение слишком велико (мусор) .Я думаю, ERROR_INSUFFICIENT_BUFFER и ERROR_MORE_DATA являются different.Do у вас есть какие-либо образец или ссылку на то, что вы говорите. –