MakeHPI/VC++
プラグインからWin32 API MessageBox?()を呼び出す †
- スクリプトに
msgbox
と書けばプラグインで用意した(固定された)メッセージボックスを表示するhsmsgboxプラグインを作ります。
HSP3SDKのサンプルのインストール先が次の場所であると仮定して解説します。
<HSPSDKインストールフォルダ>\hspsdk31\sample\hpi3sample
新規ソリューションを作成する
- スタート → Visual C++ 9.0 Express Edition → Microsoft Visual C++ 2008 Express Edition
として通常通りVC++を起動します。
- [メニュー]:ファイル → 新規作成 → プロジェクト
新しいプロジェクトダイアログが開く。
- 「Win32プロジェクト」を選択。プロジェクト名に「testdll」と入力してok。(適当なプロジェクト名でいいが説明のためこの名前にしている。)
Win32アプリケーションウィザードが開く。次へ。
- アプリケーションの種類:DLL
追加のオプション:空のプロジェクト
を選択。完了。
必要なファイルをそろえる
- ソリューションエクスプローラのプロジェクトを右クリック → 追加 → 既存の項目
ファイルダイアログが開く
- <HSPSDKインストールフォルダ>\hspsdk31\sample\hpi3sample
を開いて、
"hsp3plugin.cpp" "hsp3debug.h" "hsp3plugin.h" "hsp3struct.h" "hspvar_core.h" "hspwnd.h"
を選択して、開く。
プロパティを設定する
- [メニュー]:プロジェクト → プロパティ
(ソリューションエクスプローラのプロジェクトを右クリック → プロパティでもいい。)
プロパティページダイアログが開く。
- 構成(C):すべての構成
- 構成プロパティ → C/C++
追加のインクルードディレクトリ:<HSPSDKインストールフォルダ>\hspsdk31\sample\hpi3sample
と、さっきhsp3plugin.cpp等が置いてあったフォルダを指定してパスを通す。
- 構成プロパティ → 全般
文字セット:マルチバイト文字セットを使用する
- 構成プロパティ → C/C++ → 全般
64ビット移植への対応:いいえ
- 構成プロパティ → C/C++ → コード生成
ランタイムライブラリ:マルチスレッド(/MT)
初期XP以前のWindowsへの対応のため。
- OKをクリックして閉じる。
コードを書く
- ソリューションエクスプローラのソースファイルを右クリック → 追加 → 新しい項目
新しい項目の追加ダイアログが開く。
コードから、「C++ファイル(.cpp)」を選択してmain.cppと入力する。適当なファイル名でいいが、説明のためこの名前にしている。
- 追加。
- 作成されたメインソース用ファイルに、下のソースリストにあるmain.cppの内容をコピーして貼り付ける。
ビルドしてみます。
[メニュー]:メニュー → ビルド → ソリューションのビルド
ビルド結果が、「ビルド: 1 正常終了、0 失敗、」と表示されれば成功。
Debugフォルダにtestdll.dllが作成されているはずです。
dlltest.hspをtestdll.dllと同じ場所に置く。
dlltest.hspを開いて、実行。
エラーが出ずに、メッセージボックスが開けば成功です。
+
| | main.cpp:VC++のメイン
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
-
|
|
|
|
|
|
!
-
|
|
|
|
-
|
|
|
|
|
|
|
!
|
!
-
|
|
|
!
-
|
|
|
|
!
|
#define WIN32_LEAN_AND_MEAN #include <windows.h>
#include "hsp3plugin.h"
static void msgbox( void )
{
MessageBox( NULL,
"メッセージボックス",
"テスト",
MB_OK );
return;
}
static int cmdfunc( int cmd )
{
code_next();
switch( cmd ) {
case 0x00: msgbox();
break;
default:
puterror( HSPERR_UNSUPPORTED_FUNCTION );
}
return RUNMODE_RUN;
}
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE;
}
EXPORT void WINAPI hsp3cmdinit( HSP3TYPEINFO *info )
{
hsp3sdk_init( info ); info->cmdfunc = cmdfunc; }
|
|
+
| | dlltest.hsp:HSPのスクリプト
|
1
2
3
4
5
|
| #regcmd "_hsp3cmdinit@4","dlltest.dll"
#cmd msgbox 0x00
msgbox
stop
|
|
通常は、プラグイン作成に必要なこれらのファイルは内容を変更することはありません。
"hsp3plugin.cpp" "hsp3debug.h" "hsp3plugin.h" "hsp3struct.h" "hspvar_core.h" "hspwnd.h"
そのため今回は、ファイルへ直接リンクさせる方法での説明としました。
作成しているソリューションのフォルダ内にこれらのファイルをコピーしてしまえば、パスを通す必要はありません。
都合のいい方法でご利用ください。
メインソースを作成するときは、hpi3sampleのmain.cppがとても参考になります。
これをベースに作成していくといいでしょう。