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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0504
レノスプラグインで mcall だけ謎の症状6解決


レノス

リンク

2008/5/4(Sun) 20:11:34|NO.15631

hash 型変数を追加するプラグインを作ってみたのですが、
mcall の時だけ h("キー") という書式がエラーにされてしまいます。
( 変数 h はhash型 )

h("キー") = 20 // 代入 mes h("キー")
という代入・読み込みはしっかり出来ます。

なぜか分かる方、ご教授ください。お願いします。

↓に、ソースと hpi 本体をアップしてあります。
http://prograpark.ninja-web.net/CollectField/download/var_hash.lzh



この記事に返信する


レノス

リンク

2008/5/4(Sun) 20:21:34|NO.15632

なぜか、↑のリンクにアクセス出来ない模様……
リンクをアドレスバーにコピペしてください。すいません。



As

リンク

2008/5/4(Sun) 21:37:53|NO.15635

hash.hspを実行して、mcallのstatを調べてみましたが、正常に実行されているようです。
どの部位がエラーなのでしょうか?



レノス

リンク

2008/5/4(Sun) 22:34:21|NO.15642

確かに……
すいません、アップしたやつは変になる前のもののようです。
新しい駄目な方をあげなおしましたので、
そちらを見てください。



As

リンク

2008/5/4(Sun) 22:58:13|NO.15645

ハッシュ型の変数は内部で配列変数として初期化されているのではないでしょうか?
COMを扱うnewcom命令はヘルプで”p1で指定した変数をCOMオブジェクト型と
して初期化を行ないます。”と明記されています。

というように、ためしに通常の配列変数をCOMオブジェクト型変数として使えるかどうか
試してみました。

newcom a.1,"WScript.Shell" mcall a.1,"Run",dir_sys+"/notepad.exe"
すると、”異なる型をもつ配列変数に代入しました”とあります。よって、
ハッシュ型といえども、内部で配列変数として初期化しているとしたらCOMオブジェクト型変数
としては使えないということではないのでしょうか?

もしもnewcomなどの命令で利用することを考えているのであれば、NewHashでCOMオブジェクト
型変数を扱えるようにすれば可能なのかもしれません。

あくまで推測で述べただけですので、アドバイスとしてうけとめてください^^;



レノス

リンク

2008/5/4(Sun) 23:30:37|NO.15649

なんども返信ありがとうございます。

とりあえず、謎の補足(うんちく)です。


newcom a.1, "WScript.Shell"
は、正常に実行されず、
a は int型の配列変数になってしまっています。( デバッグウィンドウ )
そのため、メソッド呼び出しに失敗します。


dimtype a, vartype("comobj"), 3 newcom a(1), "WScript.Shell" mcall a(1), "Run", ""+ dir_sys +"/notepad.exe"
これでやったら行けるかなぁーっと思いましたが、駄目でした。
配列の要素からは呼び出せないようです。


dimtype a, vartype("comobj"), 3 newcom a, "WScript.Shell" mcall a, "Run", ""+ dir_sys +"/notepad.exe"
実行できました。配列変数の1つめの要素なら行ける模様です。
というより、mcall は配列の要素を無視している気がします。

あと、mcall が COM を呼び出せるのは mcall 自身の効果じゃなくて、
COMOBJ 型の仕様です。
拡張変数型での mcall 呼び出しは、HspVarProc 構造体の ObjectMethod 関数を呼び出すみたいです。



レノス

リンク

2008/5/4(Sun) 23:33:53|NO.15650

自己解決してしまいました。
お騒がせしてすいませんでした。

※ArrayObject 関数で pval.offset に値を格納したのが原因。
 offset が、配列の要素数を超えているからエラーになっていたようです。
 すいませんでした。



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