2010. 8. 24. 21:46

Dynamic Dll Loader 입니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안녕하세요  Geeks_Company 입니다.

일전에 언급 했던 동적 DLL Loader에 관한 모듈 개발이 완료 되어 소개를 드릴까 합니다.

Dynamic Dll Loader (이하 DDL)은 동적으로 모듈을 로드 하며, 특정 방식(현재는 파일로 된 DLL 형식) 의 Dll 파일을 로드 하며, 자동으로 업데이트 된 DLL의 모듈을 불러 와 사용 합니다.


간단한 아이콘 모습니다. ( Updater를 통해서 Update 유무를 판단 합니다 )




간단한 데모 소스 입니다. 간단히 시나리오를 설명 드리면 이러 합니다.

 - Main Application ,  Updater 모듈과 DDL 에 로드할 Dll 파일 경로 와 DLL 클래스 전체 이름을 인자로 줍니다.

 - 10 초에 한번씩 현재 로드된 DLL 의 함수중 하나를 로드 하여 리턴 값을 출력 합니다.

 - Update가 되면, Update Event가 발생하여 DDL 이 Dll을 로드 하여 변경된 값을 Main Application의 종료 없이 반영 합니다.




DynamicDllUpdater 는 데모를 할 Main Application 이며, 현재 디버깅 모드로 실행을 하기전 모습입니다.

( 실제 실행은 디버깅 모드가 아닌, 정상 실행으로 처리 하였습니다. 디버깅 모드보다 훨씬 편하더군요. )

참고로 testDll은 컴파일 할 dll 프로젝트의 명입니다.



Main Application 이 실행이 되면서, testDll을 로드 하여, 그 해당 메쏘드(ReturnMsg)를 실행 한 상태 입니다.

매번 실행 된 후 10초의 딜레이가 주어지며, 10초 동안 Update가 발생 되지 않으면, 동일 메쏘드가 실행이 됩니다.




"업데이트 전 입니다" 란 문구를 동적으로 바꾸는 화면입니다.

위에 블락 지정한 곳을 " 업데이트 후 입니다 " 란 문구로 바꾼후 testDll을 컴파일 하였습니다.




위에 시간을 보시면    9:25:49 ~ 9:25:59 사이에 dll 파일의 업데이트가 이뤄지었으며,

Update 이벤트가 발생이 되었습니다.

Main Application 에서는 update 이벤트가 발생하였으므로, DDL 을 활용 하여, 동적으로 해당 dll 을 로드 합니다.

동적으로 로드된 dll을 바탕으로 하여, 다시 지정된 메쏘드를 호출 하여 바뀐 메시지("업데이트 후 입니다") 가 정상적으로 출력이 됩니다.



다른 타입 예제로 int 형의 100 값을 리턴 시키게 바꾼후 컴파일 해봤습니다.

정상적으로 반영이 되어서 리턴 값을 출력 합니다. 


리턴 타입이 String 으로 되어 있지만, 실제로 타입의 한계는 존재 하지 않습니다.

해당 dll에서 참조 하는 그 어떤 클래쓰, 기본 타입, Structure 등등 모든 타입을 사용 할 수 있습니다.




이 기술을 사용 할 경우, Dot.net 기반에서 개발시 잦은 배포 및 변동 사항을 업데이트란 과정을 따로 두지 않고, Background thread를 통해서 할 수 있습니다.

가장 큰 이점은 main process의 종료 없이 동적으로 dll을 로드 하여 사용 가능하다는게 아닌가 합니다.

서버에서 돌아가는 24/7 성격의 프로세스 라면, 해당 로직 변경시 유연하게 대처 할수 있습니다.


읽어 주셔셔 감사 합니다.

그럼 좋은 하루 되세요.

'Geeks_Company 자료' 카테고리의 다른 글

Geeks_PriceWatcher  (0) 2011.06.18
Geeks_WebPageReader  (0) 2010.12.02
Geeks_Compression  (0) 2010.05.03
Geeks_BlowFish  (0) 2010.04.25
Geeks_Key_Exchanger  (0) 2010.04.13