관리되지 않는 C++ DLL을 사용하는 C# 응용 프로그램이 있습니다. WinXP (Win7이 아님)에서 C++ DLL에서 다시 전달하는 메모리가 너무 크면 충돌이 발생했습니다.C#에서 C++ DLL로부터 콜백을받을 때 WinXP의 메모리 제한은 무엇입니까?
기본 흐름은 C# DLL에서 콜백을 제공하는 start 함수를 호출하여 C#에서 작업을 시작한다는 것입니다. 그런 다음 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# 사이에서 전송할 수있는 메모리 양에 대해 알고있는 사람이 있습니까? 아니면이 문제를 완전히 오해하고 더 논리적 인 설명이 있습니까?
업데이트 : 더 구체적이어야합니다. WinXP 및 Win7 이중 부팅, 둘 다 32 비트 OS를 사용하는 동일한 PC에서 발생합니다.
+1 흥미로운 질문입니다. 나는 이것에 대한 답을 알고 싶다. – Polynomial
Windows XP에서만 발생한다고 말합니까? 이것은 Win7 x64와 반대로 XP 박스 x86입니까? 64 비트 대 32 비트 아키텍처를 다루는 경우 문제의 원인이 될 수 있습니다. –
스티브의 의견을 확장하면 AnyCPU 대신 x86을 대상으로 C# 코드를 컴파일하려고 했습니까? –