'Static Library'에 해당되는 글 2건

  1. 2008.02.01 CVI에서 Dynamic Link Library(DLL) 만들기
  2. 2008.02.01 CVI에서 Static Library 만들기
2008. 2. 1. 17:23

CVI에서 Dynamic Link Library(DLL) 만들기



이번엔 LabWindows/CVI에서 Dynamic Link Labrary(DLL)을 만드는 방법이다!!
아무래도 Static Library보다는 Dynamic Link Labrary이 사용하기에도 더 편리하고 더 많이 사용하는 듯 하기에...

현재 만드는 DLL이니 LIB니 하는 것들은 다음번에 다룰 CVI로 작성하게 될 MP3 Player를 만들기 위해 사용되는 라이브러리이다. 뭐 직접 하지 않아도 상관은 없지만.. 하나하나 직접 따라 해보는 것이 좋지 않을까? 생각한다.

이번 예제도 앞서 이야기 했던 'Static Labrary'와 마찬가지로 'CVI 정보나눔'의 강좌를 토대로 작성을 했고, KD_MCI_sl_source.zip파일을 이용하여 DLL파일을 작성하게 된다.

DLL을 만들기 위해 하나의 프로젝트(KD_MCI.prj)를 생성한다. 물론 다른 이름으로 프로젝트를 생성해도 전혀 상관이 없다. 위의 첨부파일의 압축을 해제하고, 파일들을 프로젝트에 포함시킨다.
참고로, 편의를 위해서 파일명을 KD_MCI_sl.*에서 KD_MCI.*로 바꾸어 준다. 안해도 상관은 없음... -_-
사용자 삽입 이미지
Static Library를 만들 때와 다른 점이라면, 프로젝트에 winmm.lib가 포함된다는 점이다.

다음 해주어야 하는 일은 각각의 소스파일에 약간의 수정을 해주어야 하는 부분이 있다.
파일 이름을 수정해 주었으므로 include문도 수정을 해주고, Export할 변수 이름과 함수 앞에 DLLEXPORT라는 것을 추가시켜준다.
Export한다는 것은 해당 DLL을 이용하는 다른 프로그램이 해당 변수나 함수를 이용할 수 있도록 하겠다는 의미이다.
사용자 삽입 이미지
참고로... 위 그림에 나오는 부분만 바꾸는 것이 아니고 죄다~ 싹 다 바꾸는 거다!!

다음은... DLL중 가장 중요한 함수를 작성해야 한다.
DLL main이라고.. 다른 main함수와 마찬가지로 DLL의 시작점을 나타내는 함수이다.
'KD_MCIPLAY DLLEXPORT kmp; 다음에 커서를 위치시키고, Edit > Insert Construct > DLLMain을 선택하자.
사용자 삽입 이미지

그러면, 아래와 같이 DLLMain과 관련된 부분이 생성되는 것을 확인할 수 있다.
사용자 삽입 이미지
추가로 맨위의 #define KD_MCI_C는 KD_MCI.h 파일에서 전역변수 kmp에 대한 선언을 DLL만들 때와 DLL사용할 때를 구분하기 위해 정의한 매크로이다.

다음으로 KD_MCI.h파일을 수정하자.
별건 없고, 아래의 붉은 부분으로 된 부분을 수정해 주면 된다.
사용자 삽입 이미지
잘은 모르지만.. extern KD_MCIPLAY DLLIMPORT kmp;를 해주어야 한다고 한다. DLL을 만들 때는 선언되지 않도록 하고, 나중에 DLL을 사용하기 위한 프로그램의 프로젝트에서는 적용되어 사용을 할 수 있게 된다고 한다.
.c에서 define으로 정의해 두고, 정의가 되지 않으면 사용하도록 해서 그런가?? -_-
다음은 DLL Project 파일 속성을 설정하는 부분이다.
Build > Configuration > Release를 선택하고,
사용자 삽입 이미지

Build > Target Type > Dynamic Link Library를 선택,
사용자 삽입 이미지

Build > Target Settings... 에서 DLL Export Option을 설정한다.
사용자 삽입 이미지

Build > Create Release Dynamic Link Library 메뉴를 선택하여, DLL을 생성한다.
생성된 DLL은 프로젝트가 있는 디렉토리를 확인하면 생성된 파일을 볼 수 있을 것이다.
사용자 삽입 이미지

생성된 파일들은 Static Library와 비슷하다.

참고 : CVI 정보나눔

'Programmings > CVI' 카테고리의 다른 글

CVI 시리얼 통신 예제  (0) 2008.04.16
CVI Ring control의 간단한 예  (0) 2008.04.11
CVI에서 Static Library 만들기  (0) 2008.02.01
CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
2008. 2. 1. 14:13

CVI에서 Static Library 만들기



LabWindows/CVI에서 Static Library를 생성하는 방법에 대해서 알아보고자 한다.

이 글은 'CVI 정보나눔'이라는 홈페이지의 강좌를 보고 직접 실습을 해가며 작성하는 것으로.. 이 문서를 보는 사람들도 각자 따라해보기 식으로 하면 도움이 될 듯 하다.

먼저 이 예제에서 필요로해서 제공되는 소스코드가 들어있는 파일이 있다.
일단 위의 파일을 다운로드받고, 압축해제를 한다.

프로젝트를 하나 생성하고, 다운받은 파일 중 .c, .h파일을 프로젝트에 추가시킨다.
예제와 같이 프로젝트 이름은 'KD_MCI_sl.prj'라는 이름으로 만든다.
사용자 삽입 이미지

다음은 project 파일속성을 설정하는 단계이다.
예제에서는 Build > Configuration > Release 모드로 작성을 했다.
처음 테스트 하는 단계에서는 Debug모드로 작성을 하고 테스트 한 후, 검증된 단계에서 Library로 만들 때에는 Release모드로 작성을 하는게 맞는 듯 하다.
사용자 삽입 이미지

Build > Target Type을 Static Library로 변경한다.
사용자 삽입 이미지

Build > Target Settings... 메뉴를 선택하고 Target Settings창에서 "Library Generation Choises..."버튼을 클릭한다.
어떤 컴파일러용의 라이브러리를 생성할 것인가를 선택하는 것인데, 'Generate static libraries for both compilers'를 선택하게 되면 'Visual C++''Borland C++'계열의 라이브러리도 함께 생성된다.
사용자 삽입 이미지
사용자 삽입 이미지

마지막 단계로 Build > Create Static Library메뉴를 클릭하자!!!
사용자 삽입 이미지

다음과 같은 메시지 창이 나타나게 되면 정상적으로 'Static Library'를 생성한 것이다.
사용자 삽입 이미지

프로젝트를 생성한 디렉토리에 들어가서 Static Library가 정상적으로 생성 되었는지 확인해 보자
사용자 삽입 이미지
위의 그림에서 보는것처럼 KD_MCI_sl.lib라는 라이브러리 파일이 있고, borland, msvc라는 디렉토리가 있는것을 확인할 수 있다.
KD_MCI_sl.lib는 CVI용 Static Library이고, borland, msvc는 각각 Borland용, MS Visual C++용 Static Library이다.

차후에 이렇게 만들어진 라이브러리 유용하게 사용할 수 있을 것 같다.

출처 : CVI 정보나눔

'Programmings > CVI' 카테고리의 다른 글

CVI Ring control의 간단한 예  (0) 2008.04.11
CVI에서 Dynamic Link Library(DLL) 만들기  (0) 2008.02.01
CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
GetCtrlVal() 함수  (0) 2008.01.24