HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0211
ほむfunc, cfunc のみのモジュールについて2解決


ほむ

リンク

2014/2/11(Tue) 11:37:58|NO.59873

外部DLLを使ってモジュールを作っているのですが、
#func, #cfuncのみで構成されたモジュールを作り、
グローバル空間で呼び出すと文法エラーになってしまいます。

ここではbass.dllを使っていますが、他のDLLを使っても同じ状況になりました。

#module #uselib "bass.dll" #func global BASS_Free "BASS_Free" #global BASS_Free stop
しかし、#deffunc, #defcfuncでダミーの命令または関数を作って
メインプログラム中のどこかでそれを呼び出せば、
エラー無しで普通に動くようなのです。

#module #uselib "bass.dll" #func global BASS_Free "BASS_Free" #deffunc dummy_func return #global BASS_Free stop dummy_func
このような書き方をしなければ#func, #cfuncのみで構成されたモジュールを
作ったり使ったりすることはできないのでしょうか?
よろしくお願いします。



この記事に返信する


MillkeyStars

リンク

2014/2/11(Tue) 12:09:17|NO.59874

コンパイラコード最適化がモジュールを読み込みしてないのが原因。

モジュール空間内へのアクセスがないので、モジュール自体をないものとみなしている。
これを回避するには、スクリプトの先頭にプリプロセッサ命令の

#cmpopt optcode 0
を入れればいい。そうすれば、コンパイラはモジュールを読み取りに行ってくれる。

あと、モジュール内で、#func global をする意味がさっぱりわからないけどね。



ほむ

リンク

2014/2/11(Tue) 13:23:21|NO.59881

ありがとうございます。
ダミーの命令を削除しても問題なく動きました。

#func global を使っているのは
モジュール空間内とグローバル空間内で、
同じDLLファイルに対して2回 #uselib を使うのはまずいのかな、と思ったからです。

また、#func で登録した命令も、グローバル空間で登録してしまうと
@を付けて呼び出すかモジュール空間内で
もう1度登録しなければならなかったので、
ごちゃごちゃしないようにこの形にしました。



ONION software Copyright 1997-2023(c) All rights reserved.