首页 新闻 搜索 专区 学院

关于c# 调用c/c++ dll 出现的封送处理错误

0
悬赏园豆:50 [待解决问题]

利用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);
}
}
}
}
}

求指导。

cao&bin的主页 cao&bin | 初学一级 | 园豆:152
提问于:2018-11-26 17:31
< >
分享
所有回答(1)
0

试试给 use_OneFrameDealingVII 方法加上 unsafe

dudu | 园豆:39028 (高人七级) | 2018-11-26 18:35

加了 但是并没有什么用,我觉着在OneFrameDealingVII前面加了应该就可以了

支持(0) 反对(0) cao&bin | 园豆:152 (初学一级) | 2018-11-27 13:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册