在C#中从C DLL获取回调时,WinXP中的内存限制是多少?

前端之家收集整理的这篇文章主要介绍了在C#中从C DLL获取回调时,WinXP中的内存限制是多少?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用非托管C DLL的C#应用​​程序.我发现一个崩溃只发生在WinXP(而不是Win7)当我从C DLL传回的内存太大了.

基本流程是C#通过调用一个启动函数来启动C DLL中的一个操作,它在其中提供一个回调函数. C DLL然后执行操作并将日志信息转储到文本缓冲区中.当操作完成时,C DLL调用回调函数并将文本缓冲区作为参数传递:

C :

typedef void (CALLBACK *onfilecallbackfunc_t)(LPCWSTR);
DLL_API void NWAperture_SetOnFileCallback(onfilecallbackfunc_t p_pCallback);

l_pFileCallback(_wstringCapture.c_str());

C#:

public delegate void FileCallback([MarshalAs(UnmanagedType.LPWStr)] string buffer);
public static extern void SetOnFileCallback(FileCallback fileCallback);

private void OnFile(string buffer);

这在Win7中工作正常,但是在WinXP中,如果缓冲区太大,它会崩溃.我不知道确切的大小导致这个,但我已经放了一个8MB的限制,崩溃消失了.

有没有人知道在WinXP中这样可以在C和C#之间传输的内存量的限制?或者我完全误解了这个问题,还有一个更合理的解释?

更新:我应该更具体 – 这发生在同一台PC上,WinXP和Win7双启动,都是32位操作系统.

解决方法

所以最终原来我是一个白痴.为了使日志变大而加快测试速度,我点击取消按钮,该按钮在C DLL中调用一个停止执行的函数,并调用回调函数,出现“中止”错误,并记录了任何日志.但是当我这样做时,执行没有立即停止,所以当日志的回调正在进行时,C代码可能会尝试添加到日志中.这导致我看到的不稳定.

我通过使用日志周围的关键部分来修复它.

猜你在找的C#相关文章