2009-02-22 48 views
13

如何调试MSAccess VBA代码中错误的DLL调用约定错误?调试坏DLL调用约定错误

我对模块中的函数做了一些更改,然后得到了错误。如何进行调试以找到原因?

该函数的Exit函数语句出现错误。

+0

你在调用一个用“Declare”声明声明的本地函数,对吧?你可以与我们分享宣言和电话吗? – 2009-02-22 08:56:00

+3

我修正了它......我所要做的就是用/反编译开始访问,然后重新编译,错误就消失了。 – Malcolm 2009-02-22 11:55:54

+0

对于解决方法,此错误在Excel中,看到我的帖子在:运行时错误49,错误的DLL调用约定] [1] [1]:http://stackoverflow.com/questions/15758834/runtime -error-49-bad-dll-calling-convention – pstraton 2014-09-20 00:28:49

回答

18

你检查了你的引用并反编译了吗?

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" 
           "d:\My Documents\access\mayapp.mdb" /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 
21

我以前在Excel中看到过这个,没有任何外部引用。与您的问题一样,它发生在退出函数调用中。 Excel似乎没有/反编译选项,但我通过在我的一个类模块中进行更改,从调试菜单执行编译,然后撤消更改来修复它。我怀疑我的一个课程模块出于某种原因编译了错误,并且Excel不会重新编译它,除非它认为某些内容已经改变。

2

我使用MS Access VBA中的the .NET library for WinSCP来体验和解决此错误。

当时的情况是:

  1. 一种用于连接到SFTP服务器,并上传文件功能UploadSomething工作的罚款。
  2. 在函数UploadSomething改变这种代码的“开支持”选项:myTransferOptions.ResumeSupport.State = TransferResumeSupportState.TransferResumeSupportState_Off

变更后,根据需要的代码工作。但是在调用UploadSomething的代码中,函数完成后引发了错误49。

使用调试器逐步执行代码时以及在调试器外执行时都会发生错误。重新编译这个项目对我来说不起作用。

什么做的工作是这样的:

  1. 取出参考COM组件
  2. 的引用添加到COM组件
  3. 重新编译
1

在Excel VBA,这可能是引起的几个问题:

  1. 参数或返回值类型不匹配。
  2. 将对象方法(如AutoFit)应用于错误对象 变体,该方法不可用。
  3. 调用外部库函数。
  4. 破碎库引用

有关决议,这些原因,看我的帖子在:Runtime Error 49, Bad DLL calling convention

0

我们试图拨打英特尔Fortran编译一个DLL时碰到一些问题与VBA。事实证明,则需要对齐的调用约定回用编译器标志调用约定一个“C”上下文:CFV

更多信息在这里同样的问题Intel website 另一个有用的线程上:Intel Fortran DLL <-> C