Heim > Backend-Entwicklung > C++ > Hauptteil

Wie behebe ich die PinvokeStackImbalance-Ausnahme in VS2010?

Barbara Streisand
Freigeben: 2024-11-03 21:17:29
Original
838 Leute haben es durchsucht

How to Fix the PinvokeStackImbalance Exception in VS2010?

PinvokeStackImbalance-Ausnahme in VS2010 beheben

Die PinvokeStackImbalance-Ausnahme, die zuvor in VS2008 standardmäßig deaktiviert war, wurde in VS2010 standardmäßig aktiviert. Diese Ausnahme soll Entwickler auf falsche Aufrufkonventionen in DllImport-Aufrufen aufmerksam machen.

Problemdefinition

Bei der Migration einer Lösung von VS2008 nach VS2010 ruft DllImport eine C-DLL auf Löst ständig die PinvokeStackImbalance-Ausnahme aus, auch wenn sich die DLL selbst nicht geändert hat.

Lösung

Das Problem ist auf eine falsche Aufrufkonvention zurückzuführen, die in der DllImport-Deklaration verwendet wird. Standardmäßig verwendet DllImport CallingConvention.WinApi, was CallingConvention.StdCall für x86-Desktopcode entspricht. Die zugrunde liegende C-Funktion ist jedoch als __cdecl deklariert, was CallingConvention.Cdecl erfordert.

Fix

Ändern Sie die DllImport-Deklaration, um explizit die richtige Aufrufkonvention anzugeben:

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

Zusätzliche Hinweise

  • Diese Ausnahme tritt nur im Managed Debugging Assistant (MDA)-Modus auf. Im Release-Modus wird es nicht ausgelöst.
  • Weitere Informationen zu Aufrufkonventionen finden Sie in der MSDN-Referenz.

Das obige ist der detaillierte Inhalt vonWie behebe ich die PinvokeStackImbalance-Ausnahme in VS2010?. 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