DLLの作り方

by K.I
2008/09/08

Index


概要

DLLとは


1これは暗黙的なリンクと言う。

[top]

DLLを作ってみよう

仕様

DLLのプロジェクトを作る

設定

DLLのエキスポート

グローバル変数

typedef struct inputbox_global {
        HINSTANCE       hinst;
        char            input_buffer[256];
        char            prompt[256];
} *inputbox_globalptr;

stdafx.h

DLLMain

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        g.hinst = (HINSTANCE)hModule;
                strcpy(g.input_buffer,"");
                break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
                break;
        }
    return TRUE;
}

リソース作成

InputBoxの記述

動作記述

LRESULT CALLBACK InputBoxProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
    switch (msg) {
                case WM_INITDIALOG:
                        // タイトルとプロンプトの表示
                        SetWindowText(hDlg,"InputBox");
                        SetWindowText(GetDlgItem(hDlg,IDC_STATIC1),g.prompt);
                        return TRUE;
                case WM_COMMAND:
            switch (LOWORD(wp)) {
                case IDOK:
                        Edit_GetText(GetDlgItem(hDlg,IDC_EDIT1),g.input_buffer, sizeof(g.input_buffer));
                        EndDialog(hDlg, IDOK);
                        return TRUE;
                case IDCANCEL:
                        EndDialog(hDlg, IDCANCEL);
                        return TRUE;
            }
                        break;
    }
    return FALSE;
}

2SJISとかEUC等の文字セット。WindowsではSJISということになるけど。
3リソースIDの変更を繰り返すとID番号がおかしくなることがある。

[top]

DLLをテストする

テストプログラムの素を作る

テスト用プロジェクト設定

メインプログラムを記述

DLLのリンクについて

まとめ


[top]

エラーについて

LNK2019: 未解決の外部シンボル

dllが指定したパスに見つからない

リソースIDについて


[top] [プログラムの部屋に戻る]

comments powered by Disqus