2010-05-25 59 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