- CVI 정보나눔(www.cvi.kr)
- 스터디
- 강좌,팁,유용한것
강좌,팁
저는 무슨 일을 하다가 머리가 복잡하면, 머리를 식히기 위해 프로그래밍을 하곤 합니다.
프로그래밍은 그야말로 즐겁고 신나는 일이죠...
그런데, 이제부터는 CVI 강좌를 만드는 것도 좋겠다는 생각입니다. 점점 재미있는 일이되어 가고 있고, 보람도 많이 느끼고 있습니다. 일을 즐겁게 만들어 주신 하나님께 감사드립니다.
----------------------------------------------------------------------------------------------
(강좌 27에서 이용하였던 MyConfirmPopup_20050311.zip 파일과 거기서 만든 MyPopup.* 파일들을 복사해와서 이용하세요.)
[강좌:28] 나만의 대화 상자를 라이브러리(Static Library, DLL)로 만들기(1)
기준툴: LabWindows/CVI 7.1(이하버전에서도 무난합니다)
차례
서론
1. UI를 code로 변환
2. Static Library로 만들기
2.1 Static Library 프로젝트
2.2 Static Library 테스트
3. DLL(Dynamic Link Library)로 만들기
3.1 DLL 프로젝트
3.2 DllMain() 함수 추가
3.3 Export될 함수에 수식어 추가
3.4 DLL 테스트
3.5 DLL 이용시 유의사항
마무리
서론
강좌 제목에는 "대화 상자(Dialog Box)"라는 말이 더 보편화되어 이용했지만, 정작 강좌 내용에는 "Popup Panel"이라는 CVI식의 용어를 주로 사용합니다. 제목이란 원래 눈길을 좀 끌어야잖겠습니까?
앞 강좌에서 "내 입맛에 맞는 대화 상자 만들기"를 진행하였는데요, 사용자 정의 Popup Panel을 쉽게 설명하기 위해서 간단한 형태로 보여드렸습니다. 하지만 실전에 이용하기에는 라이브러리 형태로 만드는 것이 더 좋을 것입니다. Static 라이브러리가 좋을 수도 있고, DLL을 선호하실 수도 있겠죠! 이번 강좌에서는 이 두가지 라이브러리로 만들어 보겠습니다.
라이브러리(Static 이든, DLL이든)로 만드는 과정은 이미 다 아시리라 믿지만, UIR 파일을 이용하는 함수들을 라이브러리화해보면서 다시 한번 remind 해보도록 하겠습니다.
1. UI를 code로 변환
아마도 이 부분이 핵심이 되지 않을까 생각합니다. 별도의 UIR 파일을 새로운 프로젝트 할 때마다 꼭 들고다니는 건 매우 불편합니다, 그죠?
그래서 CVI에는 "UI to Code Converter" 기능이 있습니다. LabWindows/CVI를 실행시키시고, UIR 파일을 열어보십시오. 그 기능이 UIR 창 메뉴에 있거든요. 그림 1.1에 그 메뉴를 보였습니다.
그림 1.1 UIR 창의 "UI to Code Converter..."
이 메뉴를 실행하면, 그림 1.2와 같은 화면이 나타납니다. 여기서 번호 순대로 하나씩 지정하십시오. 대화 상자가 나타나면 적절히 OK 해주시면 됩니다. 유의하실 것은 2번 과정에서 헤더 파일명을 기존의 UIR 파일의 기본 헤더파일명과 약간 다르게 지정해 주도록 합시다. 내용이 다르면 파일명도 달라야한다는 것이 저의 지론이거든요.
그림 1.2 UI to Code Conver하는 과정
"Generate Code"를 누르면, 제대로 생성되었다는 메시지 창이 뜹니다. 그러면, MyConfirmPopup_uir.h와 MyConfirmPopup_uir.c 파일이 생성되었습니다.
이제 UIR 파일과 관련된 함수도 수정해야됩니다. MyConfirmPopup.c 파일의 헤더파일 include 부분을 그림 1.3과 같이 수정합니다. UIR 파일을 없애는 대신 새로운 UI 코드 파일이 만들어졌으니까요....
그림 1.3 수정된 MyConfirmPopup.c 파일의 헤더파일 include 부분
또, 수정해주어야할 문장이 있습니다. 그림 1.4에 보인 소스 중에서 44라인에 추가한 문장입니다. 이젠 uir 파일을 LoadPanel() 함수를 이용해서 불러오는 것이 아니고, Code로 변환된 UI를 Build하기 때문입니다.
그림 1.4 LoadPanel() 함수 대신 BuildP_...() 함수 이용
이제 라이브러리를 만들 기초 소스 파일에 대한 정리가 다 되었습니다. 여기서, 다음 단계(Static, DLL만들기)에서 이용할 파일들을 정리하고 넘어갑니다.
표1.1 Static Library, DLL을 만들때 이용할 최종 파일들
파일명 |
설명 |
MyConfirmPopup_uir.h |
MyConfirmPopup.uir을 Code로 변환한 파일 두개 |
MyConfirmPopup.c |
MyConfirmPopup() 대화 상자 호출 함수와 대화 상자 콜백함수가 정의된 파일 |
이제 Code로 변환된 UI를 라이브러리로 만들어 봅시다. (DLL만들기만 원하시는 분들은 "Static Library로 만들기" 부분은 넘어가셔도 되겠습니다.)
2. Static Library로 만들기
2.1 Static Library 프로젝트
새로운 프로젝트를 만들어서 위에서 만든 UI 코드 파일과 MyConfirmPopup.c를 프로젝트에 포함시킵니다.
프로젝트 파일명: MyPopupLib.prj
그림 2.1에 MyPopupLib.prj 프로젝트 창을 보였습니다.
그림 2.1 MyPopupLib.prj 프로젝트 창
이제 프로젝트의 Target Type을 Static Library로 설정해야겠습니다. 그림 2.2에 그 과정을 보였습니다.
그림 2.2 프로젝트의 Target Type을 Static Library로 설정
이제, Build-Configuration을 Release 모드로 바꾼 다음, Build-Create Static Library 해 봅시다.
제대로 MyPopupLib.lib 파일이 생성되었을 것입니다. 이제 이 라이브러리 파일과 함께 이용할 헤더파일을 만들어 봅시다. 단지 하나의 함수만 있기 때문에 헤더파일까지 만들어야할 필요가 있을까 하겠지만, 라이브러리 사용의 통일성을 기하기 위해 만듭니다.
그림 2.3 MyPopupLib.h 헤더파일
Build된 MyPopupLib.lib 파일과 MyPopupLib.h 파일만 다른 프로젝트에 포함시키게 되면, MyConfirmPopup() 함수를 이용할 수 있게 됩니다.
2.2 Static Library 테스트
MyPopupLib.lib를 테스트하기 위한 새로운 프로젝트를 만들어 봅시다.
프로젝트 파일명: MyPopupLib_Test.prj
이 프로젝트에는 위에서 만든 MyPopupLib.lib 파일과 강좌 27에서 만든 MyPop.* 파일을 포함시키도록 합니다. 그림 2.4에 MyPopupLib_Test.prj 프로젝트 창을 보였습니다.
그림 2.4 MyPopupLib_Test.prj 프로젝트 창
위의 파일들 중에서 MyPopup.c의 헤더파일 include 부분만 수정해 주면 되겠습니다. 아니, 이 부분은 수정하지 않아도 아무 문제는 없습니다만, 라이브러리를 사용하는 정석을 보이기 위함입니다. 그림 2.5에 수정된 MyPopup.c 파일을 보였습니다.
그림 2.5 MyPopupLib.lib를 사용하도록 수정된 MyPopup.c 파일
이제 프로그램을 Build 하여 실행해보도록 합시다. 앞 강좌에서 실행된 것과 똑같이 실행되죠?
그림 2.6 MyPopupLib.lib 라이브러리를 이용하여 만든 MyPopupLib_Test.exe 프로그램
이제, DLL을 만들어서 테스트하는 과정으로 넘어갑니다.
[강좌:28] 나만의 대화 상자를 라이브러리(DLL)로 만들기(2) 로 계속...