라이프로그


[WIN32]DLL 사용하기 win32

파일버젼

내용

날짜

1.0.1

최초작성

2012년11월24일

   

음…

이 포스팅에서는

Dll의 함수를 사용하는 방법에 대해서

이야기 해봐요.


 

Dll

Dll이 뭐죠?


Dynamic link libaray..

즉, 다이나믹하게

링크할 수 있는

라이브러리라 이거죠..


 

그렇다면, 어떻게 다이나믹하게

링크할 수 있을까요?


 

링크..

Link

연결한다는 거죠?~!


두가지 함수를 알면 됩니다.

두개~!

2가지 함수가 뭐가 있는지 확인해보겠습니다.


 

LoadLibrary()

GetProcAddress()


 

Kernel32.dll
있는
함수
입니다.


 

LoadLibrary()함수로 dll
오픈하고

GetProcAddress()함수로 dll 안에
있는
함수를
오픈합니다.


 


해봅시다.


 

Kernel32.dll
오픈하고

그안에
있는
함수
하나를
사용해보죠~!


 

Beep()라는
함수를
오픈해서
사용해보죠..


 

..


 

해봅시다.


 

직접코딩해보죠..




 


코딩하겠습니다.


 


 


 

HMODULE hKernel32 = NULL;


 

    hKernel32 = LoadLibrary(L"c:\\Windows\\System32\\kernel32.dll");


 

    if ( NULL == hKernel32 )

    {

        dwError = GetLastError();

        goto error;

    }

    

이렇게
하면,로드가
됩니다.

그리고,

리턴되는
값은

HMODULE 이라는
값이
리턴됩니다.


 


 

다음
그림은
디버깅을

화면입니다.

hKernel32
값을
확인해보죠~


 


 



 

hKernel32 에는 0x77160000 라는
값이
할당
되었습니다.


값은
무엇일까요?


 


값은, kernel32.dll
프로세스에
로드된
주소입니다.



 

프로세스에
로드된 kernel32.dll
로드된
주소, 0x77160000
리턴
받는
것입니다.

~, kernel32.dll 로드는
되었습니다.


 


 

. 그러면, kernel32.dll
있는 Beep라고
하는
함수를
로드합니다.


 

GetProcAddress()함수를
이용하면
됩니다.


 


 



 


재미있습니다.

..해봅시다.

"Beep"라는
함수주소를
얻어내봅시다.


 


 

PVOID pBeep = GetProcAddress(hKernel32, "Beep");


 

LoadLibrary()
hKernel32

그리고, 함수이름을
넘겨주면
됩니다. "Beep"


 

그러면, pBeep에는 Beep() 함수(Procedure) 주소(Address)
넘겨주는
것입니다.


 

..함수주소를
받았습니다.

디버깅으로
어떤
값이
넘어
왔는지
확인해봅시다.


 


 



 


 

그러네요~

Beep함수
주소를
받았는디~

어떻게
Call해야
하죠?


모르겠네요

주소는
얻었는디


호출을
어떻게
해야할지
모르겠네요

그래서

만들어진게..함수주소를
담는
포인터주소가
따로
있다는..


 

함수포인터주소
대해서는
다른
포스팅이
있습니다.


 

함수
포인터를
만듭시다.

Beep 함수의
주소를
받을

있는
함수포인터
말입니다.


 


이렇게
만들면
되겠죠?



 



 


 


 


..만든
함수포인터에 GetProcAddress
알아낸
주소를
담아서
호출해봅시다.


 


 


 


 

PVOID pvBeep = GetProcAddress(hKernel32, "Beep");

    

    BOOL (WINAPI *pBeep)(DWORD, DWORD);


 

    pBeep = (BOOL (WINAPI *)(DWORD,DWORD))pvBeep;


 

    pBeep(300,300);


 


 


 

pBeep()
호출하면

스피커에서
소리가
~하고

소리가
나는군요~~!

..이것으로 LoadLibary

GerProcAddress, 그리고

함수
포인터로
함수를
호출하는
것을
연습했습니다.


 


 

dll를 사용하기 위해서는 3가지만 알면됩니다~


 



 


 


 

LoadLibary001.7z




통계 위젯 (화이트)

216
108
565329

이 이글루를 링크한 사람 (화이트)

105