DLL 시작

7244 단어 dll
DllTest 프로젝트
QMath.h
#pragma once



#ifdef API_EXPORT

#define DLL_CLASS __declspec(dllexport)

#define DLL_API extern "C" __declspec(dllexport)

#else

#define DLL_CLASS __declspec(dllimport)

#define DLL_API extern "C" __declspec(dllimport)

#endif



DLL_API int Add(int a, int b);

DLL_API int Sub(int a, int b);





class DLL_CLASS QMath

{

public:

    int Add(int a, int b);

    int Sub(int a, int b);

};

QMath.cpp
#include "StdAfx.h"



#define API_EXPORT

#include "QMath.h"



int Add(int a, int b)

{

    return (a+b);

}



int Sub(int a, int b)

{

    return (a-b);

}



int QMath::Add(int a, int b)

{

    return (a+b);

}



int QMath::Sub(int a, int b)

{

    return (a-b);

}

dllmain.cpp
#include "stdafx.h"



BOOL APIENTRY DllMain( HMODULE hModule,

                       DWORD  ul_reason_for_call,

                       LPVOID lpReserved

                     )

{



    return TRUE;

}

 
Test 테스트 프로젝트:
암시적 로드:
세 개의 파일이 필요합니다: *.h、*.lib、*.dll
//    

#include "../DllTest/QMath.h"

#pragma comment(lib, "../Debug/DllTest.lib")

int _tmain(int argc, _TCHAR* argv[])

{

    int nRet = Add(1, 2);

    nRet = Sub(1, 2);



    QMath m;

    nRet = m.Add(1, 2);

    nRet = m.Sub(1, 2);



    return 0;

}

로드를 표시하려면 다음과 같이 하십시오.
필요한 파일: *.dll
//    

typedef int (*ADD_PROC)(int a, int b);

typedef int (*SUB_PROC)(int a, int b);

int _tmain(int argc, _TCHAR* argv[])

{

    HMODULE hModule = ::LoadLibrary(_T("../Debug/DllTest.dll"));

    if ( NULL == hModule )

        return 0;

    ADD_PROC Add = (ADD_PROC)::GetProcAddress(hModule, "Add");

    SUB_PROC Sub = (SUB_PROC)::GetProcAddress(hModule, "Sub");

    int nRet = 0;

    {

        if ( Add )

            nRet = Add(1, 2);

        if ( Sub )

            nRet = Sub(1, 2);

    }

    ::FreeLibrary(hModule);

    hModule = NULL;



    return 1;

}

좋은 웹페이지 즐겨찾기