利用c#调用C/C++编译的dll ,开始都能正常运行,但是运行一段时间后,内存会激增,并且会出现如下所示的错误:
托管调试助手“FatalExecutionEngineError”在“C:\Users\Administrator\Desktop\thz_no_struct\wpf_test\bin\x64\Release\wpf_test.vshost.exe”中检测到故障。
其他信息: 运行时遇到了错误。此错误的地址为 0xf7329cb7,在线程 0x1ce4 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
函数原型是这样:
extern "C" void SBATHZDEALINGSPIII_API OneFrameDealingVII(float* pfSrc, SIZE szDst, unsigned int* pnDst, ST_RECT* pstRect, int* pnRectNum, int* pnPeopleFlg);
c#端的:
[DllImport(nativeLibName, EntryPoint = "OneFrameDealingVII", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private static extern unsafe void OneFrameDealingVII(float* pfSrc, tagSIZE szDst, UInt32* pnDst, IntPtr pstRect, int* pnRectNum, int* pnPeopleFlg);
public void use_OneFrameDealingVII(float[] pfSrc, tagSIZE szDst, ref UInt32[] pnDst, IntPtr pstRect, out int pnRectNum, out int pnPeopleFlg)
{
unsafe
{
fixed (float* p1 = pfSrc)
{
fixed (int* p4 = &pnRectNum, p5 = &pnPeopleFlg)
{
fixed (UInt32* p2 = pnDst)
{
OneFrameDealingVII(p1, szDst, p2, pstRect, p4, p5);
}
}
}
}
}
求指导。
试试给 use_OneFrameDealingVII
方法加上 unsafe
加了 但是并没有什么用,我觉着在OneFrameDealingVII前面加了应该就可以了