Com 什么是;方法'~';对象的'~';“失败”;在运行时意味着什么?
我试图在我的桌面上运行一个遗留的VB6应用程序(它没有用户界面,是一个命令行应用程序),当我运行时,我会收到一个消息框,上面说Com 什么是;方法'~';对象的'~';“失败”;在运行时意味着什么?,com,vb6,Com,Vb6,我试图在我的桌面上运行一个遗留的VB6应用程序(它没有用户界面,是一个命令行应用程序),当我运行时,我会收到一个消息框,上面说 Run-time error '4099': Method '~' of object '~' failed 这对我来说毫无意义;有人知道出了什么问题吗?如果支持库(DLL或OCX)注册不正确,或者安装的库的版本与应用程序最初编译时使用的版本不同(且不兼容),则可能会发生这种情况 确保所有相关库都已注册且版本正确 您可能需要重新编译应用程序,使其与支持库的较新版本一
Run-time error '4099':
Method '~' of object '~' failed
这对我来说毫无意义;有人知道出了什么问题吗?如果支持库(DLL或OCX)注册不正确,或者安装的库的版本与应用程序最初编译时使用的版本不同(且不兼容),则可能会发生这种情况 确保所有相关库都已注册且版本正确
您可能需要重新编译应用程序,使其与支持库的较新版本一起工作。我有VB6 SP6,可以重现此行为。在新项目中,将此代码放入表单中。项目使用F5正常运行。在项目上单击鼠标右键,然后选择“发布”,然后选择“生成输出”。这将生成错误消息
Option Explicit
Public Sub Init()
Dim blnErrorHandling As Boolean
If False Then
blnErrorHandling = True
Else
blnErrorHandling = False
End Sub
现在注释掉最后四行:
Option Explicit
Public Sub Init()
Dim blnErrorHandling As Boolean
' If False Then
' blnErrorHandling = True
' Else
' blnErrorHandling = False
End Sub
您不再得到错误,输出正常生成。我很快添加了一些错误处理来定位崩溃的来源,如果为False,则
是完全有效的。MDAC检查器说一切正常,重新启动并不能解决问题。另一个原因可能是使用自动化时,Office的一些小版本不匹配:
我有一个遗留的VB5+Access应用程序(我正在用Delphi重写它,并用干净的OpenDocument生成替换所有的自动化混乱),它在一些系统上运行良好,在其他系统上出现错误
生成Excel电子表格时会发生此错误,并且看起来无害(除了烦恼,因为它会显示用户在中间单击“中止”的风险的十几倍),好像总是单击“忽略”一切都按预期工作
我最终发现原因是Office 97的安装方式:
如果Office 97安装顺序为:
- Office 97 SR0安装光盘
- 应用SR1修补程序
- 应用SR2补丁
但如果安装了以下部件,则不会:
- Office 97 SR1安装光盘
- 应用SR2补丁
在受影响的系统上使用SR1安装程序进行卸载/重新安装解决了问题。当Visual Basic 6应用程序进行COM接口调用并引发异常(即返回故障HRESULT
)时,会出现此消息。在这种情况下,VB6跳转到异常处理程序(由错误时的设置)。在异常处理程序中,有一个可见的对象Err
,其中包含异常的详细信息
如果对象实现了ISupportErrorInfo
,并且它确实支持错误信息,并且设置了错误信息,那么Err.Description
将获取对象设置的错误信息中的字符串。否则,Err.Description
采用~failed
的字符串Method~
IDK其他版本的VB是否做同样的事情;或者,除了我刚才描述的场景外,该消息还设置在其他场景中。我曾经遇到过这个问题
我寻找答案,这个网页是搜索的首选
刚才
我卸载了Office 2000工具栏
卸载了Visual Basic 6并删除了所有内容,但未删除MSDN
重新安装的Visual Basic 6
但我总是让我的剪贴板记录器程序在Visual Basic 6中运行
发现这就是错误所在
如果不运行,我就不会出错
“~”对象“~”的方法失败
启动Visual Basic 6 IDE时
使用Ctrl-F5运行剪贴板代码VB6程序后
从完整编译开始
并修复代码中的编译错误
但在加载VB6 IDE时仍然存在问题
直到我将-Option显式放入整个剪贴板代码
除了一个模块太大,无法快速完成
但特别是在类模块中
有一些未声明的变量
然后就治好了
这是我个人的解决方案,也是我对这个Web日志的贡献
这里有一个额外的更新和编辑
在阅读了本主题的三条线索之后
其中一个是关于剪贴板的
我又在测试中发现了这个Bug
因为这是我的剪贴板代码
我对VB6 IDE在加载时使用剪贴板感到恼火,尤其是当
将剪贴板带入代码
我让代码截取VB6 IDE加载的位图
把以前的东西放回去
现在,我必须在代码中更加考虑问题,等待启动屏幕以“Findwindow”结束
我想我现在解决了
我有一个专业编写的剪贴板源代码,我认为使用API
我找到了,但还没有使用
在我的代码中,我不得不搜索,这似乎是一种痛苦
For i = -30000 To 32000
i2 = Clipboard.GetFormat(i)
Next
检验是否为假
对于窗体设计器中已删除对象的剪贴板
这样他们就不会瘫痪或干扰我的代码程序
我的剪贴板程序代码是我一直运行的唯一持久程序
用于从Internet页面获取剪贴簿
它还拍摄/记录截图的图片、位图以及存储在日期和时间文件中的内容
我希望我知道更多关于如何获得拖放信息
希望这有帮助
2015年8月14日上午8点至9点对于作为命令行应用程序运行的VB6程序,编译后需要额外的阶段:需要在可执行文件上运行VB6链接器,以将其设置为控制台程序:
<VB6 dir>\LINK.EXE /EDIT /SUBSYSTEM:CONSOLE <program>.exe
\LINK.EXE/EDIT/SUBSYSTEM:CONSOLE.EXE
如果不这样做,则在程序运行时,对象~'的
方法~'将失败
错误。根据我的经验,这是由于Microsoft Access版本造成的
我的程序是在MS Office 2007中开发的,并安装了更新版本的MS Office。这就是出现此错误的原因。在VB6 IDE中,转到工具->选项