Ändern eines C# - Delegat Aufrufkonvention CDECL
Ich hatte dieses problem mit C#, wenn ich mit DotNet1.1
Das problem ist. Ich habe eine nicht verwaltete dll, die hat eine Funktion, die eine Funktion Zeiger (neben anderen Argumenten). Wenn ich erkläre das DLLImport in C# - code, habe ich einen Delegaten übergeben. Aber die Delegierten in C# haben stdcall
Aufrufkonvention in der Erwägung, dass die nicht verwaltete Funktion erwartet einen cdecl
Funktion Zeiger. So meine naive Ansatz führte zu Abstürzen. Dann habe ich Folgendes gefunden: http://www.codeproject.com/KB/cs/cdeclcallback.aspx Einige guy schrieb eine ausgezeichnete Bibliothek, die es ermöglicht, ändern Aufruf-Konvention von der Stellvertretung durch die, wie ich verstanden habe, MSIL-hacking. Alles lief gut, bis...
Ich VS2008 migriert und die neue version .NET. Unter diese version der oben genannten Bibliothek nicht funktioniert. Ich bin nicht wirklich ein C# - oder .NET-Experte, und, um die Wahrheit zu sagen, ich kaum verstehen, was seine Bibliothek tut (obwohl es open-source), so dass ich gar nicht wollen, um zu versuchen, um eine Anpassung an neue .NET. Jedoch bin ich der Hoffnung, dass neuere version von C# hat einige bessere Lösung für mein problem.
So, ALSO Experten, bitte helfen Sie mir mit meinen Schmerzen im Gesäß 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig den p/invoke-system umhüllt Ihre Delegaten in einer stdcall-Funktion. Sie können ändern Sie den generierten wrapper-calling-Konvention durch die Verwendung der
UnmanagedFunctionPointer
Attribut: