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

标签 c# c++ dll callback windows-xp

我有一个使用非托管 C++ DLL 的 C# 应用程序。当我从 C++ DLL 传回的内存太大时,我发现只有在 WinXP(不是 Win7)中才会发生崩溃。

基本流程是 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# - 从 C# 中的 C++ DLL 获取回调时,WinXP 中的内存限制是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667191/

相关文章:

c# - 如何将 xml 从 c# 桌面应用程序发送到 php 服务器脚本并解析它?

c# - unity RegisterInstance IDisposable对象

c# - 禁用 wpftoolkit 图表数据点

c++ - VB.NET 无法加载 DLL 找不到指定的模块。当dll导入时

multithreading - 从单个应用程序中的多个线程调用 dll 函数是否安全?

c++ - 将 Delphi 类传递给需要具有 __thiscall 方法的类的 C++ 函数/方法

c# - XAML 图像被截断

java - 在 Android 上用 Java 或 C/C++ 解码 Airplay 数据包

c++ - 枚举所有注册表项的最有效方法

c++ - 解析定界字符串