pinvokestackimbalance — wie kann ich das beheben oder schalten Sie es aus?

Ich wechselte zu von vs2010 vs2008. Genau die gleiche Lösung, außer jetzt jeden einzelnen Aufruf einer C++ - dll liefert eine 'pinvokestackimbalance' Ausnahme.

Diese Ausnahme nicht entlassen werden, im Jahr 2008. Ich habe vollständigen Zugriff auf die C++ - dll und des aufrufenden Anwendung. Dort nicht erscheinen zu sein irgendwelche Probleme mit der pinvoke, aber das problem ist, macht das debugging andere Probleme unmöglich; die IDE ist ständig anhalten, um mir zu sagen, über diese Dinge.

Zum Beispiel, hier ist 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);

Hier ist, was es sieht aus wie auf der C++ Seite:

#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 der Unterschied zwischen vs2010 und vs2008 dazu führen würde, dass diese Ausnahmen geworfen bekommen? Soll ich werden das hinzufügen von einen anderen Satz von Parametern auf die DllImport-Richtlinie?

InformationsquelleAutor mmr | 2010-08-17

Schreibe einen Kommentar