2009-03-10 4 views
0

현재 응용 프로그램에서 타사 구성 요소 (DevExpress)의 문제를 조사하고 있습니다. 내 문제는 DevExpress KB article과 매우 비슷합니다. 더 적은 동일한 스택 추적으로 동일한 예외가 발생합니다. 그래서 .NET Reflector를 사용하여이 시나리오에서 null 일 수 있으며 null이 될 candiate 유일한 개체는 Graphics입니다. 이것은 Graphics.FromHwnd (IntPtr.Zero)로 생성됩니다. GDI에 대한 광범위한 지식이 없기 때문에 누군가가 null을 반환 할 수있는 시나리오가 있는지 알려주고 싶습니다 ...Graphics.FromHwnd (IntPtr.Zero)가 null을 반환하는 이유는 무엇입니까?

Windows가 GDI 밖에있는 시나리오에서 재현하려고했습니다. 의 처리, 그러나 나는 "핸들 중"얻고있다 - 나는 모든

TIA, 마틴

+0

정확히 무엇을하려합니까? 바탕 화면에 그립니다. 바탕 화면을 캡처합니까? 뭐? –

+0

아니요. Graphics.FromHwnd에 대한 호출이 DevExpress 코드에 깊숙이 묻혀 있습니다.이 호출이 null을 반환하도록 잘못 수행 한 작업을 찾으려고합니다. 나중에 DevExpress 컨트롤은 해당 객체에 의존하므로 NullReferenceException이 발생합니다. –

답변

0

내가 기억하는 바로는 HWND가 0 (사실상 IntPtr.Zero)은 현재 사용자 세션의 바탕 화면에 대한 핸들입니다. 시스템의 다양한 메트릭을 측정하는 데 사용할 수 있으며 Graphics.FromHwnd의 유효한 값이어야합니다.

그러나 GDI +는 버그가 너무 많아서 .NET과의 통합이 매우 불안정하여 GDI +를 사용하는 것 외에는 코드 나 DevExpress에 아무런 문제가 없습니다.

0

먼저 조사하고있어 문제의 경우하지 않은, 적어도 한 번 예외를, 당신은 IntPtr 구조를 사용하고 0으로 초기화하십시오. 그런 다음이 핸들을 Graphics 클래스에 전달합니다. handle == 0 창이 아닌 한 null 값이 정확히 예상 한 값입니다.