#28. Dynamic Link Library의 사용법

어제 DLL에 대해서 처음 만드는 강좌를 하였을 때 아마도 대부분은 감을 잡지 못하고 우왕좌왕하셨을 분들이 많으리라고 예상이 됩니다. DLL이라고 하는 것이 뭐에 써먹는 물건인지 다들 알고 있지만 막상 작성하려고 보니 그 내용이 쉽지가 않아서 걱정을 하시는 것 같습니다. 그래서 DLL을 작성하는데에 있어서 가지게 될 수 있는 의문점을 풀어보고자 합니다.


DLL이라고 하는 것은 그 자체가 Windows에서 다루는 EXE 바이너리와 그 모양새가 닮았습니다. 사실 어떤 프로그래밍 언어이든 어떤 저작 툴이든 EXE 파일은 EXE 파일일 뿐입니다. 그와 마찬가지로 DLL 파일이 어디서 제작되든 어떻게 만들어지는 DLL일 뿐입니다. 어차피 바이너리는 Windows 형식이기 때문에 Windows에서 사용할 수 있는 바이너리 조회 명령어면 다 먹히게 되는겁니다.


DLL을 작성하는데에 있어서 염두해 두실 것은 외부에서 DLL을 액세스할 수 있도록 길문을 틔어줘야만 한다는 것을 잊으면 안됩니다. 그렇지 않는다면 DLL 자체에서밖에는 사용이 안됩니다. 또 한가지는, 다른 언어에서 사용할 수 있도록 하기 위하여 함수 매개변수상에서는 가급적이면 클래스 데이터 형식 말고 ANSI-C 또는 ANSI-C++ 규격에 따르는 데이터 형식을 선언해 주는 것이 좋습니다. 클래스 데이터 형식을 인지하지 못하는 언어가 많기 때문에 특별히 유의해야 하는 것입니다. 그러나 DLL 내부용이라면 상관없습니다.


실제로 여러분은 외부에서 액세스할 수 있도록 길문을 틔워주고픈 함수의 Define (정의) 앞에다가 이렇게만 붙여주면 됩니다.



    extern “C” __declspec(dllimport) 리턴형 함수명(매개 변수, …);


    extern “C” __declspec(dllexport) 리턴형 함수명(매개 변수, …);


첫 번째 구문은 DLL을 사용하고자 하는 부분에 지정해주면 되는 것입니다.


두 번째 구문은 접근을 허용해 줄 부분에 지정해 주면 되는 것입니다.


실제로 DLL을 처리하는 설정은 어떻게 해주면 좋을까요? 그것은 여러분의 아이디어를 활용하여 암시적/명시적 연결 중 편리한 것으로 택하여 작성하기만 하면 됩니다. 일반적으로 암시적 연결 방법이 간단한 편입니다. 암시적 연결 방법의 경우 단순히 프로토타입만을 지정해 줌으로서 즉시 사용할 수 있도록 완성됩니다. 명시적 연결 방법의 경우 예외 처리 (Exception)를 사용자 정의할 수 있어서 나름대로 각광을 받는 방법이기는 합니다만 손수 해주어야 할 부분이 많은 편입니다.  

댓글 남기기