hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
MakeHPI/VC++/chapter1 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

MakeHPI


概要

Visual C++を使ったDLLの作成方法についての解説です。
マニュアル(HSPDLL.TXT)もサンプルもVisual C++を前提としているので他の言語に比べ導入もしやすいと思います。

Visual C++を入手する

用意するもの

  • HSP3SDK
  • Visual C++ 2008 Express Edition

入手:Hot Soup Processor SDK ver3.1
プラグインを作るのに必要な、マニュアルとサンプル、ヘッダファイルなどを含んでいます。
必ず入手してください。
ダウンロードしたら適当なフォルダに解凍しておきましょう。後から動かす必要のないような場所においておくといいです。

Visual C++

ここでは、Visual C++ 2008 Express Editionを使用します。
↓ここからフリーで入手・使用することが出来ます。ダウンロードしてインストールしておいてください。
http://www.microsoft.com/japan/msdn/vstudio/Express/
ダウンロードしたら適当なプログラムでも組んで操作になれておきましょう。

  • 注意:VC++2008EEは MFC と ATL が含まれていません。
    モジュール定義ファイルが自動で作成されないなどの問題はありますが、HSP用プラグインを作るうえではさほど問題ではありません。
  • Visual C++ 2005 EEを使う場合はPlatform SDKを別途ダウンロードする必要があります。
    資料:http://watcher.moe-nifty.com/memo/2006/05/visual_studio_c_4427.html
  • VC++2008EEには標準でPlatform SDKが同梱されています。

サンプルをビルド

HSP3SDKにはたくさんのサンプルが含まれていますが、代表的なサンプルhpi3sampleをビルドしてみます。
<HSPSDKインストールフォルダ>\hspsdk31\sample\hpi3sample

上記のフォルダを開いて、hpi3sample.vcprojをダブルクリックするとVC++が起動します。
自動的に変換作業を行ってくれるので、次へ次へ。

早速ビルドしてみます。
[メニュー]:メニュー → ビルド → ソリューションのビルド
と実行してみてください。

ビルド結果が、「ビルド: 1 正常終了、0 失敗、」と表示されれば成功です。 Debugフォルダにhpi3sample.dllが作成されているはずです。

hpi3sample.asをhpi3sample.dllと同じ場所に置いてください。
hpi3sample.asを実行してエラーが出なければ成功です。

名前修飾を調べる

VC++でDLLを作成すると、関数名が名前修飾されもとの名前とは違うものに変更されます。
ヘルプブラウザの#regcmdの項目にも説明がありますね。
例:

#regcmd "_hsp3cmdinit@4","hpi3sample.dll"

このように記述するわけですが、この「@4」が本当に「@4」なのか確認してみます。

関数名の変更後の名前を調べるには、dumpbin.exeを使用します。
実行は、Visual Studio ToolsのDOS窓から行う必要があります。

スタート → Visual C++ 9.0 Express Edition → Visual Studio Tools → Visual Studio 2008 コマンド プロンプト

として、Visual Studio ToolsのDOS窓を開いてください。
次のように入力します。

dumpbin.exe /exports ???.dll

DLL名のところに、調べたい対象のDLLファイルを指定します。

...
	ordinal hint RVA      name

			1    0 0001114A _hsp3hpi_init@4
...

「_hsp3hpi_init@4」これが名前修飾された後の名前です。

名前修飾はモジュール定義ファイル(.def)を作れば、名前修飾を回避することも出来ます。


【注意】
通常のコマンドプロンプトからdumpbin.exeを実行すると、mspdb80.dllが無いというエラーメッセージが表示され使えません。
dumpbin.exeと同じフォルダにmspdb80.dllをコピーしておけばdumpbin.exeは実行できるようになりますが、 ビルドが成功しなくなるようです。
このような方法はとらないよう注意してください。
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mspdb80.dll

モジュール定義ファイル(.def)を作る

まず、ファイルを用意します。これは最初は中身は空のテキストファイルです。

  1. ソリューション エクスプローラのソースファイルを右クリック>追加>新しい項目、を実行します。
  2. 空のファイルが出来ればどれでもいいのですが、「C++ファイル(.cpp)」を選んで、「名前」には拡張子に.defを付けた適当なファイル名を入力する。
  3. ソリューション エクスプローラでプロジェクトを右クリック。プロパティを開きます。
  4. 構成プロパティ>リンカー>入力 を開きます。
  5. 「モジュール定義ファイル」に先ほど作成したdefファイルの名前を入力。適用をクリック。

画像つきの説明はこちらの外部サイトの説明がわかりやすいですので参考にして下さい。

次に作成したdefファイルの中身を編集します。 書式は次のようになっています。

;コメント
LIBRARY	[dll名]

EXPORTS
	[関数名]
	...
コメント
「;(セミコロン)」以降はコメントになります。
[dll名]
作成したdllが「hogehoge.dll」だった場合、「LIBRARY hogehoge」となります。
[関数名]
作成した関数名を記述します。作成した関数全てを1行1つずつ記述します。

これもこちらの外部サイトの説明がわかりやすいですので参考にして下さい。

作成したDLLを使う

例えばdll_test.dllというdllファイルを作成し、この中にはTashizanという関数がある場合で説明してみます。 なおTashizan関数はint型2つを引数として、足し算した結果の値をint型で返します。

と、いうような条件でHSPでDLLを利用する場合は次のようにします。

  1
  2
  3
  4
 
 
 
 
#uselib "dll_test.dll"
#cfunc Tashizan "Tashizan" int, int
 
mes "" + Tashizan( 123, 456 )

関数が値を返さない場合は、#cfuncではなく、#funcを使います。

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2012-08-19 (日) 22:11:03 (475d)