“方法'〜'对象'〜'失败”是什么意思?

时间:2009-08-19 19:07:33

标签: com vb6

我正在尝试在我的桌面上运行遗留的VB6应用程序(它没有用户界面,是一个命令行应用程序),当我这样做时,我收到一个消息框说

Run-time error '4099':

Method '~' of object '~' failed

这对我来说毫无意义;有没有人知道出了什么问题?

8 个答案:

答案 0 :(得分:16)

当支持库(dll或ocxs)未正确注册或已安装库的版本与最初编译应用程序的版本不同(且不兼容)时,可能会发生这种情况。

确保已注册所有依赖库并使用正确的版本。

您可能需要重新编译应用程序才能使其与更新版本的支持库一起使用。

答案 1 :(得分:7)

当Visual Basic 6应用程序进行抛出异常的COM接口调用(即返回失败HRESULT)时,会出现此消息。在这种情况下,VB6跳转到异常处理程序(由On Error设置)。在异常处理程序中,可见一个对象Err,其中包含异常的详细信息。

如果对象实现ISupportErrorInfo,并且它确实支持错误信息,并且确实设置了错误信息,那么Err.Description将获取对象设置的错误信息中的字符串。否则,Err.Description将使用字符串Method ~ of ~ failed

IDK是否其他版本的VB做同样的事情;或者如果除了我刚才描述的那个场景之外的其他场景中也设置了消息。

答案 2 :(得分:2)

我有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

您不再收到错误,输出正常构建。我正在快速添加一些错误处理以找到崩溃的来源,If False Then完全有效。 MDAC检查器说一切正常,重启并没有解决问题。

答案 3 :(得分:2)

另一个原因可能是使用自动化,Office的一些次要版本不匹配:

我有一个遗留的VB5 + Access应用程序(我正在使用Delphi重写过程并用干净的OpenDocument代替所有自动化程序),这些应用程序在某些系统上运行良好并且在其他系统上给出错误。

生成Excel电子表格时会发生此错误,并且似乎无害(除了烦恼,因为它会显示十几次用户点击中间“中止”的风险),好像总是点击“忽略”所有工作的一样预期

我最终发现原因是Office 97的安装方式:

如果Office 97安装程序序列为:

,则会显示错误
  • Office 97 SR0安装CD
  • 应用SR1补丁
  • 应用SR2补丁

但如果安装时没有:

  • Office 97 SR1安装CD
  • 应用SR2补丁

在受影响的系统上使用SR1设置进行卸载/重新安装解决了这个问题。

答案 4 :(得分:0)

对于作为命令行应用程序运行的VB6程序,编译后需要一个额外的阶段:需要在可执行文件上运行VB6链接器以将其设置为控制台程序:

<VB6 dir>\LINK.EXE  /EDIT  /SUBSYSTEM:CONSOLE  <program>.exe

如果不这样做,将在程序运行时出现Method '~' of object '~' failed错误。

答案 5 :(得分:0)

根据我的经验,这是由于Microsoft Access版本。

我的程序是在MS Office 2007中制作的,并安装了较新版本的MS Office。这就是为什么会出现这个错误。

答案 6 :(得分:0)

在VB6 IDE中,转到“工具”->“选项”->“编辑器”,然后清除“拖放文本编辑”功能

感谢马修,尽管我对您的问题还不完全了解,但您还是为我指明了正确的方向

我有一个旧的VB6项目需要重做,现在在重新注册所有.ocx文件后,通常可以在Windows 10上编辑和重新编译OK。我通过“属性”->“高级”->“以管理员身份运行”

通过快捷方式运行VB6

此错误持续存在,每次启动VB6 IDE时都会弹出

在阅读Matthews的帖子后,我清除了“拖放文本编辑”功能

关闭,重新启动VB6,错误消失

重新启用了拖放操作,但仍然没有错误

(仍然存在“找不到自动化元素”错误)

答案 7 :(得分:-4)

我有这个问题了。

我找了一个答案,这个网页是搜索的顶部。

片刻之前。

我卸载了Office 2000工具栏

卸载Visual Basic 6并删除所有但不是MSDN

重新安装Visual Basic 6

但我总是在Visual Basic 6中运行我的剪贴板记录程序

并发现那是错误

没有那个跑步我没有得到错误

方法“〜”对象“〜”失败

启动Visual Basic 6 IDE时

使用Ctrl F5运行剪贴板代码VB6程序后

从完全编译开始

并解决了代码中的编译错误

但仍有问题加载VB6 IDE

直到我放 - 通过整个剪贴板代码明确选项

除了一个太大而无法快速完成的模块

但特别是在课程模块中

有一些未申报的变量

然后那就治好了

这是我的个人解决方案和对此Web日志的贡献

其他更新并在此处编辑

阅读本主题的3个主题后 关于剪贴板的其中一个 https://stackoverflow.com/a/8577499/5226365

我发现了Bug Again Again Again

这是我的剪贴板代码

我在VB6 IDE中使用剪贴板时非常恼火 将剪贴板载入代码

我使代码拦截了VB6 IDE加载位图 然后把那里的东西放回去

现在我必须在我的代码中更加注意并等待启动画面完成“Findwindow”

我想我现在解决了这个问题

我有一个专业编写的ClipBoard源代码,我认为使用API​​

我蹲下并且尚未使用

我的代码中似乎有一种痛苦,我必须搜索

For i = -30000 To 32000
    i2 =  Clipboard.GetFormat(i)
Next

测试是否错误

对于表单设计器中的ClipBoard-ed对象

因此,他们不会被削弱或干扰我的代码计划

我的ClipBoard程序代码是我永远运行的唯一持久程序

来自互联网页面的ClipBoards

它采取/记录剪辑的图片BitMaps的截图和东西存储在日期和时间文件

我希望我知道更多关于如何拖放信息

希望这有助于

2015年8月14日上午8点至9点