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の個数だけ行なって下さい。