Отладка плохой ошибки вызова вызова DLL

Как мне отладить неправильную ошибку соглашения о вызове DLL в коде MSAccess VBA?

Я внес некоторые изменения в функцию в модуле, а затем получил ошибку. Как отладить его, чтобы найти причину?

Ошибка в операторе Exit функции.

Ответы

Ответ 1

Я видел это в Excel раньше без каких-либо внешних ссылок. Случилось так же, как и с вашей проблемой, при вызове функции выхода. У Excel, похоже, нет опции/декомпиляции, но я исправил его, внес изменения в один из моих модулей класса, выполнив компиляцию из меню Debug, а затем отменив изменение. Я подозреваю, что по какой-то причине один из моих модулей классов неправильно скомпилирован, и Excel не будет повторно компилироваться, если он не подумает, что что-то изменилось.

Ответ 2

Вы проверили свои ссылки и декомпилировали?

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" 
                                "d:\My Documents\access\mayapp.mdb" /decompile

См. также:
http://www.granite.ab.ca/access/decompile.htm
Декомпилировать VBScript


Проверьте ссылки в коде

Dim ref As Reference
Dim sMsg As String

''Available since 2010
If BrokenReference Then
    For Each ref In References
        ''Available since at least 2000
        If ref.IsBroken Then
            sMsg = sMsg & "Ref Name: " & ref.Name
            'Also, if required
            'sMsg = sMsg & vbCrLf & "Built In: " & ref.BuiltIn
            'sMsg = sMsg & vbCrLf & "Full Path: " & ref.FullPath
            'sMsg = sMsg & vbCrLf & "GUID: " & ref.Guid
            'sMsg = sMsg & vbCrLf & "Kind: " & ref.Kind
            'sMsg = sMsg & vbCrLf & "Major (version number): " & ref.Major
            'sMsg = sMsg & vbCrLf & "Minor (version number): " & ref.Minor
            sMsg = sMsg & vbCrLf & "=================================" & vbCrLf
        End If
    Next
    MsgBox sMsg
End If

Ответ 3

Я столкнулся с этой ошибкой и использовал эту ошибку, используя библиотеку .NET для WinSCP из MS Access VBA.

Что произошло:

  • Функция UploadSomething для подключения к SFTP-серверу и загрузка файла в порядке.
  • В рамках функции UploadSomething с помощью этого кода была изменена опция "возобновить поддержку": myTransferOptions.ResumeSupport.State = TransferResumeSupportState.TransferResumeSupportState_Off

После изменения код работал по желанию. Однако в коде, который называется UploadSomething, после завершения функции была сброшена ошибка 49.

Ошибка произошла как при выполнении кода с помощью отладчика, так и при выполнении сразу за пределами отладчика. Перекомпиляция проекта для меня не работала.

Что это за работа:

  • Удалить ссылку на компонент COM
  • Добавить ссылку на компонент COM
  • Рекомпилированные

Ответ 4

В Excel VBA это может быть вызвано любой из следующих проблем:

  • Несоответствие типа параметра или возвращаемого значения.
  • Объектный метод (например, AutoFit), примененный к ошибочному объекту вариант, для которого этот метод недоступен.
  • Вызов внешней библиотечной функции.
  • Ссылки на неработающие библиотеки

Для решений этих причин см. мой пост: Ошибка выполнения 49, запрет вызовов DLL

Ответ 5

Я только что получил это в Excel и задался вопросом, получил ли кто-нибудь еще это раньше. Мое решение состояло в том, чтобы перемещать ссылки на мою собственную DLL и нажимать "Compile <Project> ".

Ответ 6

Мы столкнулись с некоторыми проблемами с VBA при попытке вызвать DLL, скомпилированную в Intel Fortran. Оказывается, вам нужно выровнять соглашения вызова в контексте "C" с флагом компилятора : cfv

Подробнее здесь, на веб-сайте Intel Еще один полезный поток по той же проблеме: Intel Fortran DLL ↔ C