调试坏DLL调用约定错误


13

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

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

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

  0

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

+3

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

  0

对于解决方法,此错误在Excel中,看到我的帖子在:运行时错误49,错误的DLL调用约定] [1] [1]:http://stackoverflow.com/questions/15758834/runtime -error-49-bad-dll-calling-convention 20 9月. 142014-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 
+1

希望我对此答案有更多的赞赏。 15 4月. 112011-04-15 10:05:17

  0

我在调用时(以及从函数返回时)遇到了这个错误,我写了一个Access VBA函数 - 而不是外部的API函数。 /反编译和重新编译做了伎俩。 我怀疑大量的调试(而不是仅仅是运行)递归函数让Access感到困惑,并且/反编译清除了混乱。 19 12月. 152015-12-19 13:42:08


0

我刚刚得到这个在Excel中,不知道有没有人以前曾得到它的代码
http://www.granite.ab.ca/access/decompile.htm
VBScript Decompile


检查引用。我的解决方案是移动到我自己的DLL的引用,然后单击“编译<项目>”。


21

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

+9

圣f *感谢张贴这个,我有确切的问题。我只是在每个模块的顶部放置了一个xxxx,然后:调试,编译VBAProject(它将突出显示一个xxxx)...删除 - > Debug,编译VBAProject ...重复,直到没有更多的编译错误。 25 6月. 122012-06-25 23:18:49


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