Q&A

  • [Active X]OCX에서 LoadFromResourceID 사용하기
안녕하세요. MAXIST 입니다.



1.문제점 설명



날이 갈수록 아름다운(?) '유저 인터페이스'에 대한 요구가 높아져서 어플리케이션마다 그림 파일을 덕지 덕지 바르고 있는 형편입니다. 나름대로 그림 파일에 Naming도 하고 디렉토리도 나누고 해서 지금까지는 그럭저럭 버텨왔는데 어플리케이션을 Web 브라우저에 Active X Control로 붙이려고 하다보니 문제가 발생하더군요.



아시겠지만 .rc, .rh 파일로 Resource를 정해서 사용해 왔습니다. 그리고 BITMAP 등을 불러올 때는 LoadFromResourceID를 사용하여 불러왔는데 이것이 '실행파일'일 때는 잘 되다가 OCX로 바꾸면 Access Violation을 냅니다. (Resource를 못찾는다는 이야기 같더군요)



TBitmap 쪽에 LoadFromResourceID의 도움말을 참고해보면 이렇게 적혀 있습니다.



Use LoadFromResourceID to load a specified bitmap resource along with palette information "from a module's executable file".



LoadFormFile을 사용하면 OCX에서도 그림들을 정확하게 가져올 수 있습니다. 그런데 문제는 Active X Contorl이 다운로드 되면서 그림을 특정 디렉토리별로 정렬해서 저장하거나 하는 것이 불가능 하더군요.



예를 들자면 C:WindowsSystem 밑에 .bmp 확장자의 작은 그림파일들이 수십개씩 우르르르 생긴다는 것입니다. C:WindowsSystemMyAppResourceMsgBox 와 같은 식으로 개발자가 원하는 경로에 정확하게 그림을 넣어줄 수가 없다는 이야기지요.

OCX에서LoadFormFile을 쓸 때는 "상대경로"조차 쓸 수가 없었습니다. 모두 위와 같은 식으로 루트부터 다 경로를 적어주어야 했습니다.



cab 파일로 bmp가 묶이기는 하지만 사용할 때는 저렇게 난잡하게 사용자가 원치 않는 디렉토리에 마구 풀어버려야 하고 또 개발자 입장에선 그림 파일들 관리하기가 매우 어렵게 되는 번거로움이 있습니다. (OCX버전과 EXE 버전 두 가지 프로그램 짠다고 생각해 보십시오 ( T_T);;)







2.구체적인 질문 사항



[첫째] 현재는 모든 bmp 파일을 LoadFromResourceID를 사용하여 불러오고 있습니다. 이것을 OCX로 변환할 때 모두 LoadFromFile로 수정하는 방법 말고 그대로 사용하는 방법이 없을까요?



[둘째] 만약 그러한 것이 불가능 하다면 Active X Control이 설치될 때 특정 디렉토리와 하위 디렉토리를 생성하고 파일들이 적절히 배치되게 할 수 있을까요?



[셋째] Resource를 DLL 파일에 포함시킬 수 있는 것으로 알고 있는데 OCX와 DLL을 함께 배포하여 DLL로부터 Resource를 얻어오는 방법이 가능할까요?





고수님들의 한 마디 부탁드립니다~~.







0  COMMENTS