2009-02-22 13 views
13

Jak usunąć błąd nieprawidłowego wywoływania biblioteki DLL w kodzie MSAccess VBA?Zdebuguj błędny błąd wywoływania biblioteki DLL

Wprowadziłem kilka zmian do funkcji w module, a następnie otrzymałem błąd. Jak debugować go, aby znaleźć przyczynę?

Błąd występuje w instrukcji funkcji wyjścia funkcji.

+0

Wywołujesz natywną funkcję zadeklarowaną za pomocą instrukcji "Deklaracja", prawda? Czy możesz podzielić się z nami deklaracją i rozmową? –

+3

Naprawiłem to ... wszystko, co musiałem zrobić, to zacząć dostęp z/dekompilować, a następnie rekompilować i błąd zniknął. – Malcolm

+0

Dla rozdzielczościach do tego błędu w programie Excel, zobacz mój post na: [Runtime Error 49, Bad DLL konwencji wywołania] [1] [1]: http://stackoverflow.com/questions/15758834/runtime -error-49-bad-dll-call-convention – pstraton

Odpowiedz

18

Czy sprawdziłeś swoje referencje i dokonałeś dekompilacji?

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

Zobacz także:
http://www.granite.ab.ca/access/decompile.htm
VBScript Decompile


Sprawdź referencje w kodzie

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

Żałuję, że nie mam dla ciebie większej ilości głosów na tę wiadomość. – Andy

+0

Wpadłem na ten błąd podczas wywołania (i ponownie po powrocie z funkcji) do funkcji VBA Access, którą napisałem - a nie funkcji zewnętrznego interfejsu API./decompile i recompile zrobili lewę. Podejrzewam, że wiele debugowania (zamiast zwykłego uruchamiania) funkcji rekursywnej spowodowało, że Access był zdezorientowany, a/decompile uprzątnął bałagan. – SebTHU

0

Mam tylko to w Excelu i zastanawiał się, czy ktoś dostał go wcześniej . Moim rozwiązaniem było przeniesienie odniesień do mojej własnej biblioteki DLL i kliknięcie "Kompiluj <Projekt>".

21

Widziałem to wcześniej w Excelu bez żadnych odnośników zewnętrznych. Stało się tak, jak w przypadku twojego problemu, w wywołaniu funkcji wyjścia. Wydaje się, że Excel nie ma opcji/decompile, ale naprawiłem ją, wprowadzając zmiany w jednym z modułów mojej klasy, wykonując kompilację z menu Debug, a następnie cofając zmianę. Podejrzewam, że jeden z modułów klasy źle skompilował z jakiegoś powodu, a program Excel nie będzie ponownie kompilowany, jeśli nie podejrzewa, że ​​coś się zmieniło.

+9

Święte f * dzięki za opublikowanie tego, dokładny problem miałem. Właśnie umieściłem xxxx na górze każdego modułu, a następnie: Debuguj, Skompiluj VBAProject (który podświetli xxxx) ... usuń -> Debuguj, kompiluj VBAProject ... powtarzaj, aż przestaną się kompilować błędy. – tbone

2

Doświadczyłem tego błędu i pracowałem nad nim przy użyciu the .NET library for WinSCP z MS Access VBA.

Co się stało było:

  1. Funkcja UploadSomething do łączenia się z serwerem SFTP i przesyłając plik działało.
  2. W funkcji UploadSomething zmienił „Wsparcie resume” opcja z tym kodem: myTransferOptions.ResumeSupport.State = TransferResumeSupportState.TransferResumeSupportState_Off

Po zmianie kodu pracował jako pożądane. Jednak w kodzie o nazwieUploadSomething, błąd 49 został zgłoszony po zakończeniu funkcji.

Wystąpił błąd zarówno podczas przechodzenia przez kod przy użyciu debuggera, jak i przy wykonywaniu naraz poza debuggerem. Rekompilacja projektu nie działała dla mnie.

Co zrobił praca to:

  1. Usuń odwołanie do komponentu COM
  2. dodać odwołanie do komponentu COM
  3. rekompilacji
1

w programie Excel VBA, może to być spowodowane przez jeden z kilku problemów:

  1. Niedopasowanie parametru lub typu wartości zwrotu.
  2. Metoda obiektu (taka jak AutoFit) zastosowana do błędnego obiektu , dla której ta metoda nie jest dostępna.
  3. Wywołanie funkcji biblioteki zewnętrznej.
  4. Złamane referencje biblioteki

przy uchwale dotyczącej tych przyczyn, patrz mój post na: Runtime Error 49, Bad DLL calling convention

0

Mamy napotkać pewne problemy z VBA podczas próby wywołania DLL skompilowany w Intel Fortran. Okazuje się, że trzeba wyrównać konwencje oddzwanianie do „C” kontekście z flagą kompilatora powołanie konwencji: CFV

Więcej informacji tutaj na Intel website Inną użyteczną wątku na ten sam problem: Intel Fortran DLL <-> C

Powiązane problemy