構造体配列で要素数0の取得(UBOUND=-1)は?

解決


mady  2003-12-05 22:48:15  No: 80746

以前、魔界の仮面弁士さんが書き込みをされていた
ことを構造体配列でやりたいと思いました。

http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200308/03080063.txt

できるはず!と思っているのですが
なかなかうまくいきません。
よろしくお願いします。


よねKEN  2003-12-05 23:00:50  No: 80747

> できるはず!と思っているのですが

空の配列をあらかじめ用意しておく方法ですよね?
リンク先にあるデータ型だけです。ユーザ定義型ではできません。


いちゆ  2003-12-06 00:38:16  No: 80748

最終手段としてはエラートラップしかないよねぇ…こういうのって。
要素数を保存しておく変数も定義しておくとかいう手もあるけれど…
これも配列の引数だと全部見直さなくちゃいけないし。


魔界の仮面弁士  2003-12-06 01:38:15  No: 80749

(LongやInteger等の)標準的な型に関しては、空の配列を作成する事が可能ですが、
ユーザー定義型の空配列を作成する方法については、私にはわかりません。

ただし、空配列を作成するのではなく、「その配列がReDim済みかどうかを確認」するだけなら、
RtlMoveMemory APIを使うことで判定できます。


mady  2003-12-06 02:41:47  No: 80750

なるほど。
無理なようですね…
今はエラートラップしています。
それで我慢します。

でも、できないことが分かっただけでも
十分価値がありました。

ありがとうございます。


魔界の仮面弁士  2003-12-17 07:17:52  No: 80751

> ユーザー定義型の空配列を作成する方法については、私にはわかりません。

ユーザー定義型でもできるようです。(教えてくれたK.J.K.さん、感謝!)

Private Declare Function SafeArrayAllocDescriptor Lib "oleaut32" _
   (ByVal cDims As Long, _
    ByRef ppsaOut() As Any) As Long

と宣言して、

    Dim X() As Test
    SafeArrayAllocDescriptor 1, X

を実行してみてください。UBound(X) が -1 になります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加