Heim > Backend-Entwicklung > C++ > Warum erhalte ich in Visual Studio 2010 die Ausnahme „pinvokestackimbalance'?

Warum erhalte ich in Visual Studio 2010 die Ausnahme „pinvokestackimbalance'?

Susan Sarandon
Freigeben: 2024-11-03 18:37:30
Original
648 Leute haben es durchsucht

Why do I get a

PinvokeStackImbalance-Ausnahme: Verständnis und Lösung in Visual Studio 2010

In Visual Studio 2010 können bestimmte Aufrufe von C-DLLs zu einem „pinvokestackimbalance“ führen " Ausnahme. Diese Ausnahme war in Visual Studio 2008 standardmäßig deaktiviert, ist jedoch in Visual Studio 2010 standardmäßig aktiviert.

Ursache der Ausnahme

Die Ausnahme „pinvokestackimbalance“ ist nicht vorhanden Eigentlich eine Ausnahme, aber ein Managed Debugging Assistant (MDA). Es erkennt Inkonsistenzen in der Aufrufkonvention zwischen verwaltetem und nicht verwaltetem Code bei Verwendung von Plattformaufruf (P/Invoke).

Falsche Aufrufkonvention

Im bereitgestellten Codebeispiel wird die C#-Code verwendet das Attribut [DllImport] mit dem Standardwert CallingConvention.WinApi, der CallingConvention.StdCall für x86-Desktopcode entspricht. Der C-Code verwendet jedoch die __cdecl-Aufrufkonvention.

Lösung

Um dieses Problem zu beheben, muss das CallingConvention-Attribut im [DllImport]-Attribut explizit auf CallingConvention festgelegt werden .Cdecl, um der im C-Code verwendeten Aufrufkonvention zu entsprechen. Der aktualisierte Code würde wie folgt aussehen:

<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void FasterFunction(
    [MarshalAs(UnmanagedType.LPArray)] ushort[] inImage, 
    [MarshalAs(UnmanagedType.LPArray)] byte[] outImage, 
    int inTotalSize, int inWindow, int inLevel);</code>
Nach dem Login kopieren

Zusätzlicher Hinweis

Der MDA „pinvokestackimbalance“ ist nur im Debug-Modus aktiv. Im Release-Modus wird die Ausnahme nicht ausgelöst. Wenn das Problem daher nur im Debug-Modus auftritt, sollte es durch die korrekte Einstellung des CallingConvention-Attributs behoben werden.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Visual Studio 2010 die Ausnahme „pinvokestackimbalance'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage