WIA 2.0 - IWiaDevMgr2::GetImgDlg() - 如何声明/初始化 ppbstrFilePath
WIA 2.0 - IWiaDevMgr2::GetImgDlg() - How to declare/init the ppbstrFilePaths parameter
我正在尝试在我的VS2012 C++库中实现一些WIA 2.0代码,并且遇到了IWiaDevMgr2::GetImageDlg调用的问题,特别是ppbstrFilePath paraneter。 我不太确定如何声明/初始化它。
来自 http://msdn.microsoft.com/en-us/library/windows/desktop/aa359932(v=vs.85)的文档.aspx:
ppbstr文件路径 [in] TYPE - BSTR**
指向扫描文件的路径数组的指针的地址。在调用 IWiaDevMgr2::GetImageDlg 之前初始化指针以指向大小为零 (0) 的数组。请参阅备注。
我已经尝试了各种变体来声明这一点,但没有成功,例如:
// 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++开发人员,在这一点上几乎是猜测。
事实证明,我第一次尝试就走在了正确的轨道上:
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 解决了这个问题。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在函数内部的声明中初始化数组,并在外部使用它
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 构造函数/函数声明参数列表中的统一初始化
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 强制使用默认构造函数对成员进行未初始化的声明
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 初始化声明符是 prvalue 表达式吗?
- 智能指针可以单独向前声明和初始化吗?
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- C++ 通过函数声明后初始化向量
- public:静态常量字符串声明/初始化问题
- 类模板静态数据成员定义/声明/初始化
- 初始化的多维数组,用声明初始化和声明后初始化有什么区别
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- WIA 2.0 - IWiaDevMgr2::GetImgDlg() - 如何声明/初始化 ppbstrFilePath
- (Qt C++)用值填充QMap,同时声明/初始化
- 变量声明初始化顺序
- 使用static、const、constexpr的全局声明/初始化
- c++中多个文件的声明/初始化问题