自定义Flash ActiveX主机 - 相对路径

时间:2009-07-17 03:29:17

标签: flash activex

好的,让它正常工作是一场噩梦,所以我决定把它放到别人身上。

托管flash activex要求您使用实现SetClass的IStorage调用OleCreate(可以是no-op),以及实现的IOleClientSite:

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

但是,加载的swf访问的任何外部资源必须是完全限定的,否则它将失败并出现如下错误:

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

我发布了我想出的答案,告诉我这是不是Propper Stackettique。

1 个答案:

答案 0 :(得分:0)

要解决此问题,您的IOleClientSite还必须实现IServiceProvider :: QueryService()以返回实现CreateMoniker()的IBindHost:

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);