RSS

LoadLibrary (Win32) サンプル

22 11月

LoadLibrary (Win32 API) を使ってDLL関数を使うサンプル。インポートライブラリがなくてもDLLを使用できる。

Borland C++ Builder

/**********************************************************************

 LoadLibrary Test

 **********************************************************************/

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Main.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

struct Define_s    {             //ボード設定用
 char    szBoardName[22];    //ボード名
 WORD    wStartNum;        //論理接点開始番号
 WORD    wStartPort;        //論理ポート開始番号
};
typedef struct Define_s DEFINE;

// UINT DioDefine(DEFINE* lpDefine, WORD wBoardNum, WORD default);
typedef UINT _stdcall TFuncDioDefine(DEFINE* , WORD, WORD);
TFuncDioDefine* DioDefine;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//  DLLをロードする
void __fastcall TForm1::cmdLoadClick(TObject *Sender)
{
 char buff[256];

 // システムディレクトリを得る
 UINT retval = GetSystemDirectory(buff, sizeof(buff));
 if (retval == 0)
 {
 Application->MessageBox("システムディレクトリの取得に失敗した。", "エラー", MB_OK|MB_ICONHAND);
 return;
 }

 // DLLへのパスを得る
 AnsiString DllPath = AnsiString(buff) + "\\" + Edit1->Text;

 // DLLをロードする
 hInstance = LoadLibrary(DllPath.c_str());
 if (hInstance == NULL)
 {
 Application->MessageBox("DLLのロードに失敗した。", "エラー", MB_OK|MB_ICONHAND);
 return;
 }

 // DioDefine関数のアドレスを得る
 DioDefine = (TFuncDioDefine*)GetProcAddress(hInstance, "DioDefine");
 if (DioDefine == NULL)
 {
 Application->MessageBox("関数DioDefineのアドレス取得に失敗した。", "エラー", MB_OK|MB_ICONHAND);
 return;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 if (hInstance != NULL)
 FreeLibrary(hInstance);
}
//---------------------------------------------------------------------------
 
コメントする

投稿者: : 2010/11/22 投稿先 C

 

タグ: , , ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中