【发布时间】:2011-03-31 05:24:27
【问题描述】:
我刚从 vs2008 切换到 vs2010。完全相同的解决方案,除了现在对 C++ dll 的每次调用都会产生“pinvokestackimbalance”异常。
此异常在 2008 年没有被触发。我可以完全访问 C++ dll 和调用应用程序。 pinvoke似乎没有任何问题,但是这个问题使调试其他问题变得不可能; 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 指令添加一组不同的参数吗?
【问题讨论】:
标签: c# c++ visual-studio-2010 visual-studio pinvoke