我寫的程式中用了一個微軟自帶的日歷控制元件,在當前機器上運行正常,可是換了臺其他機器后就報錯"error accessing external object property at line5......",我看報錯情況應該是我用的控制元件的問題,請問有哪位朋友碰見過這樣的問題,怎么解決呢?還有個類似的問題,我把這個程式編譯后,放到其他機器上運行的時候,發現日歷控制元件的部位是一個空白,不能顯示日歷,估計也是日歷控制元件的問題,請問如何解決這個問題呢,有哪位碰到過這樣的問題?
uj5u.com熱心網友回復:
是ocx需要注冊 ,在新的機器上注冊一下試試 ,不過我忘記那個ocx叫什么了uj5u.com熱心網友回復:
OCX 是需要注冊的,可能是找不到該控制元件。uj5u.com熱心網友回復:
將那個OCX控制元件的檔案隨程式一起打包,在第一處使用OCX控制元件的地方使用try...來捕捉例外并自行注冊OCX控制元件。注冊方法有很多,需要注冊表和regsvr32.
uj5u.com熱心網友回復:
謝謝各位樓上的熱情解答,我試一下啊,謝謝!!!uj5u.com熱心網友回復:
在PB程式中實作,這樣安裝程式只需負責將OCX拷貝到相應路徑下,這個路徑PB程式必須可以得到,建議拷貝到Windows系統目錄或者與執行檔案同目錄下。
具體代碼:
//首先定義API函式,如果OCX控制元件在與執行檔案同目錄下,使用GetCurrentDirectory函式;如果OCX控制元件放在系統目錄下,使用GetSystemDirectory函式。
Function ulong GetCurrentDirectory(ulong nBufferLength,ref string lpBuffer) Library "kernel32.dll" Alias for "GetCurrentDirectoryA"
Function uint GetSystemDirectory(ref string lpBuffer,uint uSize) Library "kernel32.dll" Alias for "GetSystemDirectoryA"
//在PB應用(Application)的Open事件,假設OCX檔案在Windows系統目錄下。
string ls_PathName,ls_Command
ulong ll_RequiredBufferSize
ls_PathName = Space(255)
ll_RequiredBufferSize = GetSystemDirectory(ls_PathName,255)
IF ll_RequiredBufferSize=0 or ll_RequiredBufferSize>255 THEN
//報錯資訊
else
ls_Command = "Regsvr32 /s " + "~"" + ls_PathName + "\Myocx.ocx" + "~""
Run (ls_Command)
…
End if
Regsvr32后面的"/s"執行引數是為了隱藏注冊成功訊息框。
照著做了,可是程式還是頑強的報錯,暈了!!!
uj5u.com熱心網友回復:
OCX 是需要注冊的,注冊后重啟下電腦試試,還有就是編譯的時候不要編譯成機器碼。pb編譯的機器碼總是不是很穩定uj5u.com熱心網友回復:
ㄋㄑㄎuj5u.com熱心網友回復:
試一下手工注冊mscal.ocx控制元件,先將控制元件檔案mscal.ocx拷到系統的system32目錄下regsvr32 %SystemRoot%\system32\MSCAL.OCX /
如果日歷控制元件的部位是一個空白,不能顯示日歷,好么可以解除控制元件的注冊,再注冊一次試試
regsvr32 %SystemRoot%\system32\MSCAL.OCX /u
regsvr32 %SystemRoot%\system32\MSCAL.OCX
uj5u.com熱心網友回復:
如果要做發布程式,最好在打包時,直接將控制元件注冊上
uj5u.com熱心網友回復:
控制元件的相關檔案是:mscomct2.ocx ~轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/99401.html
標籤:控件與界面
