Что означает «Метод» объекта «~» не удалось? - PullRequest
29 голосов
/ 19 августа 2009

Я пытаюсь запустить устаревшее приложение VB6 на своем рабочем столе (у него нет пользовательского интерфейса, являющегося приложением командной строки), и когда я это делаю, я получаю окно с сообщением

Run-time error '4099':

Method '~' of object '~' failed

Это ничего не значит для меня; у кого-нибудь есть идеи, что происходит не так?

Ответы [ 7 ]

16 голосов
/ 19 августа 2009

Это может произойти, если вспомогательные библиотеки (dll или ocxs) не зарегистрированы должным образом или версии установленных библиотек отличаются (и несовместимы) с версией, с которой приложение было скомпилировано изначально.

Убедитесь, что все зависимые библиотеки зарегистрированы и правильная версия.

Возможно, вам придется перекомпилировать приложение, чтобы оно работало с более новыми версиями вспомогательных библиотек.

7 голосов
/ 04 сентября 2014

Это сообщение появляется, когда приложение Visual Basic 6 выполняет вызов интерфейса COM, который выдает исключение (то есть возвращает ошибку HRESULT). В этом случае VB6 переходит к обработчику исключений (как установлено On Error). В обработчике исключений виден объект Err, который содержит сведения об исключении.

Если объект реализует ISupportErrorInfo, и он действительно поддерживает информацию об ошибках, и он установил информацию об ошибках, тогда Err.Description принимает строку, которая находится в информации об ошибках, установленной объектом. В противном случае Err.Description принимает строку Method ~ of ~ failed.

IDK, делают ли другие версии VB то же самое; или если сообщение также установлено в других сценариях, кроме того, который я только что описал.

2 голосов
/ 12 июня 2012

Другая причина может быть при использовании автоматизации, небольшое несоответствие версии Office:

У меня есть устаревшее приложение VB5 + Access (которое я сейчас переписываю в Delphi и заменяю весь беспорядок в автоматизации на чистое создание OpenDocument), которое хорошо работало в некоторых системах и выдавало ошибку в других.

Эта ошибка возникла бы при создании электронной таблицы Excel и казалась безвредной (за исключением раздражения и, поскольку в десятки раз превышал бы риск нажатия пользователем «Abort» посередине), как будто всегда нажимая «Ignore», все работало как ожидается.

В конце концов я обнаружил, что причина была в том, как был установлен Office 97:

Ошибка будет отображаться, если последовательность установки Office 97 была:

  • установочный компакт-диск Office 97 SR0
  • применить патч SR1
  • применить патч SR2

но не, если он был установлен с:

  • установочный компакт-диск Office 97 SR1
  • применить патч SR2

Выполнение удаления / переустановки с настройкой SR1 на соответствующих системах решило проблему.

2 голосов
/ 06 мая 2011

У меня есть 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 показала, что все в порядке, и перезагрузка не решила проблему.

0 голосов
/ 12 декабря 2017

По моему опыту, это связано с версией Microsoft Access.

Моя программа была сделана в MS Office 2007 и установлена ​​более новая версия MS Office. Вот почему появляется эта ошибка.

0 голосов
/ 21 августа 2015

Для программы VB6, которая запускается как приложение командной строки, после компиляции требуется дополнительная стадия: на исполняемом файле необходимо запустить компоновщик VB6, чтобы установить его как консольную программу:

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

Невыполнение этого условия приведет к ошибке Method '~' of object '~' failed при запуске программы.

0 голосов
/ 14 августа 2015

У меня была эта проблема некоторое время.

Я искал ответ, и эта веб-страница была самой популярной.

Момент назад.

Я удалил панель инструментов Office 2000

Удалено Visual Basic 6 и удалено все, но не MSDN

Переустановленная Visual Basic 6

Но у меня всегда была программа для ведения журнала буфера обмена в Visual Basic 6

и обнаружил, что это ошибка

Без этого запуска я не получаю ошибку

Метод "~" объекта "~" Failed

При запуске Visual Basic 6 IDE

После запуска программы ClipB Code VB6 с помощью Ctrl F5

Начать с полной компиляции

и исправлены ошибки компиляции в коде

Но все еще с проблемой загрузки VB6 IDE

Пока я не поставлю - опция, явная через весь код буфера обмена

За исключением одного модуля, который был слишком большим для быстрого завершения

Но особенно в модуле класса

Это было несколько необъявленных переменных

и тогда это вылечило

Это мое личное решение и вклад в этот веб-журнал

Дополнительное обновление и редактирование здесь

После прочтения 3-х тем этой темы Один из здесь о буфере обмена https://stackoverflow.com/a/8577499/5226365

и я снова обнаружил ошибку, снова тестирующую

Как это мой код буфера обмена

и я был раздражен в VB6 IDE Использование буфера обмена при загрузке, особенно когда Перенос буфера обмена в код

и я сделал Code Intercept VB6 IDE Загрузка растрового изображения и положи обратно то, что было там до

Теперь я должен быть более внимательным в своем коде и дождаться окончания работы заставки с помощью «Findwindow»

Думаю, я решил это сейчас

У меня есть профессионально написанный исходный код ClipBoard, который, я думаю, использует API

что я выследил и еще не использовал

Кажется, в моем коде боль, которую я должен искать

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

для проверки, если ложно

Для объектов ClipBoard-ed в конструкторе форм

Таким образом, они не будут искалечены и не мешают работе с моим кодом

Мой код программы ClipBoard - единственная программа с продолжительным сроком действия, которую я всегда выполняю

Для ClipBoards из интернет-страниц

и принимает / записывает клипы изображений BitMap скриншотов и вещей, хранящихся в файлах даты и времени

Хотелось бы, чтобы я знал больше о том, как получить информацию о перетаскивании

Надеюсь, это поможет

2015 авг 14 8 утра 9 утра

...