最佳答案
我刚从2008版切换到2010版。完全相同的解决方案,只是现在对 C + + dll 的每一次调用都会产生一个“ pinvokestackBalance”异常。
这个例外在2008年不会被解雇。我可以完全访问 C + + dll 和调用应用程序。Pcall 似乎没有任何问题,但是这个问题使得调试其他问题变得不可能; 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);
下面是它在 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);
}
Vs2010和 vs2008之间有什么不同,会导致抛出这些异常?我是否应该向 DllImport 指令添加一组不同的参数?