PInvokeStackImbalance komplece Fehlermeldung

  • VB.NET
  • .NET 4.5

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    PInvokeStackImbalance komplece Fehlermeldung

    VB.NET-Quellcode

    1. [font='courier new,courier,monospace']Private Buffr As StringBuilder
    2. Private Declare Ansi Function GetPrivateProfileSectionNames Lib "kernel32" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As StringBuilder, ByVal nSize As Long, ByVal lpFileName As String) As Long
    3. Public Function IniGetSek() As Boolean
    4. Dim AktBu As Long
    5. Buffr = New StringBuilder(256)
    6. AktBu = 128
    7. Do
    8. AktBu = AktBu * 2
    9. Buffr.Append(CType(AktBu, String), 0)
    10. RetWe = GetPrivateProfileSectionNames(Buffr, AktBu, mdlFiNam)
    11. Loop While (RetWe = AktBu - 2)
    12. Return Convert.ToBoolean(RetWe)
    13. End Function[/font]


    Assistent für verwaltetes Debuggen "PInvokeStackImbalance"

    Nachricht = Assistent für verwaltetes Debuggen "PInvokeStackImbalance" : "Ein Aufruf an die PInvoke-Funktion "vbINITest!vbINITest.clsFiles::GetPrivateProfileSectionNames" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen."


    Ich komme mit dieser Fehlermeldung einfach nicht weiter und weiß nicht, wie ich den Fehler beheben kann. Hat da jemand vielleicht eine Anregung?
    Dateien
    • vbINITest.zip

      (12,46 kB, 4 mal heruntergeladen, zuletzt: )
    Sicher dass die Funktion GetPrivateProfileSectionNamesA, also mit dem A am Ende lautet?
    Ich finde nur diese hier:
    pinvoke.net/default.aspx/kerne…rivateProfileSectionNames
    SIMDoku (Simple Dokumentenverwaltung)
    Mein Lernprojekt um die verschiedensten Facetten der .NET Entwicklung zu erkunden.
    GitHub

    VB Paradise Dark Theme
    Inoffizieller VB-Paradise Discord.
    @EaranMaleasi Jou.
    @McKloony Mach aus Long je ein Integer.
    Nimm keine VB6-Deklarationen, die knallen unter .NET alle!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    McKloony schrieb:

    Die Deklaration ist so korrekt
    Welche :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Hallo @McKloony

    Fange an mit

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On


    Korrigiere all deine Fehler.

    Wechsle auf DllImport wie in den Doks von pinvoke.net erwähnt. Es gibt ja sogar noch ein Beispiel.
    - Nimm den StringBuilder raus und verwende wie vorgegeben IntPtr.
    - Longs zu Int32 (wie schon oben erwähnt)

    Übrigens funktioniert die Funktion GetPrivateProfileSectionNames (ohne A) Bestens, wenn man es richtig anwendet. Eine InI-Datei mit möglichen Werten drin muss aber vorhanden sein, da sonst der Wert 0 ausgegeben wird.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()