日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【原】关于ActiveX插件小项目总结

發布時間:2024/4/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【原】关于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中如下調用

<object?id="CheckClientConfig"?classid="clsid:6BE98CB0-EA85-4bcb-B1FD-5FF0130DEB48"?codebase="bin\SelfDiagnoseActiveX.dll">
????????
<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方法?
于是我在組件中寫了如下方法,手動調用

public?void?CloseControl()
{
??????
this.Dispose();
}


然而在HTML中調用又出了問題,在button中直接寫在onclick事件中是可以的

<input?type="button"?value="釋放"?onclick="CheckClientConfig.CloseControl();"?/>

先點擊釋放了組件再關閉頁面是有效的,但是總不能讓客戶每次關瀏覽器都要先點下button吧,這是不現實的

然后經過網上查找,找到了如下方法
用javascript重新定義 window.onbeforeunload()? 事件

function??window.onbeforeunload()??
{???????
???CheckClientConfig.CloseControl();
}

這個方法很好,無論是直接“ALT+F4”關閉,還是直接點右上角的關閉按鈕,都能捕捉到。(這個問題是我一直想解決的,終于被我找到了,嘿嘿)

然而,直接這樣調用JS會報CheckClientConfig未定義的錯誤,和直接寫在button中不一樣,這里會報錯,報著試試看的心里測試了下如下代碼

function??window.onbeforeunload()??
{??
???
var?obj?=?window.document.getElementById("CheckClientConfig");
???
if?(obj)
???
{????????
??????obj.CloseControl();
???}

}


居然成功了,不可思議,如果哪位老大知道什么原因,請指教一二。

最后功能實現,嘿嘿

轉載于:https://www.cnblogs.com/treeyh/archive/2007/12/28/1018409.html

總結

以上是生活随笔為你收集整理的【原】关于ActiveX插件小项目总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。