2009-02-22 47 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