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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0506
こいるWin32APIなどで呼び出し済みの命令を関数形式に変更したい2解決


こいる

リンク

2020/5/6(Wed) 17:09:32|NO.90295

最近まで、Win32APIを使う際、毎回使用するものを1つ1つ呼び出していたのですが、
面倒なので、"user32.as"などのasファイルを#includeして呼び出すようになりました。

しかし、そのasファイルらは全て命令形式で呼び出しており、
GetActiveWindowなど、関数形式にした方が使いやすいものがあるときに大変不便です。


こうすると「定義済みの〜」とコンパイルエラーが出てしまいます。

#include "user32.as" #uselib "user32.dll" #cfunc GetActiveWindow "GetActiveWindow"

直接asファイルを編集して関数形式にしてもいいのですが、
ソースを公開するとき、特にこのスレッドで直接ソースを貼るとき、
別の環境で実行すると、関数形式になっておらずエラーが出てしまう可能性があるので避けたいです。
逆に、どなたかのソースを実行するときに、関数形式になっていてエラーというのもありそうですし。

一応、こんな風に別の名前で呼び出せば行けるみたいですが、
通常と違う名前ですと少し見づらいような気がします。

#include "user32.as" #uselib "user32.dll" #cfunc GetActiveWindow_c "GetActiveWindow"

なにか良い方法はないでしょうか?



この記事に返信する


あらや

リンク

2020/5/6(Wed) 17:41:23|NO.90296

HSPの更新履歴から抜粋
http://www.onionsoft.net/hsp/v36/doclib/history.txt

〜省略〜
2016/01/19 3.5 beta3
〜省略〜
[hspcmp] #funcで宣言されたDLL関数を、関数としても使用できるように修正

ということで、HSP 3.5 ベータ3以降ならば
#funcで定義された命令はそのまま関数形式で書くことも出来ますよ。


#include "user32.as" handle = GetActiveWindow();



こいる

リンク

2020/5/6(Wed) 20:31:56|NO.90297

おっしゃる通り、関数形式でも記述することができました。

// 普通に実行できちゃってびっくり #include "user32.as" mes GetActiveWindow() GetActiveWindow mes stat

どうやら関数形式で呼び出したときはエラーが出るみたいで、
毎回、関数形式にしたいものは関数形式で呼び出しており、
呼び出しには命令登録(#func)、関数登録(#cfunc)と2つあったので、
どっちかでしか記述できないのかと思っていました。

#uselib "user32.dll" #cfunc GetActiveWindow "GetActiveWindow" mes GetActiveWindow() GetActiveWindow mes stat

じゃあ#cfunc要らないってことになりますが、互換性を図るためなのでしょうかね。

ヘルプなどに書いてもらえると良かったのですが…

なにはともあれ、解決しました。
ありがとうございました!



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