我是WIA的新手。我以某种方式设法获得设备列表,选择我的设备并枚举此设备的图像项目。但现在,当我尝试传输图像时,我陷入困境。如果我使用根项进行数据传输pWiaDataTransfer->idtGetData
返回HRESULT为0x8000FFFF(E_UNEXPECTED),如果我使用图像项(我的设备上只有两个项目'root'和'top'),它就会失败获取存储接口。我想也许我需要从'root'获取存储接口,从'top'获取数据传输接口但是也失败了(当我尝试获取数据传输接口时)。然后我得到0x80004002(E_NOINTERFACE - 不支持这样的接口。)。这是代码:
HRESULT TransferWiaItem( IWiaItem *pWiaItem, IWiaItem *pWiaItem2 )
{
IWiaPropertyStorage *pWiaPropertyStorage = NULL;
HRESULT hr = pWiaItem->QueryInterface( IID_IWiaPropertyStorage, (void**)&pWiaPropertyStorage );
if( SUCCEEDED( hr ) )
{
PROPSPEC PropSpec[2] = {0};
PROPVARIANT PropVariant[2] = {0};
const ULONG c_nPropCount = sizeof(PropVariant)/sizeof(PropVariant[0]);
GUID guidOutputFormat = WiaImgFmt_BMP;
PropSpec[0].ulKind = PRSPEC_PROPID;
PropSpec[0].propid = WIA_IPA_FORMAT;
PropSpec[1].ulKind = PRSPEC_PROPID;
PropSpec[1].propid = WIA_IPA_TYMED;
PropVariant[0].vt = VT_CLSID;
PropVariant[0].puuid = &guidOutputFormat;
PropVariant[1].vt = VT_I4;
PropVariant[1].lVal = TYMED_FILE;
hr = pWiaPropertyStorage->WriteMultiple( c_nPropCount, PropSpec, PropVariant, WIA_IPA_FIRST );
if( SUCCEEDED( hr ) )
{
IWiaDataTransfer *pWiaDataTransfer = NULL;
hr = pWiaItem2->QueryInterface( IID_IWiaDataTransfer, (void**)&pWiaDataTransfer );
if( SUCCEEDED( hr ) )
{
CWiaDataCallback *pCallback = new CWiaDataCallback;
if( pCallback )
{
IWiaDataCallback *pWiaDataCallback = NULL;
hr = pCallback->QueryInterface( IID_IWiaDataCallback, (void**)&pWiaDataCallback );
if( SUCCEEDED( hr ) )
{
STGMEDIUM stgMedium = {0};
stgMedium.tymed = TYMED_FILE;
hr = pWiaDataTransfer->idtGetData( &stgMedium, pWiaDataCallback );
...
其中pWiaItem
是'root'项,pWiaItem2
是'top'项。
有人知道这里发生了什么吗?
答案 0 :(得分:0)
解决方案是再次枚举本地上下文中“root”WiaItem
的项目。我在一个init方法中执行了这个操作并将指针存储到'top',不知怎的,它似乎已经失效并且HRESULT没有反映出来。在我更改代码之后,以便在使用之前识别出“顶部”WiaItem
,一切都很顺利。