【原】关于ActiveX插件小项目总结
?
???? 由于項目需要檢測客戶端的硬件和網速配置,因此要寫個ActiveX插件,首先感謝紅馬天下的文章《用C#編寫ActiveX控件》給我的幫助。
?經過大家努力,最后實現效果如下:
?1、建立ActiveX組件項目是通過VS建立window控件庫項目來建的;
?2、項目屬性中的“生成”選項卡要把為COM Interop注冊選框勾選;
?3、“AssemblyInfo.cs”文件中的“[assembly: ComVisible(false)]”要設為true;
?4、在控件類上要注明GUID,方便以后object中classid的調用
[Guid("6BE98CB0-EA85-4bcb-B1FD-5FF0130DEB48")]
public?partial?class?DiagnoseDataList?:?UserControl
{
}
生成的dll放入web項目bin目錄
在HTML中如下調用
????????<param?name="BrowserVersion"?id="BrowserVersion"?value="<%=this.GetBrowserVersion()?%>"?/>
????????<param?name="MajorVersion"?id="MajorVersion"?value="<%=this.GetBrowserMajorVersion()?%>"?/>
????????<param?name="BrowserVersionType"?id="BrowserVersionType"?value="<%=this.GetBrowserVersionType()?%>"?/>
????????<param?name="WebServiceUrl"?id="WebServiceUrl"?value="<%=this.GetWebServiceUrl()?%>"?/>
????????<param?name="DownLoadFile"?id="DownLoadFile"?value="<%=this.GetDownLoadFile()?%>"?/>
????????<param?name="UpLoadFile"?id="UpLoadFile"?value="<%=this.GetUplLoadFile()?%>"?/>
????????<param?name="SiteID"?id="SiteID"?value="<%=this.GetSiteID()?%>"?/>
????????<param?name="LanguageXML"?id="LanguageXML"?value="<%=this.GetActiveLanguage()?%>"?/>
????</object>
通過param把相關的屬性傳入object組件
但是發布后出現了問題,每當關閉瀏覽器,都會不斷彈出如下對話框
而且經測試,彈出次數與組件內控件的數量成正比。
網上查找后,有文章說是由于ActiveX組件資源未釋放,然后給出如下代碼
protected?override?void?Dispose(bool?disposing)????????{
????????????if?(disposing?&&?(components?!=?null))
????????????{
????????????????components.Dispose();
????????????}
????????????base.Dispose(disposing);
????????}
但是這代碼是在創建的時候自動生成的,應該不會有問題啊。
我突然想到,難道頁面關閉未觸發Dispose方法?
于是我在組件中寫了如下方法,手動調用
{
??????this.Dispose();
}
然而在HTML中調用又出了問題,在button中直接寫在onclick事件中是可以的
先點擊釋放了組件再關閉頁面是有效的,但是總不能讓客戶每次關瀏覽器都要先點下button吧,這是不現實的
然后經過網上查找,找到了如下方法
用javascript重新定義 window.onbeforeunload()? 事件
{???????
???CheckClientConfig.CloseControl();
}
這個方法很好,無論是直接“ALT+F4”關閉,還是直接點右上角的關閉按鈕,都能捕捉到。(這個問題是我一直想解決的,終于被我找到了,嘿嘿)
然而,直接這樣調用JS會報CheckClientConfig未定義的錯誤,和直接寫在button中不一樣,這里會報錯,報著試試看的心里測試了下如下代碼
{??
???var?obj?=?window.document.getElementById("CheckClientConfig");
???if?(obj)
???{????????
??????obj.CloseControl();
???}
}
居然成功了,不可思議,如果哪位老大知道什么原因,請指教一二。
最后功能實現,嘿嘿
轉載于:https://www.cnblogs.com/treeyh/archive/2007/12/28/1018409.html
總結
以上是生活随笔為你收集整理的【原】关于ActiveX插件小项目总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Grid++Report问题集!
- 下一篇: CCIE学习(34)—— EIGRP配置