ユーザー定義型を比較するには?


どん  2003-01-25 02:10:54  No: 76882

ユーザー定義型の比較チェックをしたいのですが、
その方法がわからず1個づつしています。
同じユーザー定義型の変数を2つ渡すと比較してくれるようなことは
出来ないでしょうか?
「udt(0)」と「udt(1)」を比較したい。

何卒宜しくお願いします。

VisualBasic6 SP5
Windows2000 SP2


たかみちえ  URL  2003-01-25 03:05:42  No: 76883

そのまま=で比較できませんか?
(Delphiではそれで、少なくとも代入はできるみたい…)

  できないなら、for eachあたりが役に立つかもしれません。


Say  2003-01-25 03:44:53  No: 76884

>同じユーザー定義型の変数を2つ渡すと比較してくれるようなことは
>出来ないでしょうか?

よく使うのなら、そういう関数を作ればいいのでは?

インラインアセンブル可能なCでDLLを作るのであれば、
アドレスとサイズ渡してCMPSとREPで
一気にブロック比較できたりしますが・・・。


どん  2003-01-27 20:51:18  No: 76885

たかみちえさん、返答ありがとうございます。

>そのまま=で比較できませんか?
LSet udt(0) = udt(1)で代入は出来ます。

>できないなら、for eachあたりが役に立つかもしれません。
ユーザー定義型には使えなかった認識でしたので試してませんでした。一度試してみます。

Sayさん、返答ありがとうございます。

>よく使うのなら、そういう関数を作ればいいのでは?
かなり使用している為、部品として作成する予定です。

>インラインアセンブル可能なCでDLLを作るのであれば、
現状ではDLL等を作成することが出来ません。
簡単に言えば配布の問題です。

APIでメモリ比較を行おうと思いましたが、適切な方法が見つからず質問させていただきました。
もう少し調べてみます。

また、何かヒントでもあれば
何卒宜しくお願いします。


Say  2003-01-27 22:10:17  No: 76886

fcを使うという手もあります。
ファイルを介するのがいやなら、
WshShellオブジェクトかCreatePipeAPIで
標準出力を取得する必要があります。

Option Explicit
Private Const FILEPATH As String = "C:\FCTEST\UDTA_"
Private Type AType
    a As Long
    b As Integer
    c As String
    d As Byte
End Type
Private udtA(3) As AType
Private Sub FileComp(file1 As Long, file2 As Long)
    Shell "cmd.exe /C fc /B " _
                    & FILEPATH & CStr(file1) & ".BIN " _
                    & FILEPATH & CStr(file2) & ".BIN " _
                    & " > " & FILEPATH & CStr(file1) & CStr(file2) & ".TXT "
End Sub
Private Sub Command1_Click()
    Dim strFileName As String
    Dim lnfFileHandle As Long
    Dim i As Long
    'udtA(0)の設定
    udtA(0).a = 100
    udtA(0).b = 10
    udtA(0).c = "aaa"
    udtA(0).d = 1
    'udtA(0)のコピー
    udtA(1) = udtA(0)
    udtA(2) = udtA(0)
    udtA(3) = udtA(0)
    'udtA(2)は1箇所、udtA(3)は2箇所変更
    udtA(2).a = 200
    udtA(3).b = 20
    udtA(3).d = 2
    'とりあえず保存
    For i = 0 To 3
        strFileName = FILEPATH & CStr(i) & ".bin"
        lnfFileHandle = FreeFile
        Open strFileName For Binary Access Write As #lnfFileHandle
        Put #lnfFileHandle, , udtA(i)
        Close #lnfFileHandle
    Next
    MsgBox "OK"
End Sub

Private Sub Command2_Click()
    FileComp 0, 1
    FileComp 0, 2
    FileComp 0, 3
    MsgBox "OK"
End Sub

Private Sub Command3_Click()
    Dim strFileName As String
    Dim lnfFileHandle As Long
    Dim strFileNo(2) As String
    Dim strResult As String
    strFileNo(0) = "01"
    strFileNo(1) = "02"
    strFileNo(2) = "03"
    Dim i As Long
    For i = 0 To 2
        strFileName = FILEPATH & strFileNo(i) & ".txt"
        lnfFileHandle = FreeFile
        Open strFileName For Input As #lnfFileHandle
        Do Until EOF(lnfFileHandle)
            Line Input #lnfFileHandle, strResult
            List1.AddItem strResult
            DoEvents
        Loop
        Close #lnfFileHandle
        List1.AddItem "============================================="
    Next
    MsgBox "OK"
End Sub


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

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






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