tagCANDY CGI VBレスキュー(花ちゃん) - 空の配列の判定(次元数/サイズ/最小値/最大値の取得)(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
空の配列の判定(次元数/サイズ/最小値/最大値の取得)(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

空の配列の判定(次元数/サイズ/最小値/最大値の取得)(VB6.0) [No.111の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2011/04/05 10:37
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[基本コード][応用コード][]                                          *
* キーワード:Null,GetMem4,次元数,要素数,,                                        *
***********************************************************************************

元質問:空の配列の判定 - DAI  2005/10/03-13:56 No.4555

空の配列を判定したいのですが、どのように記述してよいのかわかりません。

-----------------------------------------------------------------------------------
Re: 空の配列の判定 - いな  2005/10/03-14:33 No.4556
-----------------------------------------------------------------------------------

私は、こんな感じの関数で判断しています。
(-1ならば、空の配列)

'*********************************************************************
' 機    能  : 配列の要素数を返す
' 引 き 数  : strArray  配列
'*********************************************************************
Public Function cmnUBound(strAr() As String) As Long
    On Error GoTo cmnUBound_ERR
    
    cmnUBound = UBound(strAr)
    Exit Function

cmnUBound_ERR:
    If Err.Number = 9 Then
        cmnUBound = -1
    End If
End Function
メンテ

Page: 1 |

空の配列の判定(VB6.0)_1  (No.1の個別表示) [スレッド一覧へ]
日時: 2011/04/05 10:37
名前: 花ちゃん

* カテゴリー:[基本コード][応用コード][]
-----------------------------------------------------------------------------------
Re: 空の配列の判定 - YK  2005/10/03-14:44 No.4558
-----------------------------------------------------------------------------------
こんにちは。
Public Declare Function SafeArrayGetDim Lib "oleaut32" _
                        (ByVal pa As Long) As Long
Public Declare Sub GetMem4 Lib "msvbvm60" _
                        (ByRef pa() As Any, ByRef Var As Long)

Sub TEST()
    Dim sArray() As String
    Dim lngNum      As Long

'    ***** 配列があるかどうかのチェック *****
    GetMem4 sArray, lngNum
    If lngNum <> 0 Then
        Debug.Print "次元数は " & SafeArrayGetDim(lngNum)
    Else
        Debug.Print "初期化されていません"
    End If
End Sub

メンテ
空の配列の判定(VB6.0)_2  (No.2の個別表示) [スレッド一覧へ]
日時: 2011/04/05 10:36
名前: 花ちゃん

* カテゴリー:[基本コード][応用コード][]
プログラマのメモ帳 さんが、配列情報取得モジュール として下記の関数を公開されておられますので紹介しておきます。

今は、サイトを閉鎖されているようなので下記もその内見られなくなるので必要な方は書きとめるようにでもしておいて下さい。


配列情報取得モジュール

   関数
   GetDimension    配列の次元数を返す
   GetLBound       配列の添字の最小値を返す
   GetUBound       配列の添字の最大値を返す
   GetArraySize    配列のサイズを返す


プログラマのメモ帳 さんの archive サイト
http://web.archive.org/web/20030803110346/www.gj.il24.net/~nakasima/index.html

配列情報取得モジュール の公開サイト
http://web.archive.org/web/20030814072626/www.gj.il24.net/~nakasima/download/Array/index.htm
メンテ
Variant配列は1次元?2次元? (VB6.0)_3  (No.3の個別表示) [スレッド一覧へ]
日時: 2009/12/28 10:18
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[基本コード][][]                                                  *
* キーワード:配列,Variant,次元数,要素数,,                                        *
***********************************************************************************
タイトル : Variant配列は1次元?2次元?
記事No : 12748
投稿日 : 2008/07/11(Fri) 16:35
投稿者 : エドワード

あるアプリケーションのAPIの戻り値である時はVariant型の1次元配列でまたある時はVariant型の2次元配列で返って来ます。

返り値のVariant型配列が1次元なのか2次元なのかを判別するにはどうすればよいのでしょうか?

-----------------------------------------------------------------------------------
記事No : 12751
投稿日 : 2008/07/11(Fri) 18:35
回答者 : 魔界の仮面弁士  
-----------------------------------------------------------------------------------
案1) UBound(v, 2) がエラーを返すかどうかで判定する。
案2) SafeArrayGetDim API を使って受け取る。


Private Sub Command1_Click()
    Dim a As Variant, b As Variant
    ReDim a(2, 2)
    Dim c() As Variant, d() As Variant
    ReDim c(2, 2, 2)
    Dim e(1) As Variant, f(2, 3) As Variant
    
    Debug.Print "a:"; GetDim(a)    ' 2 … 次元数 2 の配列を格納した Variant 型
    Debug.Print "b:"; GetDim(b)    '-1 … 配列では無い Variant 型
    Debug.Print "c:"; GetDim(c)    ' 3 … 次元数 3 の動的配列
    Debug.Print "d:"; GetDim(d)    ' 0 … 初期化されていない動的配列
    Debug.Print "e:"; GetDim(e)    ' 1 … 次元数 1 の静的配列
    Debug.Print "f:"; GetDim(f)    ' 2 … 次元数 2 の静的配列
End Sub



===== 標準モジュール =====
Option Explicit

Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByVal psa As Long) As Long
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal ptr As Long, ByRef ret As Long)

Public Function GetDim(ByVal sa As Variant) As Long
    If IsArray(sa) Then
        Dim p As Long
        GetMem4 VarPtr(sa) + 8, p
        If p = 0 Then
            GetDim = 0  '初期化されていない配列
        Else
            GetDim = SafeArrayGetDim(p) '次元数
        End If
    Else
        GetDim = -1     '配列では無い
    End If
End Function
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ