「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@138) [高] [解決]
@138■ (#342) 外部DLLが利用できない/nakoを読み込まなくなる - area (2008-12-05 00:14) /高 未処理
【症状】Win32用DLLを上手く認識しない
【再現方法】
以下のDLL(HSP用ですが。。。)を利用しようとする
とファイル自体は存在するのになでしこ上で存在しませんと表示され
使う事ができません。
http://hsp.tv/make/tool3.html
#HSP MULTIMEDIA( hmm.dll ) 1.42

//サンプルソース
●DirectX初期化テスト(s) =DLL("hmm.dll","int HMMINIT(
  int
)")#"
//
DLLが読み込まれない理由をしらべるため、vnako.exeのあるパス、
ランタイムパス\plug-ins\フォルダ、C:\windows\system32\の全てに
DLLを配置してみましたが、全て認識しませんでした。

また、このDLLがvnako.exeと同じパスにあると、きっかけは分かりませんが
DLLが存在する限りvnakoが.nakoファイルを読み込まなくなったりします。

HSP用DLLなので対応してなく認識されないのかと思いましたが、vnako.exeと
同じパスに置いて、なんらかのきっかけが起きると.nakoを読み込まなくなり、
サンプルプログラム、行動タブ、関連づけどれも起動しなくなる
(vnako.exeを直接起動したのと同じ結果[プログラムを実行ファイル(vnako.exeへ~]と表示される)
ようで、万が一何かの理由で同じフォルダにあってはまずい、もしくは他のDLLでも
これと同じ現象が発生してしまって、DLLが使えない/なでしこが正常に動作しない
など混乱を招くような結果になるかもしれないということでバグとして投稿させて頂きました。

最近DLLの仕様変更があったそうなので、古いバージョンのなでしこでも
同じチェックをしましたが、結果は同じでした
ただし、この場合vnako.exeが何も読み込まなくなる現象は発生しませんでした。

なでしこのソースが見れない(というかDelphiが分からない)ので原因も何もわかりませんが
もしお時間があれば調べてもらえないかなあと思います。

//たぶんHSPもなでしこも利用できるDLLは同じだと思うのですが、
 もしかしたら違うかもしれないのでもし違ったら本当にすみません

【要望】vnako.exeが何も読み込まなくなる現象を回避できれば・・・
【バージョン】v1.513 (どうやら配布されているv1.514のバージョン表示が
更新されてなく、v1.513と出るようです、現在2008/12/05時点で配布されている
最新版です。)
【その他】自分勝手な要望ですが、Windows上で標準のDLLがなでしこで動かせたら
嬉しいです

(#435) HSPのDLLには未対応 - クジラ飛行机 (2009-01-22 04:11) /高 確認待ち
すみません。リンク先を見てみたのですが、
HSPのDLLは、独自形式なのではないでしょうか?

Windows の標準 DLL なら、なでしこから利用できます。
ただし、関数の形式がWindows APIと同じく stdcall の形式である必要があります。

(#438) 関数名 - パソコン大好き (2009-01-22 18:16) /高 確認待ち
HSPのDLLは独自形式ではなく、普通のDLLです。
サンプルによれば「extern "C" __declspec (dllexport)」でエクスポートされています。

ちょっと古い情報ですがこんなページを発見しました。(オフィシャル)
http://www.onionsoft.net/hsp/hspdll.html
>上の例は、「testfunc」という名前の関数名を、「_testfunc@16」という名前で外部にエクスポートするための定義です。HSPで認識されるためには、「_関数名@16」という名前である必要があります。このDEFファイルで、エクスポート関数名を定義することにより、HSPから呼び出されるDLLを作成することが可能になります。

というわけで「HMMINIT」は「_HMMINIT@16」とエクスポートされていました。

(#453) HSP用DLL'HPI'の仕様 - ゆちボン (2009-01-30 14:12) /高 確認待ち
一応、HSP用に作られたDLLの仕様などについてです。
参考になれば幸いです。

> HSPのDLLは、独自形式なのではないでしょうか?
HSP2時代のものは独自形式でした。
HSP3は普通のWinAPIのものも呼び出せるようになったので宣言に工夫をする必要はなくなりました。
必ず、引数を4つ宣言します。(重要)
これはVC++の呼び出し規約かなにかちょっと覚えていませんが、
パソコン大好きさんもおっしゃる通り先頭に'_'、語尾に'@16'が必要です。

> HSPのDLLは独自形式ではなく、普通のDLLです。
> サンプルによれば「extern "C" __declspec (dllexport)」でエクスポートされています。
ちょっと独自形式だったりします。
たとえば、ウィンドウ情報(描画、サイズなど)はとある構造体にいれてあったりします。
確か、HMMはウィンドウ描画命令も持っているため、「HSP専用の」ウィンドウ情報を取得しようとします。
(とくに、HMMINIT、DDINITあたり)
areaさんはHMMをどの部位に使いたいのですか?
サウンド、インプットならば、「DSINIT」「DMINIT」などと、個別に指定したほうがいいです。
DirectDrawはC言語用に作られたものなどを利用したほうがいいです。

それと、DirectX のバージョンは大丈夫ですか?
最新版のHMMは確か、DirectX9以上は必要です。

(#455) そうでした・・・ - パソコン大好き (2009-01-30 17:06) /高 調査中
ちゃんと読んでいませんでした。すみません。
橋渡しのプラグインを作れば、使えるような気もするんですが。
それはそれで大変ですね・・・

(#728) RE:外部DLLが利用できない/nakoを読み込まなくなる - しらたま (2009-05-13 23:50) /高 解決
HSP用のDLLを使えるようにするには、内部でHSPのエミュレートしないといけないようなので、ちょっと難しいです。
ですので、残念ながらこれは解決扱いということで…

あと、
> Windows上で標準のDLLがなでしこで動かせたら
とのことですが、現状でも32bitまでの整数と文字列、適当なメモリ領域だけを要求するようなDLLならほぼ問題なく動かせると思います。

(#342)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能