Я щойно перейшов на vs2010 з vs2008. Точне рішення, за винятком того, що тепер кожен окремий дзвінок до бібліотеки C ++ дає виняток "pinvokestackimbalance".
Цей виняток не звільняється у 2008 році. Я маю повний доступ до DLL C ++ та до програми, що викликає. Здається, проблем з обертанням немає, але ця проблема унеможливлює налагодження інших проблем; IDE постійно зупиняється, щоб розповісти мені про ці речі.
Наприклад, ось підпис C #:
[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);
Ось як це виглядає на стороні С ++:
#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);
}
Що різниться між vs2010 та vs2008, що призведе до виникнення цих винятків? Чи слід додавати інший набір параметрів до директиви DllImport?