반응형
사실 Visual Basic(이하 VB) 에 대해서는 잘 모릅니다...;;; (물론, 지금도 마찬가지구요...)
이번에 일을 하면서, 조금 공부하게 된 부분이 있어서 올려봅니다.
회사에서 제가 개발을 하고 있는 부분은 어떻게 보면 중간모듈입니다...
제가 만든 제품 자체가 엔드유저에게 바로 제공되는 것이 아니라....
엔드유저가 사용하게 되는 제품을 개발할 때... 제가 만든 라이브러리/모듈을 쓰거든요;;
저는 C/C++ 로 라이브러리/모듈을 개발하고... 이 라이브러리를 쓰는 업체에서도
대부분은 C/C++ 로 작업을 합니다.
.
.
근데 한번씩... 예외적으로 C/C++ 이 아닌 다른 언어를 쓰는 경우가 있습니다.
델파이랑 VB가 그 대표적인 경우인데요;;;..
이번에 VB를 사용하는 업체에서 라이브러리를 쓰겠다고 요청이 왔습니다;;;..
만약, C/C++ 업체라면 라이브러리 파일(*.LIB)과 헤더파일(*.H), 메뉴얼을 보내주면서..
"작업하다가~~ 문의사항 있음 연락하세요~~" 이러면 되는데...;;;
다른 언어의 경우는 이게 참 힙듭니다..;;
이럴때 DLL 이란게 참~~ 도움이 되는데요...
라이브러리와 동일한 기능을 수행하는 DLL 을 만들어두고... 다른 언어의 경우에는
그 DLL 을 제공하면 되는거죠~~ㅋ
-0-;; 샘플코드를 제공해달라고 하는데..-0- VB는 잘 쓰질 못하고... 난감한 상황에서;;
부랴부랴 이것저것 뒤져가며 결국엔 익혔답니다..;;
#define TEST_DLL extern "C" __declspec(dllexport) // 1. 'int' Return TEST_DLL int Test_Sum(int Num1, int Num2); // 2. 'void' Return TEST_DLL void Test_Output(); // 3. 'void*' Return TEST_DLL void* CreateUser();
DLL 에는 위와 같은 함수들이 들어있고, 이 함수들을 VB에서 사용하려면...
먼저 아래와 같이 선언을 해줘야 합니다.
' 1. 'int' Return Declare Function Test_Sum Lib "TestDll.dll" (ByVal Num1 As Integer, ByVal Num2 As Integer) As Integer ' 2. 'void' Return Declare Sub Test_Output Lib "TestDll.dll" () ' 3. 'void*' Return Declare Function CreateUser Lib "TestDll.dll" () As Int32
기본틀은....
Declare [Function / Sub] <FunctionName> Lib "<DLL Name>" (인자들) (As 반환값)
요렇습니다...
그리고 함수 선언문을 작성할 때 알아둬야 되는 몇가지 사항들입니다.
1. 해당함수가 리턴하는 값이 없는 경우(void 형 함수)에는 Sub 를 사용한다.
2. 함수의 인자가 값을 넘겨주는 경우는 ByVal 을 주소값(포인터)를 넘겨주는 경우는 ByRef를 사용한다.
3. 선언의 제일 마지막에는 해당함수의 리턴형태를 As 를 사용해서 지정해준다.
void* 함수처럼 포인터를 리턴하는 경우는 해당 바이트의 수에 맞는 데이터형을 지정한다.
( DLL 에서 32비트 데이터로 리턴을 하면 VB에서도 32비트 데이터형으로 받는다. )
선언이 끝나면 코드에서 사용이 가능한데 사용방법은 C/C++ 에서 함수의 사용과 비슷합니다.
단, Sub 로 선언한 함수의 경우는 Call 명령으로 호출해주도록 합니다.
(ex. Call Test_Output() )
.
.
이런식으로 C++ 로 만들어진 DLL을 VB에서도 사용이 가능합니다.
더 세밀한 내용은 저도 잘 모르는 관계로.. 요정도 선에서 수박겉핥기 정도로..ㅋㅋ
반응형
'Programming' 카테고리의 다른 글
[C/C++] 투명창 만들기~ ( SetLayeredWindowAttributes 사용 ) (3) | 2008.08.01 |
---|---|
[C/C++] Rotate ~ 구현 (5) | 2008.07.19 |
[C/C++] 공유 섹션 사용하기~~ (2) | 2007.08.18 |
[C/C++] 현재 실행중인 프로세스의 실행파일명 구하기... (2) | 2007.08.08 |
[C/C++] 대화상자 기반 프로그램에서 ESC키 눌러도 종료안되도록 하기~ㅋ (0) | 2007.07.08 |