1.Visual C++で 新規作成 -> Win32 Application を選択、 新しいプロジェクトを作成します。 2.HSPのDLLを作るために使用したCまたはC++のソースファイルをプロジェクトに 追加します。 3.DllMain関数を、「DLL名_DllMain」に変更する。 4.HSPランタイムで必要になる情報を記述したヘッダファイル(.h)を作成して ください。 5.拡張ランタイムのメイン(main.cpp)を作成する。 6.HSPライブラリ(hsp2lib.lib)をプロジェクトに追加します。 7.リソーススクリプト(hsp2.rc)、およびアイコンリソース(hsp2.ico)を プロジェクトに追加します。 8.スタティックリンクするためのライブラリ設定を行ないます。 少なくとも、hsp2lib.libのためにwinmm.libが必要になります。 9.コンパイルして実行ファイルを作成します。 10.うまくいったら、拡張子をhrtにして実際に拡張ランタイムを使った実行 ファイルを作成してテストを行なってみてください。
/* 拡張ランタイムのためのヘッダ */ #define grv_Ver 0x0000 // 拡張ランタイムのバージョン(0x0000) #define grv_Name "grv.dll" // DLLのファイル名(小文字で拡張子も含めること) /* DllMain関数の宣言をする (DllMainを「DLL名_DllMain」に変更したもの) */ int WINAPI grv_DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpvReserved); extern "C" { /* DLLで使用されている関数のプロトタイプ宣言をする (Cの形式でexternする) */ BOOL WINAPI grv_ini(int,int,int,int); BOOL WINAPI grv_work(int,int,int,int); BOOL WINAPI grv_offset(int,int,int,int); BOOL WINAPI grv_hcopy(int,int,int,int); BOOL WINAPI grv_copy(int,int,int,int); BOOL WINAPI grv_cls(int,int,int,int); BOOL WINAPI grv_cput(int,int,int,int); BOOL WINAPI grv_prt(int,int,int,int); BOOL WINAPI grv_spput(int,int,int,int); BOOL WINAPI grv_spexe(int,int,int,int); } static char *grv_hspfnc[] = { /* HSPのスクリプトで定義されている命令の名前(小文字)と それに対応する関数を指定する。 「"HSP定義命令名", (char *)DLL関数名,」 のように指定してください。 「NULL, NULL」が最後の行になります。 */ "grv_ini", (char *)grv_ini, "grv_work", (char *)grv_work, "grv_offset", (char *)grv_offset, "grv_hcopy", (char *)grv_hcopy, "grv_copy", (char *)grv_copy, "grv_cls", (char *)grv_cls, "grv_cput", (char *)grv_cput, "grv_prt", (char *)grv_prt, "grv_spput", (char *)grv_spput, "grv_spexe", (char *)grv_spexe, NULL, NULL };
/*-------------------------------------------------------- HSP enhanced runtime source --------------------------------------------------------*/ #include <windows.h> #include <stdio.h> #include <string.h> #include "hspdll.h" // 必ずincludeしてください #include "hsp2lib.h" // 必ずincludeしてください /* 拡張ランタイムのためのヘッダをinclude */ #include "grv.h" /* 拡張ランタイムのためのメインプログラム */ int APIENTRY WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdParam, int iCmdShow ) { int stat; HSPCMD_INFO info; info.ver = grv_Ver; /* ヘッダで定義したもの */ info.hspfnc = grv_hspfnc; /* ヘッダで定義したもの */ strcpy( info.name, grv_Name ); /* ヘッダで定義したもの */ HSPSetFunc( &info ); /* DLL関数を登録する */ /* DLL初期化関数を呼び出す */ grv_DllMain( hInstance, DLL_PROCESS_ATTACH, NULL ); /* HSPメイン部分を呼び出し */ stat = HSPWinMain( hInstance, hPrevInstance, lpCmdParam, iCmdShow ); /* DLL終了関数を呼び出す */ grv_DllMain( hInstance, DLL_PROCESS_DETACH, NULL ); return stat; }HSPSetFunc関数でDLL関数を最初に登録します。 複数のDLLを登録するには、その回数だけHSPSetFunc関数を呼び出して下さい。 また、初期化と終了処理のため、DllMainをメインから呼び出す必要があります。 これも、登録したDLLの個数だけ行なって下さい。