Windows IoT에서 win32 gdi어플리케이션이 동작할까?

또 Windows IoT 관련 포스팅.
Windows IoT에서 win32 gdi어플리케이션이 동작할까?

아마도 나 말곤 관심가질만한 분이 없겠지만…

Preview공개 전부터 Windows IoT에서 고전적인 win32의 GDI 어플리케이션이 돌아갈지가 궁금했다.

Windows RT의 경우 jailbreaking하고 나면 arm버전의 win32어플리케이션을 돌릴 수 있었다. MFC DLL까지 그대로 다 들고 있는 정도. win32 , DirectX 11로 개발한 게임을 D3DX부분만 수정해서 arm타겟으로 빌드해서 Windows RT에서 돌리기도 했었다.
Windows IoT도 Windows on ARM이니까 win32 GDI프로그래밍이 가능하지 않을까 기대를 했다.

결론적으로 …

<불가능하다.>

간단하게 창 하나 띄우는 프로그램을 작성해서 라즈베리 파이에 던져넣고 실행해봤다. 커맨드 라인에서 실행하면 조용히 종료하는데 크래시한건지 알아서 우아하게 종료한건지 알수 없다.

디버거를 붙여서 따라가보면 CreateWindow()를 호출하는 코드까지 정상적으로 실행된다. CreateWindow()에서 HWND가 리턴되어야하는데 NULL이 리턴된다. 즉 창(Window)를 만들지 못한다.

프로세스에 올라와있는 dll들을 살펴보면 kernel32.dll과 user32.dll이 보이는데 gdi32.dll이 없다.  동일 코드를 데스크탑에서 x86으로 빌드해서 돌려보면 당연히 gdi32.dll이 로드되어있다.

그렇다면 Windows IoT 시스템 파일에서 gdi32.dll이 빠져있을까?

gdi32.dll이 아예 존재하지 않았다면 이 win32어플리케이션이 로드될때 바로 크래시했을 것이다.

ftp로 접속해서 폴더구조를 확인해본다.
Windows IoT가 설치된 라즈베리 파이의 파일들을 살펴보면 Windows/system32폴더 밑에 gdi32.dll이 존재한다.

gdi32.dll의 arm버전을 구현 못했을리는 없다고 생각한다. Windows RT에서도 이미 완벽하게 구현했었기 때문에 Windows IoT에서 그걸 구현 못했다는것은 말이 안된다.
아마도 정책적으로 막았겠지.
아님 지금 준비가 덜 되어서 무조건 API들이 실패를 리턴하게 했을수도 있고.

하여간 궁금증은 다 풀었다.

winiot_system32 winiot_win32_gdi_trace


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중