Пользовательский Flash ActiveX Host - Относительные пути - PullRequest
1 голос
/ 17 июля 2009

Хорошо, заставить это работать должным образом было кошмаром, поэтому я решил поднять это для других.

Для размещения flash activex требуется, чтобы вы вызывали OleCreate с IStorage, который реализует SetClass (может быть неактивным), и IOleClientSite, который реализует:

IOleInPlaceSiteEx:
    OnInPlaceActivateEx() (no-op)
    GetWindow()
    GetWindowContext()
IOleClientSite:
    ShowObject() (no-op)

Однако любые внешние ресурсы, к которым загруженный SWF-доступ должен быть полностью квалифицирован, иначе произойдет сбой с ошибками, такими как:

Error #2032: Stream Error. URL: file://<relative path>

Я выкладываю то, что я выяснил в качестве ответа, скажите мне, если это не лучший Stackettique.

1 Ответ

0 голосов
/ 17 июля 2009

Чтобы исправить это, ваш IOleClientSite должен также реализовать IServiceProvider :: QueryService () для возврата IBindHost, который реализует CreateMoniker ():

return CreateURLMonikerEx(pmkBase, szName, ppmk, URL_MK_UNIFORM);

Где pmkBase - это URL Moniker с вашим базовым путем, например:

OLECHAR szPath[MAX_PATH];
int cch = ::GetCurrentDirectory(ARRAYSIZE(szPath), szPath);
// GetCurrentDirectory does not finish with \, which causes the top directory to be removed :(
// Also, error checking is for pansies.
szPath[cch++] = L'\\';
szPath[cch++] = 0;
CreateURLMonikerEx(0, szPath, &pmkBase, URL_MK_UNIFORM);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...