Heim > Backend-Entwicklung > C++ > Hauptteil

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

Patricia Arquette
Freigeben: 2024-11-02 22:43:30
Original
219 Leute haben es durchsucht

Why Am I Getting a

PinvokeStackImbalance-Problem in Visual Studio 2010

In Visual Studio 2010 tritt beim Aufrufen von C-DLLs häufig eine „pinvokestackimbalance“-Ausnahme auf. Diese Ausnahme, die zuvor in Visual Studio 2008 deaktiviert war, ist jetzt in VS2010 standardmäßig aktiviert, was Debugging-Bemühungen behindert.

Ursache des Problems

Der Code:

<code class="csharp">[DllImport("ImageOperations.dll")]
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
<code class="cpp">extern "C" {
OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, 
                                       unsigned char* outRemappedImage,
                                       int inTotalSize, 
                                       int inWindow, int inLevel);
}</code>
Nach dem Login kopieren

Das Problem liegt in einer falschen Aufrufkonvention. DllImport ist standardmäßig CallingConvention.WinApi, identisch mit CallingConvention.StdCall für x86-Desktopcode. Die C-Funktion verwendet jedoch die __cdecl-Aufrufkonvention, die anders ist.

Lösung

Um das Problem zu beheben, kann man die DllImport-Zeile wie folgt bearbeiten:

<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass die richtige Aufrufkonvention verwendet wird, wodurch die Ausnahme „pinvokestackimbalance“ behoben wird.

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