Re[4]: проблемы с IMoniker::BindToStorage
От: Jeka_B  
Дата: 23.01.12 08:37
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Здравствуйте, Jeka_B, Вы писали:


J_B>>Что еще нужно сделать, чтоб все заработало? Что я еще забыл?


AJD>Скорее всего IBindStatusCallback.

AJD>Не знаю как сейчас, но раньше флеш требовал чтобы callback вызывались.
AJD>Т.е. в BindToStorage
AJD>нужно вызвать что-то типа такого:


AJD>
AJD>HRESULT CCacheMoniker::DoLoad(IN    PDATALOADST pDS)
AJD>{
AJD>    LARGE_INTEGER nPos;
AJD>    ULARGE_INTEGER nNewPos;
AJD>    nPos.QuadPart = nNewPos.QuadPart = 0;
AJD>    _S(pDS->pStream->Seek(nPos, STREAM_SEEK_END, &nNewPos));

AJD>    DWORD dwSize = (DWORD) nNewPos.QuadPart;
AJD>    CBindingImplObj * pBinder;
AJD>    _S(CBindingImplObj::CreateInstance(&pBinder));
    
AJD>    CComPtr<IBinding> pIBinding;
AJD>    _S(pBinder->QueryInterface(__uuidof(IBinding), (void **) &pIBinding));
AJD>    _S(pDS->pOuterCallback->OnStartBinding(0, pIBinding));
    
AJD>    _S(pDS->pOuterCallback->OnProgress(dwSize, dwSize, 
AJD>        BINDSTATUS_ENDDOWNLOADDATA, A2W("data fully loaded")));
    
AJD>    nPos.QuadPart = 0;
    pDS->>pStream->Seek(nPos, STREAM_SEEK_SET, &nNewPos);
    
AJD>    STGMEDIUM stgmed;    
AJD>    stgmed.pstm = pDS->pStream;
AJD>    stgmed.tymed = TYMED_ISTREAM;
AJD>    stgmed.pUnkForRelease = NULL;
AJD>    _S(pDS->pOuterCallback->OnDataAvailable(
AJD>        BSCF_LASTDATANOTIFICATION | BSCF_FIRSTDATANOTIFICATION, 
AJD>        dwSize, CF_NULL, &stgmed));

AJD>    nPos.QuadPart = 0;
    pDS->>pStream->Seek(nPos, STREAM_SEEK_SET, &nNewPos);

AJD>    _S(pDS->pOuterCallback->OnStopBinding(S_OK, NULL));
        
AJD>    return S_OK;
AJD>}

pDS->>pOuterCallback - это IBindStatusCallback*
pDS->>pStream - это данные
AJD>


Огромное спасибо за помощь
Сделал как Вы сказали, все получилось Чтение из стрима производится при вызове OnDataAvailable.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.