- 日時: 2011/04/05 11:20
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[基本コード][][] * * キーワード:構造体,型変換,ユーザ定義型,,, * ***********************************************************************************
---------------------------------------------------------------------------- No.4135 Re:ユーザ定義型の比較 投稿者:ゆう(U) [2002/03/20(水)18:23分] ----------------------------------------------------------------------------
「LSet ステートメント」ヘルプより あるユーザー定義型から別のユーザー定義型に変数をコピーすると、 その領域の要素に対して指定されているデータ型に関係なく、一方の 変数のバイナリ データだけが他方のメモリ領域にコピーされます。
大きめに確保したユーザ定義型の残りの部分にゴミが入る 可能性はありませんか? ※同サイズにした方が良いと思います
改良コード) Private Function StructComp2(a1 As Testdat, a2 As Testdat) As Boolean Dim Struct1 As CompWk Dim Struct2 As CompWk Dim strTemp1 As String Dim strTemp2 As String Dim i As Long
'ユーザー定義型(Testdat型)を別のユーザー定義型(CompWk型)にコピーする LSet Struct1 = a1 LSet Struct2 = a2
'有効部分を文字列型へ転記する 'サイズが同じならLeftB、LenBは不要になります strTemp1 = LeftB$(Struct1.data, LenB(a1)) strTemp2 = LeftB$(Struct2.data, LenB(a2))
'比較 If StrComp(strTemp1, strTemp2, vbBinaryCompare) = 0 Then '一致 StructComp2 = True Else '不一致 StructComp2 = False End If End Function
可変長文字列の事もあるので、私は比較用のプロシージャを 作成してしまう事をお薦めします。
サンプル) Private Type myType Item1 As Long Item2 As String Item3 As String * 5 End Type Prvate Function myTypeComp(ByRef Type1 as myType, _ ByRef Type2 As myType) As Boolean myTypeComp = False If Type1.Item1 <> Type2.Item1 Then Exit Function If StrComp(Type1.Item2, Type2.Item2, vbBinaryCompare) <> 0 Then Exit Function If StrComp(Type1.Item3, Type2.Item3, vbBinaryCompare) <> 0 Then Exit Function myTypeComp = True End Function
|