사실 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에서도 사용이 가능합니다.

더 세밀한 내용은 저도 잘 모르는 관계로.. 요정도 선에서 수박겉핥기 정도로..ㅋㅋ

신고