Unausgeglichener Stapel!

7

Ich habe eine VC ++ DLL geschrieben. Die Deklaration für eine der Methoden in der DLL ist wie folgt:

%Vor%

Ich benutze diese DLL in einem C # -Code mit P / Invoke. Ich mache die Erklärung als:

%Vor%

und ich rufe die Funktion im Code wie folgt auf:

%Vor%

Wenn diese Zeile gefunden wird, wirft der Compiler diesen Fehler auf:

%Vor%

Ich kann nicht verstehen, warum dieser Fehler auftritt, da die Signatur sowohl im verwalteten als auch im nicht verwalteten Code identisch ist. Außerdem läuft in meinem anderen Computer derselbe Code im Visual Studio perfekt. Das lässt mich glauben, dass der Fehler falsch ist.

Bitte helfen Sie.

Danke

    
Jayesh 13.11.2010, 09:12
quelle

3 Antworten

13

Wenn Sie eine externe Funktion aufrufen / aufrufen, lautet die Aufrufkonvention verwendet standardmäßig __stdcall . Da Ihre Funktion die __cdecl -Konvention verwendet, benötigen Sie um es als solches zu erklären:

%Vor%     
Frédéric Hamidi 13.11.2010, 09:18
quelle
6

Könnten Sie CallingConvention=CallingConvention.Cdecl in Ihrem Attribut DllImport fehlen?

    
Constantin 13.11.2010 09:17
quelle
4

Constantin und Frederic Hamidi haben diese Frage richtig beantwortet, wie man dieses Problem beheben kann. Dies kann helfen, einen eventuellen Stapelüberlauf zu vermeiden. Ich habe mich mehrmals selbst gebissen. Was hier wirklich zum Tragen kommt, ist, dass .NET 4 einen verwalteten Debugging-Assistenten für Debug- (nicht Release-) Builds auf 32-Bit x86-Rechnern (nicht 64-Bit) aktiviert hat, der nach einem falsch angegebenen p / invoke-Aufruf sucht. In diesem MSDN-Artikel wird Folgendes erläutert: Ссылка . Stephen Cleary verdient das Verdienst, dass er dies in diesem Post identifiziert hat: pinvokestackimbalance - wie kann ich das beheben oder ausschalten?

    
John Wigger 06.01.2011 21:42
quelle

Tags und Links