空の配列の判定(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
|
|