visualC++初心者のHSP3用DLL作成日記

昨日なんとか出来たけど
今日、ブログを書きながらやりなおしてみるw
.defファイルなしでやります
HSP3のインストール確認(hspsdkフォルダがあるか)。

プロジェクト用フォルダ作る
自分はhspsdk\hpisampleのファイル入れてました
プロジェクトは古い形式なので読み込めません
プロジェクトファイルとdllファイルは入れないでおく

Visual Studio 2026開いて、新規プロジェクト → 「ダイナミックリンクライブラリ (DLL)」作成。
プロジェクト名: TestHspDll とか。
プラットフォーム: Win32(HSP標準は32bit)。
場所はさっき作ったフォルダにする
プロジェクトプロパティで:
C/C++ → プリプロセッサ → プリプロセッサ定義 に HSPPLUGIN_EXPORTS を追加(これ大事!)。
追加のインクルードディレクトリ に HSPのhspsdkパス(例: C:\hsp37\hspsdk)を入れる。
プロジェクトからpch.cppとpch.h削除か除外
構成マネージャーの構成をReleaseに
プラットフォームをwin32に
ヘッダーファイルにhsp3plugin.h追加
多分編集するw
構成プロパティ → C/C++ → プリコンパイル済みヘッダー
要素二つとも空欄にする 使用をNoにする

//dllmain.cpp
#include <windows.h>
#include "hsp3plugin.h"
// extern "C" で名前修飾なし、__declspec(dllexport) でエクスポート
extern "C" __declspec(dllexport) int __stdcall add(int a, int b) {
return a + b;
}
extern "C" __declspec(dllexport) int __stdcall mul2(int a) {
return a * 2;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
return TRUE;
}

hsp3plugin.hの
//void bms_send( BMSCR *bm, int x, int y, int sx, int sy );
28行あたり
これコメントアウトしたら動くと思います
コメントアウトの意味
関数『bms_send』
意味はBMSCR(HSPの画面情報構造体)から領域コピーする自作高速描画関数だったw
標準gcopyより直接いじれて速そう… 次回これ実装してゲーム加速させてみる?」

extern “C” は名前修飾防ぐため、__declspec(dllexport)はエクスポートするため。
.def使わないのでね
Release + Win32 でビルド
成功したら DebugフォルダかReleaseフォルダに .dll ができる
ビルドする時は クリーンしてからビルド 初回はクリーンしなくていいっぽいw

ツール→コマンドライン→開発者コマンドプロンプト
cd C:\hsp3dll\TestHspDll\TestHspDll\Release
とかでフォルダ移動して
dumpbin /exports TestHspDll.dll
で命令が表示されてればOK
.defは登録の仕方がわかんなかったので使わないようにした

#uselib "TestHspDll.dll"   ; DLL名そのまま
#cfunc add "_add@8" int,int     ; ← dumpbinの名前を""で指定
#cfunc mul2 "_mul2@4" int
; テスト
res1 = add(15, 27)     ; 42
res2 = mul2(100)       ; 200
dialog "加算: 15+27 = " + res1 + "\n倍算: 100*2 = " + res2, 0, "完璧!!初DLL大成功!!!"

作ったdllと同じフォルダにというhsp3スクリプトを置いて実行したら
上手くいくと思います

説明がはしょってるとこはAIさんにでも聞いてみてください
エラーがあった場合もAIさんに聞いてみてそれを参考に修正してください
自分もAIさんの存在なしにdll作成の初歩ですが上手くいかなかったと思います
逆にAIさんの存在があるのでdll作成の敷居が下がったかもしれませんね

AIサポートGrok様2025/12

コメント

タイトルとURLをコピーしました