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
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:
Könnten Sie CallingConvention=CallingConvention.Cdecl
in Ihrem Attribut DllImport
fehlen?
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?
Tags und Links c# dll visual-c++ pinvoke