我想用IWiaDevMgr2直接打開系統的掃描界面,就是下面這個圖,然后查了msdn里的函式,寫了下面這段代碼

IWiaDevMgr2 *pWiaDevMgr = NULL;
HRESULT hr = CoCreateInstance(CLSID_WiaDevMgr2, NULL, CLSCTX_LOCAL_SERVER, IID_IWiaDevMgr2, (PVOID*)&pWiaDevMgr);
if (pWiaDevMgr)
{
BSTR *pbstrDeviceID = NULL;
IWiaItem2* ppItemRoot = NULL;
hr = pWiaDevMgr->SelectDeviceDlg(NULL, STI_DEVICE_MJ_TYPE::StiDeviceTypeScanner, 0, pbstrDeviceID, &ppItemRoot);
if (SUCCEEDED(hr))
{
LONG num = 0;
BSTR *pbstrFilePaths=0;
IWiaItem2* pWiaItems=0;
BSTR bstr1 = _T("Test");
BSTR bstr2 = _T("temp");
HWND hh = GetSafeHwnd();
hr = ppItemRoot->DeviceDlg(0, hh, bstr1, bstr2, &num, &pbstrFilePaths, &pWiaItems);
}
}
中間這個pWiaDevMgr->SelectDeviceDlg是可以打開選擇設備的界面的,然后下面的ppItemRoot->DeviceDlg我認為就是直接打開圖里的界面,但是這個函式一直回傳(E_INVALIDARG One or more arguments are invalid.),我不知道哪個引數有問題,請教一下有沒有用過這段函式的大佬點撥一下,謝謝
uj5u.com熱心網友回復:
BSTR bstr1 = _T("Test");這個是錯的BSTR的字串緩沖區的前面還有四個位元組的長度的,直接用C++字串怎么行
可以用 CComBSTR(L"Test");替換
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/67030.html
標籤:基礎類
