강좌,팁

허창원 *.19.44.230

저는 무슨 일을 하다가 머리가 복잡하면, 머리를 식히기 위해 프로그래밍을 하곤 합니다.
프로그래밍은 그야말로 즐겁고 신나는 일이죠...
그런데, 이제부터는 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.c

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) 로 계속...

 

List of Articles
번호 제목 글쓴이 날짜 조회 수
76 [팁:12] Windows 98용 프로그램은 CVI 6 이하에서 Build할 것 file [3] 허창원 2005-07-16 23968
75 [팁:11] Radio Group을 사용하기 위한 과정 file 허창원 2005-07-14 15250
74 [계획] CVI 강좌를 좀더 체계화하기 위해... 메모함 허창원 2005-05-19 14909
73 [강좌:28] 나만의 대화상자를 라이브러리(Static,DLL)로 만들기(2) 허창원 2005-03-12 14211
» [강좌:28] 나만의 대화상자를 라이브러리(Static,DLL)로 만들기(1) file 허창원 2005-03-12 15795
71 [강좌:27] 내 입맛에 맞는 대화 상자 만들기 file 허창원 2005-03-11 14371
70 자동 파일 생성 코드 [1] 허만회 2005-03-03 12900
69 [팁:10] CVI로 DLL 만들기(요약) file [1] 허창원 2005-02-22 18929
68 [강좌:26] 간단한 RS-232 통신예(NI-VISA 함수 이용) 허창원 2005-02-05 76120
67 [강좌:25] 간단한 RS-232 통신예(RS-232용 함수 이용) [2] [2] 허창원 2005-02-05 28927
66 [팁:9] 프로그램 내에서 메뉴 만드는 과정 요약 file 허창원 2005-01-22 12295
65 [팁:8] UIR 파일을 실행파일에 포함하는 방법 file [2] 허창원 2005-01-22 19365
64 [강좌:24] 수치를 String 컨트롤에 출력 file 허창원 2004-12-01 12797
63 [강좌:23] Noisy 신호를 Filtering 하기(2) 허창원 2004-07-23 12948
62 [강좌:23] Noisy 신호를 Filtering 하기(1) file 허창원 2004-07-23 16071
61 [강좌:22] 드래그 앤 드롭 이용하기 [1] 허창원 2004-07-06 13222
60 [강좌:21] CVI프로그래밍 시작단계 정의(3) [1] 허창원 2004-07-06 12118
59 [강좌:21] CVI프로그래밍 시작단계 정의(2) 허창원 2004-07-06 12935
58 [강좌:21] CVI프로그래밍 시작단계 정의(1) 허창원 2004-07-06 13269
57 [팁:7] 작업화면 스타일 선택하기 [1] 허창원 2004-07-05 15017