Gỡ lỗi lỗi quy ước gọi sai DLL


13

Làm cách nào để gỡ lỗi lỗi DLL gọi sai quy ước trong mã MSAccess VBA?

Tôi đã thực hiện một số thay đổi đối với một chức năng trong mô-đun và sau đó nhận được lỗi. Làm thế nào để gỡ lỗi nó để tìm ra nguyên nhân?

Lỗi xảy ra trên báo cáo hàm thoát của hàm.

  0

Bạn đang gọi một hàm gốc được khai báo với câu lệnh "Khai báo", phải không? Bạn có thể chia sẻ cả tuyên bố và cuộc gọi với chúng tôi? 22 feb. 092009-02-22 08:56:00

+3

Tôi đã sửa nó ... tất cả những gì tôi phải làm là bắt đầu truy cập bằng/dịch ngược và sau đó biên dịch lại và lỗi đã biến mất. 22 feb. 092009-02-22 11:55:54

  0

Đối với độ phân giải đến lỗi này trong Excel, xem bài của tôi tại địa chỉ: [Runtime Error 49, Bad DLL ước gọi] [1] [1]: http://stackoverflow.com/questions/15758834/runtime -error-49-bad-dll-calling-convention 20 sep. 142014-09-20 00:28:49

18

Bạn đã kiểm tra tài liệu tham khảo và đã biên dịch chưa?

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" 
           "d:\My Documents\access\mayapp.mdb" /decompile 

Xem thêm:
http://www.granite.ab.ca/access/decompile.htm
VBScript Decompile


Kiểm tra tài liệu tham khảo trong mã

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

Mong rằng tôi đã có nhiều upvotes cho bạn cho câu trả lời này. 15 apr. 112011-04-15 10:05:17

  0

Tôi đã gặp phải lỗi này trên một cuộc gọi (và một lần nữa khi trở về từ chức năng) đến một hàm Access VBA tôi đã viết - không phải là một hàm API bên ngoài./dịch ngược và biên dịch lại đã làm các trick. Tôi nghi ngờ rằng rất nhiều gỡ lỗi (thay vì chỉ chạy) một chức năng đệ quy đã truy cập nhầm lẫn, và/decompile làm sạch các mess. 19 dec. 152015-12-19 13:42:08


0

Tôi vừa mới nhận được điều này trong Excel và tự hỏi nếu bất cứ ai khác đã nhận được nó trước đây . Giải pháp của tôi là di chuyển xung quanh các tham chiếu đến tệp DLL của riêng tôi và nhấp vào 'Biên dịch <Project>'.


21

Tôi đã thấy điều này trong Excel trước đây mà không có bất kỳ tham chiếu bên ngoài nào. Nó đã xảy ra, như với vấn đề của bạn, trên một cuộc gọi Exit Function. Excel dường như không có tùy chọn/decompile, nhưng tôi đã sửa nó bằng cách thay đổi một trong các mô-đun lớp của tôi, thực thi một trình biên dịch từ trình đơn Debug, và sau đó hoàn tác thay đổi. Tôi nghi ngờ rằng một trong các mô-đun lớp học của tôi đã bị biên dịch sai vì một số lý do và Excel sẽ không biên dịch lại trừ khi nó cho rằng có điều gì đó đã thay đổi.

+9

Holy f * cảm ơn bạn đã đăng bài này, vấn đề chính xác mà tôi có. Tôi chỉ cần đặt một xxxx ở đầu mỗi mô-đun, sau đó: Debug, biên dịch VBAProject (mà sẽ làm nổi bật một xxxx) ... xóa đó -> Debug, biên dịch VBAProject ... lặp lại cho đến khi không có lỗi biên dịch nhiều hơn. 25 jun. 122012-06-25 23:18:49


2

Tôi đã gặp phải và khắc phục lỗi này bằng cách sử dụng the .NET library for WinSCP từ MS Access VBA.

gì đã xảy ra là:

  1. Một chức năng UploadSomething để kết nối với một máy chủ SFTP và tải lên một tập tin làm việc tốt.
  2. Trong chức năng UploadSomething thay đổi "hỗ trợ resume" tùy chọn với mã này: myTransferOptions.ResumeSupport.State = TransferResumeSupportState.TransferResumeSupportState_Off

Sau khi thay đổi, mã làm việc như mong muốn. Tuy nhiên, trong mã số được gọi làUploadSomething, Lỗi 49 được ném sau khi chức năng kết thúc.

Lỗi xảy ra cả khi bước qua mã bằng trình gỡ lỗi và khi thực thi cùng một lúc bên ngoài trình gỡ lỗi. Biên dịch lại dự án không hiệu quả với tôi.

gì đã làm công việc là thế này:

  1. Tháo tham chiếu đến thành phần COM
  2. Thêm tham chiếu đến thành phần COM
  3. biên dịch lại

1

Trong Excel VBA, điều này có thể do một vài vấn đề gây ra:

  1. Một tham số hoặc kiểu giá trị trả về không khớp.
  2. Một phương pháp đối tượng (chẳng hạn như AutoFit) được áp dụng cho một đối tượng sai biến thể mà phương pháp đó không khả dụng.
  3. Cuộc gọi đến chức năng thư viện bên ngoài.
  4. bị hỏng thư viện tài liệu tham khảo

Đối với độ phân giải đến những nguyên nhân, xem bài của tôi tại địa chỉ: Runtime Error 49, Bad DLL calling convention


0

Chúng tôi đã gặp phải một số vấn đề với VBA khi cố gắng gọi một DLL được biên soạn trong Intel Fortran. Nó chỉ ra rằng bạn cần phải sắp xếp các công ước gọi trở lại một "C" bối cảnh với trình biên dịch cờ ước gọi: cfv

Thông tin thêm ở đây trên Intel website Một chủ đề hữu ích về cùng một vấn đề: Intel Fortran DLL <-> C