종달랩 종다리 이야기

DLL 만들고 사용하는 방법 정리

Computer Science/프로그래밍 TIP
반응형

dll을 만드는 방법

일반적으로 DLL 을 만드는 방법은 여러가지 책과 웹페이지에 많이 나와있다.

프로젝트를 만들때 정적 또는 동적 DLL을 선택한 다음에 __declspec(dllexport)를 이용해서 DLL을 선언하면 된다.

예제)
extern "C" __declspec(dllexport) INT Factory(INT n)
{
if(n<=1)
return 1;
else
return (n*Factory(n-1));
}

사용하는 쪽에서는 LoadLibrary함수와 GetProcAddress함수를 이용해서 해당 DLL을 로드하고 함수를 찾아내서 호출하면 된다.

예제)
HINSTANCE hDll;
hDll = LoadLibrary(_T("Example.dll"));

typedef int(*FactoryFunc)(int num);
FactoryFunc lpFactoryFunc;

lpFactoryFunc = (FactoryFunc)GetProcAddress(hDll, "Factory");
lpFactoryFunc(4)

// 위 예제에는 에러처리코드들은 다 빠졌다.

그런데 위의 형태는 코드를 가독하기에 까다로운 예약어들이 많이 나와있다. 예약어 없이 깔끔하게 하는 방법은 def파일을 이용하는 것이다.

DLL프로젝트에 "모듈 정의 파일 파일(.def)"를 추가한다. (Visual Studio 2003이상에서부터 지원하는 것으로 안다.)

추가하고 EXPORTS밑에 외부에서 호출될 DLL들을 나열하면 된다.

이렇게 하면 위의 Factory파일을 다음과 같이 깔끔하게 줄일 수 있다.

extern "C" INT WINAPI Factory(INT n)

개인적으로 __declspec(dllexport)가 줄었다는 것만으로도 눈이 피로해지지 않아서 좋다.
반응형