Отладка плохой ошибки вызова вызова 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