아, 정말이지 MS는 기술 지원 하나만으로도 먹고 살 것 같습니다.
VB에서 사용할 C DLL을 만들때마다 자료 찾느라 귀찮았는데 정리도 잘 되어있고 아주 심플하면서도 사용하기 편리하게 되어있습니다.

링크 : KB189133

VB 프로그래머들은 C/C++로 만들어진 소스나 라이브러리를 받게 되면 고민을 하게 됩니다.
소스나 static library일 경우에 _stdcall 방식의 함수 export를 제공하는 DLL 작성하면 그만이라 고민이 좀 적겠지만 컴파일된 dynamic library인데다가 _stdcall 호출 방식을 사용하지 않는 일반 C DLL이면 참 사용하기 애매하죠.

이걸 무식하게 다시 _stdcall을 사용한 dll을 만든다면
C DLL -> (_stdcall) C DLL -> VB declare Module -> VB code...
이런 과정을 거치는데 VB에서 Declare문을 사용하여 일일이 선언해야 하는 것도 참 귀찮습니다. 게다가 내부적으로 enum과 같은 편리한 도구를 지원하지 않으니 보통 C DLL을 래핑하는 VB 모듈을 또 만들게 되죠.

이왕 한다리 거치는 김에! ATL을 사용하여 COM DLL로 래핑하자니 ATL이란게 만만치가 않은 작업이라 배보다 배꼽이 커지는 꼴이 될 수 있습니다. 게다가 라이브러리 내부적으로 스레드가 필요한 경우라면 COM 마샬링 관련해서 머리에 쥐나게 되죠. -ㅅ-

사실 VB를 쓰는게 쉽고 빠르게 하기 위해서인데 라이브러리좀 쓰자고 저런 삽질을 해서야 되겠습니까?
그런 점에서 KB189133 문서는 정말 좋은 팁이죠.

이 문서를 참조해서 만든다면,
C DLL -> (_stdcall) C DLL + Type Library -> VB code...
이런식으로 과정을 하나 줄일 수 있을 뿐만 아니라 C DLL 내에 Type Library(TLB)를 내장하여 미리 필요한 Enum이나 공용 모듈을 등록해놓을 수 있으므로 지저분하게 VB에 Declare하고 래핑하는 과정이 필요 없어집니다.

이미 VS5 시절에 나왔던 문서인 것 같은데 이제서야 보게 되다니 그간의 삽질이 눈물겨울 뿐이지요. 후우...

이 문서 덕분에 어지간한 C 라이브러리를 VB에서 사용할때 어렵게 ATL DLL을 만들지 않고도 잘 써먹을 수 있을 것 같습니다. 덤으로 TLB를 만들고 활용하는 요령도 얻을 수 있구요.
신고
Posted by gongdo
TAG , ,


티스토리 툴바