728x90
반응형
윈도우 프로그램을 작성하다보면 DLL 파일을 이용할 때가 있다.
테스트 목적의 간단한 DLL 파일을 만들고 로딩하는 방법은 다음과 같다.
1. DLL 만들기
기본적인 DllMain 만 덜렁있으면 아래 define 을 정의한다.
#define EXPORT extern "C" __declspec(dllexport)
자신이 작성하려는 함수를 작성한다.
(MyFunc1 은 MessageBox를 이용해 인자값으로 메시지창을 띄우는 간단한 함수이다.)
EXPORT int MyFunc1( char *pString )
{
MessageBox( NULL, pString, "DEMO", MB_ICONWARNING );
return TRUE;
2. DLL 이용
DLL을 이용하는 방법에는 크게 암시적(implicit) 방법 혹은 임포트(import) 라이브러리 연결 방법와 명시적(explicit) 방법이 있다고 한다. 암시적 방법은 컴파일시 나오는 중간 LIB를 링크시켜줘야 한
다. 따라서, 이 방법보다는 명시적 방법이 더 간편하다.
명시적 방법은 크게 다음과 같이 사용된다.
(1) LoadLibrary를 이용한 DLL 로드
(2) GetProcAddress를 이용한 함수 주소 얻기
(3) FreeLibrary를 이용한 DLL 언로드
테스트 목적의 간단한 DLL 파일을 만들고 로딩하는 방법은 다음과 같다.
1. DLL 만들기
기본적인 DllMain 만 덜렁있으면 아래 define 을 정의한다.
#define EXPORT extern "C" __declspec(dllexport)
자신이 작성하려는 함수를 작성한다.
(MyFunc1 은 MessageBox를 이용해 인자값으로 메시지창을 띄우는 간단한 함수이다.)
EXPORT int MyFunc1( char *pString )
{
MessageBox( NULL, pString, "DEMO", MB_ICONWARNING );
return TRUE;
}
컴파일하면 외부에서 MyFunc1 을 호출 할 수 있다.
이때 "C"를 빼고 __declspec(dllexport) 로 직접 해줄 경우 export 함수 뒤에 이상한 값이 붙어서 로딩할 때 조금 귀찮게 된다.
- "C" 스타일로 진행하면 함수명이 이상하게 되는걸 예방할 수 있다.
"C" 없이 컴파일된 DLL 파일의 export 함수를 보면 KeyboardProc가 ?KeyboardProc@@YGHJIJ@Z처럼 된다.
하지만, CALLBACK 형태의 경우는 "C"가 있어도 _KeyboardProc@12 와 같이 처음 의도한 KeyboardProc가 되지는 않는다.
컴파일하면 외부에서 MyFunc1 을 호출 할 수 있다.
이때 "C"를 빼고 __declspec(dllexport) 로 직접 해줄 경우 export 함수 뒤에 이상한 값이 붙어서 로딩할 때 조금 귀찮게 된다.
- "C" 스타일로 진행하면 함수명이 이상하게 되는걸 예방할 수 있다.
"C" 없이 컴파일된 DLL 파일의 export 함수를 보면 KeyboardProc가 ?KeyboardProc@@YGHJIJ@Z처럼 된다.
하지만, CALLBACK 형태의 경우는 "C"가 있어도 _KeyboardProc@12 와 같이 처음 의도한 KeyboardProc가 되지는 않는다.
2. DLL 이용
DLL을 이용하는 방법에는 크게 암시적(implicit) 방법 혹은 임포트(import) 라이브러리 연결 방법와 명시적(explicit) 방법이 있다고 한다. 암시적 방법은 컴파일시 나오는 중간 LIB를 링크시켜줘야 한
다. 따라서, 이 방법보다는 명시적 방법이 더 간편하다.
명시적 방법은 크게 다음과 같이 사용된다.
(1) LoadLibrary를 이용한 DLL 로드
(2) GetProcAddress를 이용한 함수 주소 얻기
(3) FreeLibrary를 이용한 DLL 언로드
728x90
반응형
'팁!팁!팁! > 프로그래밍' 카테고리의 다른 글
과거 컴퓨터 프로그래밍 관련 잡지 내용 (9) | 2012.09.24 |
---|