俺建個工程 1又搞了個 activex 控件的工程 加進去所以就有了個工程組了 vbg 文件但我發現不能 發布就又將 控件工程 發布 默認就是 ocx 文件我又在原工程1中 將這個 ocx 作為部件加進來 于是 我發布 工程1本機是正常的我將生成的exe復制到其他電腦上點擊運行 無反應 也沒有 錯誤提示 只是鼠標閃了下用package 發布 再安裝 還是沒用 用wise 沒用用setup factory 沒用索性在此機上 安裝vb6 打開工程文件 vbp重新 發布 有用發到 原來電腦 沒用安裝包 沒用 去掉 ocx 和 引用它的 窗體 有用 請問各位大蝦 幫幫俺吧
熱心網友
你的控件沒有在用戶機器上注冊! 使用ActiveX控件可快速實現小型的組件重用、代碼共享,從而提高編程效率,降低開發成本。但是ActiveX控件對于最終用戶并不能直接使用,因為ActiveX控件必須先在Windows中注冊。注冊ActiveX控件一般來說有六種途徑,它們有各自的優點,運用范圍也不同。 Regsvr32。exe注冊 Regsvr32。exe位于Windows目錄的system子目錄下。點擊Windows的“開始→運行”菜單,在對話框中輸入以下命令: regsvr32 netshare。ocx &&注冊netshare。ocx控件 regsvr32 /u netshare。ocx &&解除netshare。ocx控件的注冊 如果netshare。ocx文件不在system目錄時,還必須在文件名前加上完整的路徑。除了regsvr32應用程序之外,Microsoft在它的Web站點上還提供了一個稱為regclean。exe的程序,可以檢查注冊表并去掉丟失的組件在注冊表中的條目。regclean。exe除了可以刪除“懸掛”的條目,它還提供一個“undo”文件幫助恢復錯誤的刪除。 臥龍傳說提醒:用regsvr32。exe注冊ActiveX控件雖然簡單,但需要用戶手工進行注冊,在不用時還需手工解除注冊?! FP環境注冊 在我們進行程序設計時,VFP本身提供一個注冊ActiveX控件的方法。 進入VFP環境,選擇“工具→選項”菜單,點擊“控件”頁,選中“ActiveX控件”單選按鈕,在列表框里顯示所有已經注冊的ActiveX控件,這時,點擊右邊的“添加”按鈕,選擇需要注冊的ActiveX控件文件,“確定”后完成注冊。也可以在表單設計器的表單控件工具欄里拖動“OLE”按鈕到表單,在彈出的選擇框里選中“插入控件”單選鈕,同樣點擊右邊的“添加控件”按鈕,來完成新控件的注冊?! ∨P龍傳說提醒:本方法僅適合程序員在設計程序過程中手工進行,對用戶而言,并沒有實現在本地機上自動注冊。 安裝程序注冊 大型應用軟件一般都有一個安裝程序,在安裝程序中解決ActiveX控件的注冊是較為理想的一種方案?! ≡谟脩魣绦邪惭b程序時,這些ActiveX控件將自動在用戶機器上安裝并注冊。 VFP7。0光盤所帶的InstallShield是目前較為流行的制作安裝程序的工具,使用它可以制作出專業級的Setup安裝程序,還可以注冊應用程序使用到的ActiveX控件。而且,在以后使用控制面板的“添加/刪除程序”卸載該軟件時,安裝程序會自動注銷掉以前注冊的ActiveX控件。 加入代碼注冊 首先,定義一個注冊控件的函數: Function MyRegsvr ( lpcRegFilename, lplIsreg ) If File(lpcRegFilename) lpcRegFilename = iif(llisreg, lpcRegFilename, [ /u ] + lpcRegFilename) Run /n regsvr32 &&lpcRegFilename Endif Return Endfunc 然后就可以通過以下語句來調用該函數,并完成ActiveX控件的注冊了(臥龍傳說提醒:一定要注意控件文件的路徑哦)?! ? MyRegsvr( "netshare。ocx", 。T。) &&注冊netshare。ocx控件 = MyRegsvr( "netshare。ocx", 。F。) &&解除netshare。ocx控件的注冊 注冊函數注冊 上面提到運行regsvr32。exe應用程序將彈出注冊是否成功的對話框,注意看內容“DllRegisterServer in netshare。ocx succeeded”或“UnDllregisterServer。。?!保鋵崳ǔC總€可用的ActiveX控件都有DllRegisterServer、UnDllregisterServer這兩個自注冊函數包含在其中,我們可以用定義API函數的方法(Declare in 。。。 )來定義它,然后直接使用該函數來進行注冊和反注冊。 同樣,我們先自定義一個注冊函數(臥龍傳說提醒:請注意DllRegisterServer、UnDllregisterServer的大小寫): Function DllRegister (lpLibFileName,isReg) isReg = iif(type("isReg")="U", 。T。, isReg) lpProcName = iif(isReg, "DllRegisterServer", "DllUnregisterServer" ) Declare INTEGER (lpProcName) in (lpLibFileName) return &&lpProcName。() Endfunc 然后,就可以通過該函數來完成ActiveX控件的注冊了。 = DllRegister( "netshare。ocx", 。T。) &&注冊,返回0表示成功 = DllRegister( "netshare。ocx", 。F。) &&注銷,返回0表示成功 Clear Dlls 試試,是不是沒有了彈出框的煩惱! 臥龍傳說提醒:該方法沒有對ActiveX控件文件的驗證,假如該控件沒有有效的DllRegisterServer功能(即不具有自注冊功能),也就找不到以上的兩個API函數,照樣會有錯誤信息彈出。 API函數注冊 此方法的設計思路是:先將ActiveX控件載入內存,然后驗證其有效性,最后直接在內存地址中執行其注冊函數(DllRegisterServer、UnDllregisterServer)。其編程方法是: 1、使用Windows API函數LoadLibrary載入ActiveX控件; 2、使用GetProcAddress函數獲取ActiveX控件中注冊函數DllRegisterServer(注銷函數為DllUnregisterserver)指針; 3、使用CallWindowProc函數執行已載入內存的ActiveX控件注冊函數(DllRegisterServer、UnDllregisterServer)?! ∩厦嫠龅腁ctiveX控件注冊方法各有特點。經實際使用,效果良好。您可根據實際情況靈活選用。 。