【问题标题】:How can I initialize an ActiveX control from a URL?如何从 URL 初始化 ActiveX 控件?
【发布时间】:2010-05-25 18:51:02
【问题描述】:

我在网页中嵌入了一个 MFC ActiveX 控件。此控件的某些参数非常大。我不知道这些值在编译时会是什么,但我知道一旦检索到,它们几乎肯定永远不会改变。

目前,我像这样嵌入参数:

<object name="MyActiveX">
  <param name="param" value="<%= GetData() %>" />
</object>

我想做这样的事情:

<object name="MyActiveX">
  <param name="param" value="content/data" valuetype="ref" />
</object>

这个想法是浏览器将从网络服务器检索资源并将其传递给控件。然后浏览器自己的缓存会处理不必要的下载。不幸的是,ref 参数不是这样工作的。浏览器只是将 url 传递给控件(这让我觉得完全无用,但我离题了)。

那么,有什么方法可以让我完成这项工作吗?或者,在 MFC 中是否有一种简单的方法来指示控件的主机容器检索 URI 标识的资源?有更好的想法吗?

【问题讨论】:

    标签: mfc activex tags


    【解决方案1】:

    实现 IPersistStream 或 IPersistStreamInit 接口,然后您可以使用对象的数据属性指定内容,如:&lt;object clsid="XXXX" data="mydata.bin"&gt;&lt;/object&gt;。 Internet Explorer 将下载由数据属性引用的文件,并通过其 IPersistStream::Load 接口将其交给您。 ATL 具有这些接口的默认实现,这些接口将填充控件的属性,几乎可以肯定 MFC 也是如此。

    【讨论】:

    • 这似乎是朝着正确的方向发展。存档属性似乎更合适,因为可能有多个项目要下载。这种情况下 IE 是如何暴露数据的?
    • 真的,如果你想下载多个项目,那么这不是你想要的,IE 只会下载一个文件(由 data= 引用),所有其他参数都被忽略。你真的应该只接受一组参数并自己下载。使用 codeguru.com/cpp/i-n/internet/activex/article.php/c6151 之类的东西来获取当前托管的 URL。如果您正在初始化控件的属性,那么 IPersist 的东西将起作用(看看它,MFC 实现了默认的 IPerist 接口)。 msdn.microsoft.com/en-us/library/xxf9wx2c%28v=VS.100%29.aspx
    • DoPropExchange 是我目前从 param 标签中获取参数的方式。我不确定它是否可以从 IPersistStream 中读出数据。也许要走的路就是将所有数据序列化到一个下载中。感谢您的帮助!
    【解决方案2】:

    创建时真的需要数据吗?

    你能把它变成一个“初始化”步骤吗

    largeData = GetData();
    MyActiveX.init( largeData );
    

    【讨论】:

    • 它没有。我可以编写一些代码来使用 WinINet 或类似的东西检索数据,但我想避免对 ActiveX 进行大量更改(代码库与其他项目共享,并且进行特定于 ActiveX 的更改很难看)。
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 2019-11-13
    • 2012-02-16
    • 2014-01-27
    • 1970-01-01
    • 2017-11-06
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多