2010-05-25 53 views
0

我有一个嵌入在网页中的MFC ActiveX控件。这个控件的一些参数非常大。我不知道这些值在编译时会是什么,但我知道一旦检索,它们几乎肯定不会改变。如何从URL初始化ActiveX控件?

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

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

我想要做这样的事情:

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

的想法是,该浏览器将检索从Web服务器的资源,将它传递给控件。然后浏览器自己的缓存将处理不必要的下载。不幸的是,ref参数不能像这样工作。浏览器只是将URL传递给控件(这完全使我觉得无用,但我离题了)。

那么,有什么方法可以使这项工作?另外,是否有一种简单的方法在MFC中指示控件的主机容器检索URI标识的资源?任何更好的想法?

回答

1

落实IPersistStream接口或接口的IPersistStreamInit,那么你可以指定内容与对象的数据属性为:<object clsid="XXXX" data="mydata.bin"></object>。 Internet Explorer将通过IPersistStream :: Load接口将data属性引用的文件下载到您的手中。 ATL具有这些接口的默认实现,这些接口将填充控件的属性,几乎可以肯定MFC也是如此。

+0

这似乎正朝着正确的方向发展。归档属性似乎更合适,因为可能需要下载多个项目。 IE在这种情况下如何公开数据? – 2010-05-25 21:21:33

+0

真的如果你想下载多个项目,那么这不会是你想要的,IE只会下载一个文件(由data =引用),所有其他参数都被忽略。你真的应该接受一组参数并自己下载。使用类似http://www.codeguru.com/cpp/i-n/internet/activex/article.php/c6151的内容获取当前托管的URL。 如果你正在初始化控件的属性,那么IPersist的东西就会工作(看它的MFC实现了默认的IPerist接口)。 http://msdn.microsoft.com/en-us/library/xxf9wx2c%28v=VS.100%29.aspx – tyranid 2010-05-26 05:10:03

+0

DoPropExchange是我目前如何从param标签中获取参数。我不确定它是否可以读出来自IPersistStream的数据。也许要走的路只是将所有数据序列化为一次下载。谢谢你的帮助! – 2010-05-26 13:37:47

0

它创建时是否真的需要数据?

你能使其成为一个“初始化”一步

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

它没有。我可以编写一些代码来使用WinINet或类似的东西来检索数据,但我想避免对ActiveX进行大量更改(代码库与其他项目共享,并且使ActiveX特定的更改很难看)。 – 2010-05-25 19:10:56