0

私はWIAを初めて使用します。どういうわけか、デバイスリストを取得し、デバイスを選択して、このデバイスを画像アイテムとして列挙することができました。しかし、今、画像を転送しようとすると、行き詰まります。データ転送にルートアイテムを使用するとpWiaDataTransfer->idtGetData、0x8000FFFF(E_UNEXPECTED)のHRESULTが返されます。イメージアイテムを使用すると(デバイスには「root」と「top」の2つのアイテムしかありません)、ストレージインターフェイスを取得すると失敗します。「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'アイテムはどこにありますか。

誰かがここで何が起こっているのか手がかりを持っていますか?

4

1 に答える 1

0

WiaItem解決策は、ローカルコンテキストの「ルート」のアイテムを再度列挙することです。私はこれをinitメソッドで実行し、「top」へのポインターを格納しました。どういうわけか、それが無効になり、HRESULTがそれを反映していないように見えました。コードを変更した後、WiaItem使用する直前に「top」が識別されるようにすると、すべてがうまくいきました。

于 2012-08-24T08:31:48.617 に答える