WIA 2.0 — IWiaDevMgr2 :: GetImgDlg () — Как объявить / инициализировать параметр ppbstrFilePaths

Я пытаюсь реализовать код WIA 2.0 в моей библиотеке VS2012 C ++ и столкнулся с проблемой с IWiaDevMgr2 :: GetImageDlg вызов, в частности, паранетер ppbstrFilePaths. Я не совсем уверен, как объявить / инициализировать это.

Из документации на http://msdn.microsoft.com/en-us/library/windows/desktop/aa359932(v=vs.85).aspx:

ppbstrFilePaths [in] TYPE — BSTR **

Адрес указателя на массив путей для проверенных файлов. Инициализируйте указатель, чтобы он указывал на массив нулевого размера (0) перед вызовом IWiaDevMgr2 :: GetImageDlg. Смотрите замечания.

Я пробовал всевозможные варианты объявления этого безуспешно, например:

    // No scanner selection dialog, hr = E_OUTOFMEMORY
BSTR *files = new BSTR[0];
HRESULT hr = _pWiaDevMgr->GetImageDlg(0, NULL, *_parentHwnd, path, fileTemplate, numFiles, &files, &_pWiaItemRoot);

Я также пробовал вещи, похожие на это:

    // No scanner selection dialog, hr = E_OUTOFMEMORY
BSTR **files = (BSTR**)CoTaskMemAlloc(0);
*files = new BSTR[0];
HRESULT hr = _pWiaDevMgr->GetImageDlg(0, NULL, *_parentHwnd, path, fileTemplate, &numFiles, files, &_pWiaItemRoot);

Кто-нибудь может указать мне правильное направление для объявления и инициализации этого BSTR **? Я не большой разработчик C ++ и в значительной степени догадываюсь об этом.

0

Решение

Оказывается, я был на правильном пути с первой попытки:

CComBSTR path("D:\\TestWiaScan");
CComBSTR fileTemplate("FileName");
LONG numFiles = 0L;

BSTR *files = new BSTR[0];
HRESULT hr1 = _pWiaDevMgr->GetImageDlg(0, NULL, _parentHwnd, path, fileTemplate, &numFiles, &files, &_pWiaItemRoot);
if (files)
{
for(int i=0;i < numFiles;i++)
{
SysFreeString(files[i]);
}
}
CoTaskMemFree(files);

if (_pWiaItemRoot)
{
_pWiaItemRoot->Release();
_pWiaItemRoot = NULL;
}

Причина, по которой моя первая попытка не сработала, была из-за проблем с параметрами BSTR, которые я передавал. Использование CComBSTR или SysAllocString решило эту проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]