Каков лимит памяти в WinXP при получении обратного вызова от C++ DLL в C#?

У меня есть приложение C#, которое использует неуправляемую библиотеку C++ DLL. Я обнаружил ошибку, которая происходит только в WinXP (не Win7), когда память, которую я передаю обратно из C++ DLL, слишком велика.

Основной поток заключается в том, что C# начинает операцию в C++ DLL, вызывая функцию start, в которой он предоставляет обратный вызов. Затем 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, если буфер становится слишком большим, происходит сбой. Я не уверен в точном размере, который вызывает это, но я установил ограничение в 8 МБ, и крах исчез.

Кто-нибудь знает об ограничении на объем памяти, который может быть передан между C++ и C# подобным образом в WinXP? Или я совершенно неправильно понимаю эту проблему, и есть более логичное объяснение?

Обновление: я должен был быть более конкретным - это происходит на одном и том же ПК с двойной загрузкой WinXP и Win7, обе ОС 32-битные.

10
задан parsley72 5 October 2011 в 21:15
поделиться