2015-01-19 2 views
-1

C# 및 비 관리 DLL에서 래퍼를 만들고 있는데, 내부에서 HeapSetInformation을 사용하는 함수를 호출 할 때를 제외하고 모두 올바르게 작동합니다. HeapSetInformation은 0을 반환합니다. Visual C++ 응용 프로그램 내에서 호출되는 동일한 함수가 올바르게 작동하고 있습니다. 어떤 이유로 C# 내부에서 LFH를 초기화 할 수 없습니다. 관리되지 않는 DLL은 수정할 수 없으며 소스 코드가 없습니다. 누군가가 문제를 해결하는 방법을 알고 있습니까? 테스트 환경이 바인드 중 쉬운 방법은 없습니다 윈도우 7 x64 및 비주얼 스튜디오 2013 프레임 워크 4.5C# 및 비 관리 DLL을 사용하여 HeapSetInformation 오류가 발생했습니다.

안부 GMG

+0

전화를 끊으시겠습니까? - Vista 이후 버전에서는 LFH [자동] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366750%28v=vs.85%29.aspx)를 사용하므로 아무 것도 할 필요가 없습니다. . 제쳐두고,'GetLastError()'를 설정하고 디버거가 연결된 경우 작동하지 않습니다. –

+0

이전에 작성한대로 DLL을 수정할 수 없으며 HeapSetInformation은 호출해야하는 DLL 함수 내에서 호출됩니다. 디버거없이 응용 프로그램을 실행해도 동일한 오류가 발생합니다. – GMG

+0

DLL에서 HeapSetInformation()을 호출하는 것은 매우 범죄적인 일입니다. DLL은 프로세스의 모든 코드에 영향을주는 전역 설정을 가진 결코 * 원숭이가 아니어야합니다. 힙 자체를 만들지 않는 한, C# 코드는 그 것을 엉망으로 만들 수 없습니다. 그 DLL을 사용하지 않는 데는 적어도 2 가지 이유가 있습니다. 우리는 그 DLL을 빼기 위해 무엇이든 할 수 있을지 의심 스럽습니다. 환경에 _NO_DEBUG_HEAP = 1을 추가하십시오. 소유자에게 도움을 요청하십시오. –

답변

1

입니다. DLL은 HeapSetInformation에 잘못 호출됩니다.

가장 좋은 해결책은 DLL을 고정 시키거나 DLL 사용을 중단하는 것입니다. 그럴 수 없다면 HeapSetInformation에 코드 후크를 설치하고 아무 것도하지 않도록 준비하고 TRUE을 반환하십시오.

관련 문제