加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:45:17 所属栏目:百科 来源:网络整理
导读:我有一个使用非托管C DLL的C#应用??程序.我发现一个崩溃只发生在WinXP(而不是Win7)当我从C DLL传回的内存太大了. 基本流程是C#通过调用一个启动函数来启动C DLL中的一个操作,它在其中提供一个回调函数. C DLL然后执行操作并将日志信息转储到文本缓冲区中.当
我有一个使用非托管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代码可能会尝试添加到日志中.这导致我看到的不稳定.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读