我做了一個VB程式,包括了以下五個API宣告
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function PlgBlt Lib "gdi32" (ByVal hdcDest As Long, lpPoint As POINTAPI, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long) As Long
然后我把做好的用本機編碼譯成exe檔案發給另外一個人A,A打開后會彈出
“Unexpected error”的對話框
然后我又編譯成P代碼發給他,效果是一樣的
于是我做了一個空程式(進入form1,什么都沒有做,直接變成exe發給A),A可以正常運行
然后我又發給B,C,D,E,其中B,C,D都是和A同樣的問題,打不開,直接彈出Unexpected error”對話框然后退出
但是E可以正常打開,而且他的電腦上有這些東西

于是我就推斷A,B,C,D打不開的原因是沒有安裝相應的環境
這就是大概的情況
我的問題是:
1.“Unexpected error” 無法打開是不是因為他們沒有安裝庫的問題?
2.A,B,C,D不想安裝VB來安裝庫,有沒有直接安裝庫的東西可以讓他們能夠正常運行?(最好有鏈接~)
O(∩_∩)O謝謝大家了!
uj5u.com熱心網友回復:
拜托大家幫我解決一下啦謝謝!uj5u.com熱心網友回復:
http://www.dllzj.comuj5u.com熱心網友回復:
用depends.exe查看exe和dll依賴的其它dll及其版本號。uj5u.com熱心網友回復:
這應該根本不是什么“庫”的問題,VB6的程式,“理論上”只依賴MSVBVM60.dll ,這個檔案,目前各個版本的Windows系統中都是帶上它的(包括絕大多數的PE工具系統,因為檔案才1.3M多點)。
“別人的電腦”基本上不用安裝什么東西,就能正常運行。
當然,如果你的程式中用了“第三方控制元件”(也就是“標準控制元件”之外的其它控制元件,但控制元件代碼在工程內的除外),
或參考了第三方的dll庫,你就要注意:這是出自微軟的?還是“真正的第三方”提供的。
如果不是微軟的東西,必須把相應的.ocx或dll檔案帶上(部分出自微軟的也得帶上,比如MSCOMCTL.OCX等)。
簡單的方法,就是把.exe和.ocx“放在相同檔案夾中”,
“別人的電腦”上運行時,第一次要“以管理員身份運行”,這樣ocx檔案會自動被注冊。
但ActiveX DLL不行,不能被自動注冊的,你可以在“程式入口”處用代碼通過regsvr32進行注冊。
這種一般要從Sub Main啟動程式。
如果直接從表單啟動、并且你的Form_Load() 中直接用到了“第三方物件”,表單都不能加載,程式自然也咔嚓了。
如果你的程式只用到了標準控制元件,和上面提到的那幾個API,
可以明確的說:你的“程式錯誤”是你的程式設計問題,
那幾個API都是系統的“基本DLL庫”中的,檔案肯定不會缺少,錯誤原因絕不是“庫”的問題。
uj5u.com熱心網友回復:
在64位Windows下:64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
uj5u.com熱心網友回復:
是的,我改成了Sub Main啟動 現在這個問題沒有了,但是出現 RUNTIME ERROR 50003,請問又是怎么回事呢
uj5u.com熱心網友回復:
他們電腦上確實有MSVBVM60.dll 并且已經注冊了 我改成SUB MAIN啟動,然后這個彈框就解決了,但是又出現 runtime error 50003這個新的情況,請問又是什么問題呢?
uj5u.com熱心網友回復:
在目標機上安裝VB6,在VB6 IDE中運行exe對應的源代碼,出錯時點除錯,游標會停在出錯的VB6源代碼行,此時可以在立即視窗中使用
?變數名
顯示相關變數的值
使用
程序名 引數串列
立即呼叫程序
或使用
?函式名(引數串列)
立即呼叫函式
uj5u.com熱心網友回復:
這應該根本不是什么“庫”的問題,VB6的程式,“理論上”只依賴MSVBVM60.dll ,
這個檔案,目前各個版本的Windows系統中都是帶上它的(包括絕大多數的PE工具系統,因為檔案才1.3M多點)。
“別人的電腦”基本上不用安裝什么東西,就能正常運行。
當然,如果你的程式中用了“第三方控制元件”(也就是“標準控制元件”之外的其它控制元件,但控制元件代碼在工程內的除外),
或參考了第三方的dll庫,你就要注意:這是出自微軟的?還是“真正的第三方”提供的。
如果不是微軟的東西,必須把相應的.ocx或dll檔案帶上(部分出自微軟的也得帶上,比如MSCOMCTL.OCX等)。
簡單的方法,就是把.exe和.ocx“放在相同檔案夾中”,
“別人的電腦”上運行時,第一次要“以管理員身份運行”,這樣ocx檔案會自動被注冊。
但ActiveX DLL不行,不能被自動注冊的,你可以在“程式入口”處用代碼通過regsvr32進行注冊。
這種一般要從Sub Main啟動程式。
如果直接從表單啟動、并且你的Form_Load() 中直接用到了“第三方物件”,表單都不能加載,程式自然也咔嚓了。
如果你的程式只用到了標準控制元件,和上面提到的那幾個API,
可以明確的說:你的“程式錯誤”是你的程式設計問題,
那幾個API都是系統的“基本DLL庫”中的,檔案肯定不會缺少,錯誤原因絕不是“庫”的問題。
是的,我改成了Sub Main啟動 現在這個問題沒有了,但是出現 RUNTIME ERROR 50003,請問又是怎么回事呢
我查了一下,根本沒有 代碼為“50003”的運行時錯誤資訊。

你把例外錯誤訊息的文本內容貼出來,或者截圖貼出來。
自己仔細分析一下你的代碼,
有必要進行例外捕獲的地方,自己用 On Error Goto設定一下“錯誤陷阱”處理一下!
別老是濫用 On Error Resume Next 。
沒有代碼,別人根本不可能直接指明錯誤原因,我們不是神仙!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/68550.html
標籤:API
上一篇:誰有vc6.0匯入word2003生成的那兩個檔案,msword。h。cpp,能共享一下嗎
下一篇:Excel ping網址的問題。
