#挨拶
はじめましての方は初めまして。あめふりてる*です。
この記事は、TCU-CTRL場外乱闘 Advent Calendar 2020の記事です。
昨日は、コットンさんの「敗北を知った就活生の話」でした。就活の厳しさを肌にきざんでくるような記事でした。自己分析ぃ…ですかねぇ。
さて、12日目の今日は、HSP3でのDLLの作り方と使い方の初歩の初歩 についての記事です。
この記事を書く経緯ですが、HSP用のDLLの作り方を調べると、ほとんどがVisual Studio 2010や2008を使っています。これでは、今作ってみたいと思っている人の環境構築が大変です。そこで、2020年12月現在最新バージョンのVisual Studio 2019を使用することで、環境構築のハードルを下げてしまおうと思いたちました。これが、経緯です。
「C++は書いたことあるけど、HSPは書いたことないなぁ」という人向けにもなるかと思っております。
#0.注意事項
この記事は、C/C++で簡単な関数が書けるという人向けに書いています。そのあたりが怪しいなと思った方は、C/C++の関数をおさらいしてからまた読み直してみてください。
そして、この記事はWindows環境であることを前提として書いています。あらかじめご了承ください。
#1.環境構築
この章では、必要なもののダウンロードをします。
必要なものは以下の通りです。
1.Visual Studio 2019のインストール
2.HSP3
3.HSP用DLL開発用テンプレートのインストール
ひとつずつダウンロードしていきましょう。
##1.Visual Studio 2019のインストール
初めにVisual Studio Community 2019をダウンロードします。
Visual Studio 2019
ダウンロードが終わったら、実行しましょう。実行すると以下のような画面が出てくるので「続行」を押しましょう。
以下の画面が出てきたら、「C++によるデスクトップ開発」にチェックを入れ、右下のインストールを押します。
以下の画面で時間がかかるので、気長に待ちましょう。
インストールが終わるとVisual Studio 2019が立ち上がります
これで、Visual Studio 2019のインストールは完了しました。
##2.HSP3のインストール
HSP3のインストールに関しては、「HSP3最新版のインストール方法」を参照してください。
##3.HSP用DLL開発用テンプレートのインストール
初めに、DELL_FOR_HSP.zipをダウンロードします。
ダウンロード出来たら、エクスプローラーを開き、C:\User\<ユーザーの名前>\ドキュメント\Visual Studio 2019\Templates\ProjectTemplates\
の中にコピーします。私の場合、ユーザー名が「作業場」なので、C:\User\作業場\ドキュメント\Visual Studio 2019\Templates\ProjectTemplates\
の中にコピーすればよいことになります。以下の画像のようになっていたらOKです。
Visual Studio 2019を立ち上げて、新しいプロジェクトの作成を開き、テンプレートの下のほうに「DLL_FOR_HSP」が生成されていたらインストール完了です。
これで、環境構築は終了です。
#2.DLLを作る
さて、環境構築が終わったので実際にDLL作って動かしてみましょう。
##1.プロジェクトを作成する
Visual Studio 2019を立ち上げて、新しいプロジェクトの作成を開き、「DLL_FOR_HSP」を選択して、右下の次へを押します。
次に、プロジェクト名と場所を入力し、作成を押します。今回私は、画像のようにしました。
##2.main.cppに関数を書き加える
プロジェクトができたら、main.cppに関数を書き加えます。
今回は、入力された整数を二倍にする「IntNibai」と、入力された実数を二倍にする「FloatNibai」という関数を作ります。main.cppの一番下に行き以下のコードを書き加えます。
/*------------------------------------------------------------*/
/*
以下メイン
*/
/*------------------------------------------------------------*/
bool WINAPI IntNibai(int *num)
{
*num *= 2;
return 0;
}
bool WINAPI FloatNibai(double *num)
{
*num *= 2;
return 0;
}
HSPで扱うための関数は、
型名 WINAPI 関数名(引数){処理}
で書かれます。型名と関数名の間に、「WINAPI」を入れましょう。
私もまだまだ勉強不足ですが、結果を格納する変数をポインタで受け取ることをおすすめします。
HSPで、整数型以外を戻り値にすると、正確に受け取ることができないことがあるためです。
##3.Module.defを書き換える
関数が書き終わったら、Module.defを書き直しましょう。
LIBRARY "ExportDll"
EXPORTS
IntNibai @1
FloatNibai @2
Module.defは、
LIBRARY "DLLの名前"
EXPORTS
関数名1 @1
関数名2 @2
関数名3 @3
....
という風に書いていきます。関数が増えるたびに、@のあとの数字は1から順に割り当てていきます。
##4.ビルドする
ソリューションの構成をDebugからReleaseに変更し、上タブのビルドから、ソリューションのビルドを選択しビルドします。
エラーが出なければビルドが成功しています。ソリューションフォルダを見ると、Module.defで指定した名前のDLLが出来上がっています!
#3.DLLを使ってみる
先ほど作成したDLLを使ってみましょう。
ソリューションフォルダ(私だったら、MAKE_DLL_TEST)に、「test.hsp」というファイルを作り、以下のコードを入力します。
#uselib "ExportDll.dll"
#func seisuu_nibai "IntNibai" var
#func jissuu_nibai "FloatNibai" var
a = 2
b = 0.6
seisuu_nibai a
jissuu_nibai b
mes a
mes b
見事、入力の2倍の数字になりました!
これにて、この記事でするべきことは全て達成しました!
#4.最後に
ここまで読んでいただき、ありがとうございました!
HSP用のDLLを作ることはなかなかハードルが高いですが、この記事で少しでもハードルを下げることができていたら幸いです。
DLLをもっと書いてみたいという人は、公式のプラグイン開発マニュアルを読んでみるとまた、新しい自分の可能性が出てきます!ぜひ読んでみてください!
この記事を気に入っていただけたらぜひ、ストックやLGTMをお願いします。また、質問やご意見も募集してます。
では、またどこかで。