LoginSignup
5
3

More than 3 years have passed since last update.

Visual Studio 2019を使ったHSP3用のDLL作成法

Posted at

挨拶

 はじめましての方は初めまして。あめふりてる*です。
 この記事は、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
image.png
ダウンロードが終わったら、実行しましょう。実行すると以下のような画面が出てくるので「続行」を押しましょう。
image.png
以下の画面が出てきたら、「C++によるデスクトップ開発」にチェックを入れ、右下のインストールを押します。
image.png
以下の画面で時間がかかるので、気長に待ちましょう。
image.png
インストールが終わるとVisual Studio 2019が立ち上がります
image.png
これで、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です。
image.png

Visual Studio 2019を立ち上げて、新しいプロジェクトの作成を開き、テンプレートの下のほうに「DLL_FOR_HSP」が生成されていたらインストール完了です。
image.png
image.png

これで、環境構築は終了です。

2.DLLを作る

さて、環境構築が終わったので実際にDLL作って動かしてみましょう。

1.プロジェクトを作成する

Visual Studio 2019を立ち上げて、新しいプロジェクトの作成を開き、「DLL_FOR_HSP」を選択して、右下の次へを押します。
次に、プロジェクト名と場所を入力し、作成を押します。今回私は、画像のようにしました。
image.png

2.main.cppに関数を書き加える

プロジェクトができたら、main.cppに関数を書き加えます。
今回は、入力された整数を二倍にする「IntNibai」と、入力された実数を二倍にする「FloatNibai」という関数を作ります。main.cppの一番下に行き以下のコードを書き加えます。

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を書き直しましょう。

Module.def
LIBRARY "ExportDll"

EXPORTS
    IntNibai    @1
    FloatNibai  @2

Module.defは、

LIBRARY "DLLの名前"

EXPORTS
    関数名1    @1
    関数名2    @2
    関数名3    @3
    ....

という風に書いていきます。関数が増えるたびに、@のあとの数字は1から順に割り当てていきます。

4.ビルドする

ソリューションの構成をDebugからReleaseに変更し、上タブのビルドから、ソリューションのビルドを選択しビルドします。
image.pngimage.pngimage.png

エラーが出なければビルドが成功しています。ソリューションフォルダを見ると、Module.defで指定した名前のDLLが出来上がっています!
image.png

3.DLLを使ってみる

先ほど作成したDLLを使ってみましょう。
ソリューションフォルダ(私だったら、MAKE_DLL_TEST)に、「test.hsp」というファイルを作り、以下のコードを入力します。

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

すると、
image.png

見事、入力の2倍の数字になりました!
これにて、この記事でするべきことは全て達成しました!

4.最後に

ここまで読んでいただき、ありがとうございました!
HSP用のDLLを作ることはなかなかハードルが高いですが、この記事で少しでもハードルを下げることができていたら幸いです。
DLLをもっと書いてみたいという人は、公式のプラグイン開発マニュアルを読んでみるとまた、新しい自分の可能性が出てきます!ぜひ読んでみてください!

この記事を気に入っていただけたらぜひ、ストックやLGTMをお願いします。また、質問やご意見も募集してます。
では、またどこかで。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3