ユーザー定義型の比較チェックをしたいのですが、
その方法がわからず1個づつしています。
同じユーザー定義型の変数を2つ渡すと比較してくれるようなことは
出来ないでしょうか?
「udt(0)」と「udt(1)」を比較したい。
何卒宜しくお願いします。
VisualBasic6 SP5
Windows2000 SP2
そのまま=で比較できませんか?
(Delphiではそれで、少なくとも代入はできるみたい…)
できないなら、for eachあたりが役に立つかもしれません。
>同じユーザー定義型の変数を2つ渡すと比較してくれるようなことは
>出来ないでしょうか?
よく使うのなら、そういう関数を作ればいいのでは?
インラインアセンブル可能なCでDLLを作るのであれば、
アドレスとサイズ渡してCMPSとREPで
一気にブロック比較できたりしますが・・・。
たかみちえさん、返答ありがとうございます。
>そのまま=で比較できませんか?
LSet udt(0) = udt(1)で代入は出来ます。
>できないなら、for eachあたりが役に立つかもしれません。
ユーザー定義型には使えなかった認識でしたので試してませんでした。一度試してみます。
Sayさん、返答ありがとうございます。
>よく使うのなら、そういう関数を作ればいいのでは?
かなり使用している為、部品として作成する予定です。
>インラインアセンブル可能なCでDLLを作るのであれば、
現状ではDLL等を作成することが出来ません。
簡単に言えば配布の問題です。
APIでメモリ比較を行おうと思いましたが、適切な方法が見つからず質問させていただきました。
もう少し調べてみます。
また、何かヒントでもあれば
何卒宜しくお願いします。
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