регистрация моникера
От: tofox2 Россия  
Дата: 29.07.08 09:40
Оценка:
Помогите, пожалуйста, разобраться что здесь неправильно:

    #define MONIKERTEXT    L"http://A/index.html"

    IStream *stream1, *stream2;
    IMoniker *m, *m2, *m3;
    IHTMLDocument *obj;
    CComPtr<IBindCtx> bind;

    hr = CreateBindCtx(0, &bind);
    hr = CreateURLMoniker(NULL, L"http://localhost/test.html", &m);
    hr = m->BindToStorage(bind, NULL, IID_IStream, (void**)&stream1);
    hr = m->BindToObject(bind, NULL, IID_IHTMLDocument, (void**)&obj);

    hr = CreateURLMoniker(NULL, MONIKERTEXT, &m2);
    CComPtr<IRunningObjectTable> rot;
    GetRunningObjectTable(0, &rot);
    DWORD reg = 0;
    hr = rot->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, obj, m2, &reg);

    IPersistFile *o2;
    hr = CreateURLMoniker(NULL, MONIKERTEXT, &m3);
    hr = m3->BindToStorage(bind, NULL, IID_IStream, (void**)&stream2);     //0x800c0005
    hr = m3->BindToObject(bind, NULL, IID_IPersistFile, (void**)&o2);      //работает

    LPOLESTR s = W2OLE(L"c:\\1.html");
    o2->Save(s, FALSE);     //работает, сохраняет правильный файл

    m_browser.Navigate(MONIKERTEXT, NULL, NULL, NULL, NULL);       //не работает
Re: регистрация моникера
От: AndrewJD США  
Дата: 29.07.08 10:30
Оценка:
Здравствуйте, tofox2, Вы писали:

T>
T>    #define MONIKERTEXT    L"http://A/index.html"
T>    m_browser.Navigate(MONIKERTEXT, NULL, NULL, NULL, NULL);       //не работает
T>


А причем здесь моникеры?

    #define MONIKERTEXT    L"http://A/index.html"
        CComVariant empty;
    m_browser.Navigate(MONIKERTEXT, &empty, &empty, &empty, &empty);       //так работает?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: регистрация моникера
От: tofox2 Россия  
Дата: 29.07.08 10:51
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>А причем здесь моникеры?


Задача не открыть в браузере урл, задача зарегестрировать моникер, доступный для использования в программе и привязать к этому моникеру IStream, связаный с неким куском памяти.
Данный код искусственный, в нём я только пытаюсь понять механизм работы моникера, а именно присвоить файлу http://localhost/test.html имя http://A/index.html
И открыть это имя в браузере.
Re[3]: регистрация моникера
От: AndrewJD США  
Дата: 29.07.08 11:29
Оценка: +1
Здравствуйте, tofox2, Вы писали:

T>Задача не открыть в браузере урл, задача зарегестрировать моникер, доступный для использования в программе и привязать к этому моникеру IStream, связаный с неким куском памяти.


Тогда в чем вопрос? У тебя же моникер создался и содержимое было успешно сохранено.

T>Данный код искусственный, в нём я только пытаюсь понять механизм работы моникера, а именно присвоить файлу http://localhost/test.html имя http://A/index.html

T>И открыть это имя в браузере.

Может тебе нужны pluggable protocol?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[4]: регистрация моникера
От: tofox2 Россия  
Дата: 29.07.08 14:20
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Тогда в чем вопрос? У тебя же моникер создался и содержимое было успешно сохранено.


Да, я получил HTMLDocument по подставному моникеру и успешно его сохранил. Но браузер его не открывает. Единственная зацепка — то что BindToStorage вызывает ошибку, тогда как по реальному урлу ошибки нет.
Вот я и думаю может я что накосячил. Может я неправильно моникер регистрирую, может надо IMoniker реализовать — не знаю.
Ещё одно — моникер может отдать объект или его storage, функция регистрации принимает только объект, откуда BindToStorage берёт storage объекта? Может из него самого?

AJD>Может тебе нужны pluggable protocol?


Вроде нет...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.