1. Activex 控件是怎么安裝的
一個HTML 中嵌入控件的例子
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="400" height="300">
<param name="movie" value="flash/flash.swf">
<param name="quality" value="high">
<embed src="flash/flash.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="400" height="300"></embed>
</object>
當用IE 打開這個頁面的時候, IE 首先根據 classid 在注冊表中(HKEY_CLASS_ROOT)查找其安裝信息, 如果未找到, 則IE 根據codebase 去看是否有對應的控件存在; 如果還是不行, 則會一些控件注冊服務器聯系(列表在 HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\CodeBaseSearchPath 可以找到 ), 一般是 http://activex.microsoft.com/objects/ocget.dll , http://codecs.microsoft.com/isapi/ocget.dll , 然后服務器會告訴IE 從哪里去下載.
FROM : http://oreilly.com/catalog/malmobcode/chapter/ch11.html
2. ActiveX 控件是如何啟動的
創建一個控件有很多種方法
CoCreateInstance, CoGetInstanceFromFile, CoGetInstanceFromIStorage
CoCreateInstanceEx
CoGetClassObjectFromURL , CoGetClassObject
CoGetObject, DllGetClassObject 等
基本調用順序好像是
(CoGetInstanceFromFile, CoGetInstanceFromIStorage ) -> CoCreateInstance
CoCreateInstanceEx
CoGetClassObjectFromURL -> CoGetClassObject
其他沒有測試過... :9
IE 創建控件的時候會調用 CoGetClassObjectFromURL -> CoGetClassObject 的順序進行, 而不是直接調用(CoCreateInstance 或者 CoCreateInstanceEx) , 但是免不了控件會自己調用 CoCreateInstanceEx, 比如Real 控件在創建的時候會調用Dx 的組件等.