Heim > Artikel > Backend-Entwicklung > Wie behebe ich die PinvokeStackImbalance-Ausnahme 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>
Zusätzliche Hinweise
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!