如何在MSAccess VBA代码中调试错误的DLL调用约定错误?
我对模块中的函数进行了一些更改,然后得到了错误。如何调试它以找到原因?
错误发生在函数的Exit函数语句中。
答案 0 :(得分:25)
在没有任何外部引用的情况下,我在Excel中看到了这一点。与您的问题一样,它发生在Exit Function调用上。 Excel似乎没有/ decompile选项,但是我通过在我的一个类模块中进行更改,从Debug菜单执行编译,然后撤消更改来修复它。我怀疑我的一个类模块由于某种原因而编译错误,除非它认为某些内容发生了变化,否则Excel不会重新编译。
答案 1 :(得分:20)
您是否检查了参考文献并进行了反编译?
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE"
"d:\My Documents\access\mayapp.mdb" /decompile
另见:
http://www.granite.ab.ca/access/decompile.htm
VBScript Decompile
检查代码中的引用
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
答案 2 :(得分:2)
我使用MS Access VBA中的the .NET library for WinSCP体验并解决了此错误。
发生的事情是:
UploadSomething
正常工作。UploadSomething
内更改了"恢复支持"使用此代码的选项:myTransferOptions.ResumeSupport.State = TransferResumeSupportState.TransferResumeSupportState_Off
更改后,代码按预期工作。但是在调用 UploadSomething
的代码中,函数完成后抛出了错误49.
使用调试器单步执行代码和在调试器外部执行时都会发生错误。重新编译该项目并不适合我。
这是什么工作:
答案 3 :(得分:1)
在Excel VBA中,这可能是由以下任何问题引起的:
有关这些原因的解决方法,请参阅我的帖子:Runtime Error 49, Bad DLL calling convention
答案 4 :(得分:0)
我刚刚在Excel中得到了这个,并想知道是否有其他人以前得到过它。我的解决方案是移动对我自己的DLL的引用,然后单击“编译<项目>”。
答案 5 :(得分:0)
在尝试调用在英特尔Fortran中编译的DLL时,我们遇到了一些VBA问题。事实证明,您需要将调用约定与#34; C"上下文与编译器标志 调用约定:cfv
Intel website的更多信息 关于同一问题的另一个有用的线索:Intel Fortran DLL <-> C