在用VB程式設計中使用第三方控件,必須使程式能夠在系統目錄或程式目錄下找到所使用的第三方控件。通常有兩種方法:一是把控制和程式製成一個壓縮包發行,這樣的缺點是有可能導致在程式傳播過程中遺失控製檔。二是製作安裝程序,缺點是製作過程煩瑣。本文講述了將第三方控制項以自訂資源檔案方式保存在程式中,程式在執行後使用控制項之前將所使用的控制項產生到該程式目錄下,完成控制項從執行檔中的金蟬脫殼。
具體做法如下:
第一步:將要用到的控件拷貝到目前工程目錄下,右鍵點選該控件,選擇屬性,記下檔案大小。注意,應記下以位元組為單位的具體數字,而不是多少K,以備程式使用。
第二步:引用並正常使用該控制項。
步驟三:新資源檔案加入工程,在資源檔案編輯器中新增所使用的第三方控制項為自訂資源(CUSTOM),資源號碼使用預設的101。如果使用了多個控制項則分別加入資源檔案的101、102......資源項中,脫殼程式碼也要作對應的修改。
第四步:編寫控制項脫殼程式碼,使其讀取資源檔案的數據,在程式目前目錄下產生控制項。
程式碼如下:
Private Const OCXSIZE = 57344 '欲產生的控制項大小是57344Byte,名字為CoolToolBar.ocx
Sub Main()
Dim Ocx() As Byte 'OCX是個Btye類型的陣列
Dim Counter As Long
Ocx = LoadResData(101, CUSTOM) '將自訂資源中101號資源讀入數組OCX
'注意,微軟的幫助中對載入自訂資源的說明有錯誤,自訂資源標識為CUSTOM而不是幫助所說的數字10
If Right(App.Path, 1) = ($%$43%^#ASD#2@$#f$%^) Then '讀取程式所在路徑,判斷是否為根目錄並分別處理
'程式在根目錄下
If Dir(App.Path & CoolToolBar.ocx) = Then '程式路徑下有無控件,無則生成控件
'以二進位方式寫入(產生)控制項(CoolToolBar.ocx)到主程式所在的目錄
Open App.Path & CoolToolBar.ocx For Binary As #1
For Counter = 0 To OCXSIZE - 1 '注意因為從0 Byte開始因此以檔案大小- 1Byte 為終值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
Else
'程式不在根目錄下
If Dir(App.Path & /CoolToolBar.ocx) = Then '程式路徑下有無控件,無則生成控件
'以二進位方式寫入(產生)控制項(CoolToolBar.ocx)到主程式所在的目錄
Open App.Path & /CoolToolBar.ocx For Binary As #1
For Counter = 0 To OCXSIZE - 1 '注意因為從0 Byte開始因此以檔案大小- 1Byte 為終值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
End if
Form1.Visible = True '主程式所用控制項已生成,顯示主窗體,進入主程式。
End Sub
注意:將上述程式碼作為一個模組加入工程中,並在工程-工程屬性設定中將啟動物件選為Sub Main,即上面的脫殼程式碼。然後編譯產生EXE檔案,將該EXE檔案拷貝到其他沒有安裝所用控制的電腦上執行一下看看是否實作了控制攜帶之金蟬脫殼。