프로그래밍 노트

초간단 DLL만들기(VC) 그리고 DLL 불러다 쓰기(VC) 예제 본문

Win32 SDK 초보

초간단 DLL만들기(VC) 그리고 DLL 불러다 쓰기(VC) 예제

띠리 2007. 5. 10. 19:00
우선 예제만 간단한 예제 소개부터...
그냥 밑에 소스를 가지고 프로그램을 만들기만 하면 된다.
DLL만들때는 VS2005에서 만들때는
빈 프로젝트를 만들어서 소스 파일을 하나 추가해서 아래 소스를 붙여 넣는다.
메뉴의 프로젝트(P) > ??? 속성(P)...을 선택한다.
구성 속성 > 일반을 선택한뒤
프로젝트 기본값의 구성형식을 동적 라이브러리(.dll)을 선택하면 된다.

DLL 불러쓰기의 프로젝트는 그냥 Win32콘솔 응용 프로그램에서
빈 프로젝트를 만들어서 소스를 추가하면 된다.
문자 집합은 멀티바이트 문자 집합 사용을 선택하면 밑에 소스를 그대로 쓸수있다.


초간단 DLL만들기


#include <stdio.h>

#include <windows.h>


#define EXPORT extern "C" __declspec(dllexport)


// DLL을 로드한 곳에서 EXPORT한 함수명을 쓸수있게 함

EXPORT int APlusB(int nA, int nB);

EXPORT int AMinusB(int nA, int nB, int& nVal);


BOOL APIENTRY DllMain(HANDLE hModule,

                      DWORD ul_reason_for_call,

                      LPVOID lpReserved)

{

    return TRUE;

}


EXPORT int APlusB(int nA, int nB)

{

    return nA + nB;

}


EXPORT int AMinusB(int nA, int nB, int& nVal)

{

    if(nA > nB)

    {

        nVal = nA - nB;

        return TRUE;

    }

    else

        return FALSE;

}


DLL불러쓰기


#include <stdio.h>

#include <windows.h>


// DLL에서 호출할 함수의 형

typedef int (*APlusB)(int, int);

typedef int (*AMinusB)(int, int, int&);


int main()

{

    HINSTANCE    hInst;


    APlusB    fAPlusB;

    AMinusB    fAMinusB;


    // DLL 로드

    hInst = LoadLibrary("SmallDll.dll");


    if(hInst == NULL)

        return 1;


    // 호출한 함수를 맵핑

    fAPlusB = (APlusB)GetProcAddress(hInst, "APlusB");

    fAMinusB = (AMinusB)GetProcAddress(hInst, "AMinusB");


    int            nA = 700;

    int            nB = 200;

    int            nRet = 0;

    int            nRetVal = 0;


    nRet = fAPlusB(nA, nB);

    printf("%d + %d = %d\n",nA, nB, nRet);


    nRet = fAMinusB(nA, nB, nRetVal);

    if(nRet)

        printf("%d - %d = %d\n",nA, nB, nRetVal);

    else

        printf("%d < %d \n",nA, nB);


    // DLL 언로드

    FreeLibrary(hInst);


    return 0;

}



Comments