B/S結(jié)構(gòu)中,用戶需要通過外設(shè)讀入數(shù)據(jù),外設(shè)一般是帶有驅(qū)動程序和編程接口的,在C/S結(jié)構(gòu)中客戶端很容易實(shí)現(xiàn)用VB等語言調(diào)用外設(shè)編程接口,而在B/S結(jié)構(gòu)中只有用Vb等語言編寫ActiveX控件來調(diào)用接口然后驅(qū)動設(shè)備了。下面記錄我使用VB做的一個簡單例子。
1. ActiveX控件編寫
使用VB創(chuàng)建一個"ActiveX控件"空項目,然后設(shè)計簡單界面,比如添加按鈕。再自定義自己的事件,來模擬數(shù)據(jù)讀完后自動通知IE。代碼如下:
Dim m_IC_ID As String 'IC編號
'事件聲明
Event ReadICCompleted()
'獲取IC編號
Public Property Get IC_ID() As String
IC_ID = m_IC_ID
End Property
'修改IC編號
Public Property Let IC_ID(ByVal new_IC_ID As String)
m_IC_ID = new_IC_ID
PropertyChanged "IC_ID"
End Property
Private Sub Command1_Click()
IC_ID = Text1.Text
RaiseEvent ReadICCompleted '激活事件
End Sub
2. 控件的打包
使用VB自帶的打包工具,打成Internet使用的,過程中會提示控件依賴的運(yùn)行時和Dll從何處獲取,建議能從微軟網(wǎng)站獲取的就不要打到自己的包中,太大了下載太慢了。最終工具會生成一個例子HTM,里面的classesid是有用的。
3.IE中控件使用
我的HTM頁面內(nèi)容如下:
<HTML>
<HEAD>
<TITLE>WebClient.CAB</TITLE>
</HEAD>
<BODY>
<!-- 如果這頁上的任何控件需要授權(quán),您必須
創(chuàng)建一個授權(quán)包文件。 運(yùn)行 LPK_TOOL.EXE 來創(chuàng)建
要求的 LPK 文件。 LPK_TOOL.EXE 將從 ActiveX SDK 中找到,
http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual
Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目錄下找到它。 下面是對象標(biāo)記的例子:
<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->
<OBJECT ID="LBSClient" CLASSID="CLSID:9986EDF6-CE53-4F30-A702-EAFCCD06FC79"
CODEBASE="WebClient.CAB#version=1,0,0,8">
</OBJECT>
<br>
<input type="button" value ="Test" onclick="Test()">
</BODY>
</HTML>
<script>
function Test(){
var obj = document.getElementById("LBSClient");
alert(obj.IC_ID); //讀取控件的IC_ID屬性
}
</script>
//下面是監(jiān)聽對象“LBSClient”的 “ReadICCompleted”事件(定義見第一部中)
<SCRIPT LANGUAGE="javascript" FOR="LBSClient" EVENT="ReadICCompleted">
<!--
Test();
//-->
</SCRIPT>
4. 其他說明
我想說的是我曾經(jīng)擔(dān)心ActiveX控件是不是只能嵌入的ASP頁面中而且服務(wù)器必須是IIS,后來發(fā)現(xiàn)和環(huán)境無關(guān),只要用IE瀏覽器即可。
另外控件編譯時在工程屬性中不要選中“要求許可證關(guān)鍵字”(Require Licence Key 記不清楚英文版的了)
最后是IE安全的設(shè)置,由于沒有數(shù)字簽名所以IE默認(rèn)會阻止這樣的控件下載,可以先降低下載完控件后再恢復(fù)IE安全設(shè)置,這樣可以正常運(yùn)行你的控件了。