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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0124
tsukasarrayconv命令について。4未解決


tsuka

リンク

2010/1/24(Sun) 22:20:28|NO.30141

HSPで連想配列を使いたいと思い、COMのScripting.Dictionaryを使っています。
Scripting.DictionaryにはKeysとItemsというメソッドがあるのですが、このメソッドは配列(SafeArray)を返すのです。
そこで、sArrayConv命令を使ってHSPの配列に変換しようと思い、スクリプトを書いてみたのですが、うまく動きません。
以下が試したスクリプトです。


newcom dic, "Scripting.Dictionary" //Dictionary作成 comres ret //テストデータ dic->"Add" "Hello", "World!!" dic->"Add" "HSP", "Hot Soup Processor" dic->"Keys" //キー一覧を取得 sarrayconv keys, ret, 1 //問題の部分 [変数型の変換に失敗しました。] foreach(keys) mes strf("%s = %s", keys(cnt), dic("Item", keys(cnt))) // = "key = value" loop

※通常のHSPのヘルプに載っているsarrayconvの説明は古いようです。
最新のものと思われる、hspprog.htmに書いてある内容を貼っておきます。

sarrayconv p1, p2, p3, [p4] p1 : 結果を格納する変数 p2 : 変換元の変数 p3(0) : 変換のモード p4(0) : バイナリーデータのサイズ p3=0:配列変数p2全体からSafeArrayを作成し、Variant型変数p1に 格納します。 p3=1:Variant型変数p2に格納されているSafeArrayを配列変数p1に 格納します。p1の領域は再確保されます。 p3=2:変数p2からp4バイト分だけのバイナリデータからSafeArray (VT_UI1型)を作成し、p1に格納します。 p3=3:Variant型変数p2に格納されている1次元SafeArray (VT_UI1型 またはVT_I1型)のバイナリデータを変数p1に格納します。 変数p1の領域はあらかじめ確保されている必要があります。



この記事に返信する


tsuka

リンク

2010/1/24(Sun) 22:45:26|NO.30142

Scripting.Dictionaryについては↓を
http://hspdev-wiki.net/?COMDictionary

Keysメソッドについては↓を参考にしました。
http://msdn.microsoft.com/ja-jp/library/cc428034.aspx



inovia

リンク

2010/1/24(Sun) 22:52:15|NO.30145

この辺とか参考になりませんか?
sarrayconvを使うとエラーばかり出るそうなので、直接APIを呼び出しています。
http://hsp.tv/play/pforum.php?mode=pastwch&num=27461



tsuka

リンク

2010/1/24(Sun) 23:02:51|NO.30147

ふ・・・む。
この方法は考えていたのですが、sarrayconvを見つけたのでこっちでどうにかなるかと考えたのですが・・・

sarrayconvは忘れられてるんですかね。どなたかがOpenHSPで修正していただけるのを待つしかないようですね。

一応、解決にはしません。



amm

リンク

2010/1/25(Mon) 20:48:36|NO.30156

VARTYPEが VT_ARRAY|VT_VARIANT のSAFEARRAYには対応してないみたいですね。
数値や文字列のSAFEARRAYなら普通に扱えるので仕様でしょうか。
HSPにもVARIANT型があるんだから対応してくれても良さそうなものですが。
HSP Wikiのバグトラッキングに投稿しておけば対応してくれるかもしれません。



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