Re[3]: проблемы с IMoniker::BindToStorage
От: AndrewJD США  
Дата: 16.01.12 10:39
Оценка: 7 (1)
Здравствуйте, Jeka_B, Вы писали:

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


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


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

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

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

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

pDS->pOuterCallback - это IBindStatusCallback*
pDS->pStream - это данные
"For every complex problem, there is a solution that is simple, neat,
and wrong."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.