XP에서 WebKit을 빌드하고 나서, WebKit의 실행 얼게를 분석하고 있다.
웹킷을 엔진으로 이용하는 어플리케이션을 어찌 작성해야 하는지 분석하려면, XP WebKit 프로젝트에 포함된 WinLauncher를 이용해야 한다. 이를 이용하는데도 약간의 노하우가 필요하다. 이에 관한 내용을 다음과 같이 정리한다.

1. Isolated COM Component
WinLauncher는 WebKit.dll 에 COM 콤포넌트 형태로 포함된 다양한 WebKit 모듈들을 호출해가며 동작한다. 내 개발 머신에는 사파리 브라우저가 깔려있고, 사파리 폴더에 WebKit.dll 이 존재한다. 근데, WinLauncher.exe가 실행될 때 사파리 폴더에 존재하는 WebKit.dll 이 아니라, WinLauncher.exe 와 같은 폴더에 있는 WebKit.dll 을 로드하는게 너무 신기했다. 이건 COM DLL인데 말야. 레지스트리에는 분명 사파리 폴더에 있는 WebKit.dll path가 등록되어 있는데? 어찌된거지?
XP 이상의 윈도에서는 어플리케이션 빌드시 manifest 파일을 통해 로드될 COM DLL의 path를 지정할 수 있다고 한다. 이걸 isolated component 라고(맞나?) 부른다고 한다. 그래... 내가 윈도에 관한 공부를 게을리했다. 반성한다.

2. WinLauncher.exe 실행 팁
(
http://aautar.digital-radiation.com/blog/?p=98)

2.1. request->initWithURL() 타임아웃 설정

이젠 웹킷을 철저히 뜯어볼테다 결심하고 WinLauncher를 실행시켰다. 근데, WinLauncher.exe에서 네트웍이 안된다. http://naver.com 등에 접근할 수 없다. 아... WinLauncher는 샘플 코드라 네트웍 코드가 존재하지 않는가보다 하고 의심했다. 근데, 그게 아니었다. http://aautar.digital-radiation.com/blog/?p=98 글을 찾으니 답이 있었다. WebKit 메소드를 호출할때, 타임 아웃 설정이 필요하다고 한다.
WinLauncher 소스의 loadURL() 함수에서 request->initWithURL()를 호출할 때 인자를 다음처럼 설정해줘야 한다.
request->initWithURL(urlBStr, WebURLRequestUseProtocolCachePolicy, 60);

2.2. SafariTheme.resources 폴더 복사
그리고, WinLauncher.exe를 정상적으로 실행시키기 위해서는 사파리 폴더에서 SafariTheme.resources 폴더를 통째로 복사해와야 한다고 한다. 이거 무지하게 결정적인 정보다. 다른 것들은 어찌어찌 고생하면 해결할 수 있었을 것 같은데, 이건 해결 못했을 것 같다.

이런 정보가 존재하는 인터넷이 너무 고맙다. 이런 정보를 아낌 없이 공개하는 개발자들도 고맙고... 인터넷과 구글이 없었다면 개발을 어찌했을까...

WinLauncher 실행이미지를 첨부한다. 에디트 콘트롤에 URL을 입력하면, 해당 페이지로 이동한다.

Posted by ingeeC
,