Ich habe gerade von vs2008 zu vs2010 gewechselt. Genau dieselbe Lösung, außer dass jetzt jeder einzelne Aufruf einer C ++ - DLL eine Ausnahme für "pinvokestackimbalance" ergibt.
Diese Ausnahme wird 2008 nicht ausgelöst. Ich habe vollständigen Zugriff auf die C ++ - DLL und die aufrufende Anwendung. Es scheint kein Problem mit dem Pinvoke zu geben, aber dieses Problem macht das Debuggen anderer Probleme unmöglich. Die IDE hält ständig an, um mir von diesen Dingen zu erzählen.
Hier ist zum Beispiel die C # -Signatur:
[DllImport("ImageOperations.dll")]
static extern void FasterFunction(
[MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage,
[MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage,
int inTotalSize, int inWindow, int inLevel);
So sieht es auf der C ++ - Seite aus:
#ifdef OPERATIONS_EXPORTS
#define OPERATIONS_API __declspec(dllexport)
#else
#define OPERATIONS_API __declspec(dllimport)
#endif
extern "C" {
OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray,
unsigned char* outRemappedImage,
int inTotalSize,
int inWindow, int inLevel);
}
Was ist anders zwischen vs2010 und vs2008, was dazu führen würde, dass diese Ausnahmen ausgelöst werden? Sollte ich der DllImport-Direktive einen anderen Parametersatz hinzufügen?