ホーム
| アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips

DLL から目的の API 関数を呼び出す 

更新 : 2010/07/02

 


解説:
Windows には kernel32.dll や user32.dll など、API を提供するための DLL があり、アプリケーションはこの中のプログラムコードを呼び出して特定の機能を実現しています。

LoadLibrary 関数と GetProcAddress 関数を実装することで、DLL に入っている API 関数が呼び出せます。C++Builder でインクルードファイルやライブラリファイルが定義されていない場合でも、API 関数を使うことができるようになります(インクルードファイル、ライブラリファイルが定義されている場合はこちら)。
この呼び出し方法を知っておくと、相当役立ちますので、覚えておくことをお勧めします。

関連情報が 「解凍ソフトは難しい!」 にもありますので参考にしてください。

使用例:
アプリケーション起動後、Button1 をクリックして、shlwapi.dll から 「パスを文字数指定で省略する」 関数を呼び出します。呼び出しに成功するとメッセージが返ります。

準備としては、Button をひとつ配置するだけです。

まず呼び出したい関数を 
    typedef 戻り値の型 (関数名)(引数の型); 
という書式で定義しておきます。

Button1 の OnClick イベントハンドラで、 LoadLibrary 関数を使って DLL の存在を確認します。
PATHCOMPACTPATHEX 型の変数を用意して、GetProcAddress 関数で API 関数を呼び出します。メッセージが返ったら、目的の処理を行います。
FreeLibrary で後始末して終わりです。

他の API 関数も呼び出せますので、試してみてください。

typedef BOOL (*PATHCOMPACTPATHEX)(LPTSTR, LPCTSTR, UINT, DWORD);
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HINSTANCE hDLL = LoadLibrary("shlwapi.dll");

    if (hDll == NULL) { 
        ShowMessage("'shlwapi.dll' がありません。");
        return;
    }

    PATHCOMPACTPATHEX PathCompactPathEx;
    PathCompactPathEx = (PATHCOMPACTPATHEX)GetProcAddress(
                                                                                hDLL,  
                                                                                "PathCompactPathExA");

    if (PathCompactPathEx != NULL) {
        ShowMessage("API 関数を呼び出しました。");

        // 目的の処理
    }

    FreeLibrary(hDLL);
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.