ダイナミックリンクライブラリDLL


VCで作成するDLLおよび呼び出し+DLLからC++クラス1をエクスポートする.空のダイナミックリンクライブラリプロジェクトを作成する:Win 32 Dynamic-Link Library 2.Dll 1を追加します.h、コードは:
#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllimport)
#endif

DLL1_API int add(int a,int b);

class DLL1_API Point
{
public:
    Point();
    ~Point();

    void output(int x,int y);
protected:
private:
};

Point::Point()
{
}

Point::~Point()
{
}

Dll 1を追加します.cpp、コード:
#include <WINDOWS.H>
#include <STDIO.H>

#define DLL1_API _declspec(dllexport) //      ,        ,       
#include "Dll1.h"

int add(int a,int b)
{
    return a + b;
}

void Point::output(int x,int y)
{
    //                     
    HWND hwnd = GetForegroundWindow();
    //  DC
    HDC hdc = GetDC(hwnd);
    char buf[20];
    memset(buf,0,20);
    sprintf(buf,"x = %d,y = %d",x,y);
    //    
    TextOut(hdc,0,0,buf,strlen(buf));
    //  DC
    ReleaseDC(hwnd,hdc);
}

コンパイル後にDll 1を得る.dll,Dll1.lib 3.名前の改編問題の解決:Dll 1を追加します.defファイル、コードは以下の通りです.
LIBRARY Dll1
EXPORTS
add
output

効果図:4.暗黙リンク:Dllを呼び出すと、まずDll 1が呼び出されます.hDll1.dll,Dll1.libは、D:Program FilesMicrosoft Visual StudioMyProjectsDllTestのようなプロジェクトのルートディレクトリの下に配置し、プロジェクト設定、Dll 1を追加します.libファイル、例えば図:ヘッダファイルの追加:#include "Dll1.h"呼び出しコード:
void CDllTestDlg::OnBtnAdd() 
{
    // TODO: Add your control notification handler code here
    CString str;
    str.Format("5 + 3 = %d",add(5,3));
    MessageBox(str);

    Point pt;
    pt.output(5,3);

}

リンクを表示:
void CDllTestDlg::OnBtnAdd() 
{
    // TODO: Add your control notification handler code here

// 
// Point pt;
// pt.output(5,3);

    HINSTANCE hInst;
    hInst = LoadLibrary("Dll1.dll");
    typedef int (_stdcall *ADDRPROC) (int a,int b);    //_stdcall      
    ADDRPROC Add = (ADDRPROC)GetProcAddress(hInst,MAKEINTRESOURCE(4));
    if(!Add)
    {
        MessageBox("        !");
        return;
    }

    CString str;
    str.Format("5 + 3 = %d",Add(5,3));
    MessageBox(str);
}

動的ロード方式でdllを使用する場合、アクセスが必要な場合、LoadLibary関数を呼び出してdllをロードします.このdllにアクセスする必要がなくなると、FreeLibrary関数を呼び出してdllへの参照を解放する.