是否有直接安装库的程序 以便没有库的电脑能够运行我的文件?高分!

Hinchi 2016-09-13 11:30:16
我做了一个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谢谢大家了!
...全文
2867 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2016-09-13
  • 打赏
  • 举报
回复
这应该根本不是什么“库”的问题,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库”中的,文件肯定不会缺少,错误原因绝不是“库”的问题。
赵4老师 2016-09-13
  • 打赏
  • 举报
回复
用depends.exe查看exe和dll依赖的其它dll及其版本号。
赵4老师 2016-09-13
  • 打赏
  • 举报
回复
Hinchi 2016-09-13
  • 打赏
  • 举报
回复
拜托大家帮我解决一下啦谢谢!
舉杯邀明月 2016-09-13
  • 打赏
  • 举报
回复
引用 6 楼 Hinchi 的回复:
[quote=引用 4 楼 Chen8013 的回复:] 这应该根本不是什么“库”的问题,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,请问又是怎么回事呢[/quote] 我查了一下,根本没有 代码为“50003”的运行时错误信息。 你把异常错误消息的文本内容贴出来,或者截图贴出来。 自己仔细分析一下你的代码, 有必要进行异常捕获的地方,自己用 On Error Goto设置一下“错误陷阱”处理一下! 别老是滥用 On Error Resume Next 。 没有代码,别人根本不可能直接指明错误原因,我们不是神仙!!!
赵4老师 2016-09-13
  • 打赏
  • 举报
回复
引用 7 楼 Hinchi 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 在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
他们电脑上确实有MSVBVM60.dll 并且已经注册了 我改成SUB MAIN启动,然后这个弹框就解决了,但是又出现 runtime error 50003这个新的情况,请问又是什么问题呢?[/quote] 在目标机上安装VB6,在VB6 IDE中运行exe对应的源代码,出错时点调试,光标会停在出错的VB6源代码行,此时可以在立即窗口中使用 ?变量名 显示相关变量的值 使用 过程名 参数列表 立即调用过程 或使用 ?函数名(参数列表) 立即调用函数
Hinchi 2016-09-13
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
在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
他们电脑上确实有MSVBVM60.dll 并且已经注册了 我改成SUB MAIN启动,然后这个弹框就解决了,但是又出现 runtime error 50003这个新的情况,请问又是什么问题呢?
Hinchi 2016-09-13
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
这应该根本不是什么“库”的问题,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,请问又是怎么回事呢
赵4老师 2016-09-13
  • 打赏
  • 举报
回复
在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

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧