보호 된 메모리 예외가 발생했지만 어떤 호출로 인해 예외가 발생했는지, 그리고 콜백 함수가 이동 한 이유는 무엇인지 어떻게 알 수 있습니까? 관리되지 않는 코드에 대한 모든 호출은 콜백 함수와 동일한 클래스에서 수행되므로 주소가 변경되어서는 안된다고 생각합니까? 아니면 완전히 잘못 되었습니까?어떻게 관리되지 않는 DLL에서 콜백이 보호 된 메모리 예외를 일으키는 지 감지 할 수 있습니까?
1
A
답변
2
네이티브 코드를 관리 코드로 다시 호출하려면 콜백 대리자가 필요합니다 (COM interop에 대해 이야기하지 않는 한). 가장 일반적인 오류의 원인은 마지막 콜백이 발생하기 전에 콜백 대리자가 가비지 수집된다는 것입니다. 콜백 대상이 정의 된 클래스는 중요하지 않지만 대리자를 활성 상태로 유지하는 것은 중요합니다.
메서드 이름을 지정하고 C# 컴파일러에서 임시 대리자를 만들 수있는 기능을 사용하면이 오류가 훨씬 더 흔하게 발생합니다. 나는. 대신
SetCallback(MyCallbackMethod); // No good since you can't keep reference to delegate
의이
_callback = MyCallbackMethod; // Create delegate explicitly and store reference at class level
SetCallback(_callback);
당신은 당신이 버그의 유형을 찾을 수 있도록 "managed debug assistants"를 활성화 할 수 있습니다 않습니다.
관련 문제
- 1. 깨끗한 관리되지 않는 메모리
- 2. DLL에서 사용하는 메모리 공간을 Windows에서 어떻게 덤프 할 수 있습니까?
- 3. 관리되지 않는 개체의 메모리 관리
- 4. 관리되지 않는 메모리 및 관리되는 메모리
- 5. .NET에서 관리되지 않는 메모리 할당을 검색 할 수 없습니다.
- 6. PHP 코드를 어떻게 보호 할 수 있습니까?
- 7. 관리되지 않는 C++에서 관리되는 DLL을 호출 할 수 있습니까?
- 8. 화면 회전을 어떻게 감지 할 수 있습니까?
- 9. 어떻게 메모리 덤프에서 DLL 파일을 추출 할 수 있습니까?
- 10. .NET에서 관리되지 않는 메모리 누수를 조사하는 방법?
- 11. 어떤 종류의 객체가 메모리 누수를 일으키는 지 알았습니다. 지금은 무엇입니까?
- 12. 액세스 할 수없는 예외를 일으키는 원인은 무엇입니까?
- 13. 관련없는 클래스에서는 어떻게 보호 된 메서드에 액세스 할 수 있습니까?
- 14. 어떻게 Clojure에서 예외를 throw 할 수 있습니까?
- 15. 관리되는 코드의 관리되지 않는 DLL에서 리소스 문자열 테이블 사용
- 16. 어떻게 이식 된 코드를 감지 할 수 있습니까?
- 17. 어떻게 관리되지 않는 DLL에서 메서드를 호출 할 때 충돌로부터 C# 응용 프로그램을 보호합니까?
- 18. 간단한 DLL에서 어떻게 변형을 사용할 수 있습니까?
- 19. MSVC6는 extern "C"함수의 예외를 어떻게 처리 할 수 있습니까?
- 20. 자바에서 메모리 예외를 찾아 낼 수 있습니까?
- 21. 마우스가 WPF/C# 내 윈도우 범위 내에서 움직이는 지 어떻게 감지 할 수 있습니까?
- 22. valgrind가 메모리 누수를 감지 할 수 없습니다.
- 23. XDocument + IEnumerable은 System.Xml.Linq.dll의 메모리 부족 예외를 일으키는 경우
- 24. .NET에서 액세스 위반 예외를 catch 할 수 있습니까?
- 25. C DLL에서 C# DLL을 호출 할 수 있습니까?
- 26. 콜백이 유효한지 테스트 할 수 있습니까?
- 27. 전체 .NET Framework (관리되지 않음)에서 관리되지 않는 모바일 CE Dll을 호출 할 수 있습니까?
- 28. NSPersistentStore를 저장해야 할 때 어떻게 감지 할 수 있습니까?
- 29. 관리되는 C++에서 관리되지 않는 C++ 예외를 catch하는 방법
- 30. 번들로 된 dll에서 dll 버전 번호를 추출 할 수 있습니까