Tôi vừa chuyển sang vs2010 từ vs2008. Chính xác cùng một giải pháp, ngoại trừ bây giờ mỗi lệnh gọi đến một dll C ++ đều mang lại một ngoại lệ 'pinvokestackimbalance'.
Ngoại lệ này không bị loại bỏ vào năm 2008. Tôi có toàn quyền truy cập vào C ++ dll và ứng dụng gọi điện. Dường như không có bất kỳ vấn đề nào với chân cắm, nhưng vấn đề này khiến việc gỡ lỗi các vấn đề khác là không thể; IDE liên tục dừng lại để nói với tôi về những điều này.
Ví dụ, đây là chữ ký 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);
Đây là những gì nó trông như thế nào ở phía C ++:
#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);
}
Điều gì khác biệt giữa vs2010 và vs2008 có thể khiến các ngoại lệ này bị loại bỏ? Tôi có nên thêm một bộ tham số khác vào chỉ thị DllImport không?