LIBRARY EXPORTS CreateAlgorithm @1 ; アルゴリズムへのハンドルを作成します。 DestroyAlgorithm @2 ; アルゴリズムを破棄します。 InitAlgorithm @3 ; アルゴリズムを初期化します。 InputData @4 ; アルゴリズムへデータを入力します。 GetHashLength @5 ; ハッシュのサイズをバイト数で取得します。 GetHash @6 ; 入力されたデータからハッシュを取得します。 GetHashTextLength @7 ; ハッシュ文字列の文字列長をバイト数で取得します。 GetHashText @8 ; 入力されたデータからハッシュ文字列を取得します。
これらのコードは普段 VB を使用していない作者が一度も実行・コンパイルすることなく想像に頼って書いたコードです。 そこまで大きく的から外れているとも思ってはいませんが、この書き方を推奨するものでも動作を保証するものでもありません。 むしろ「VB で、そうは書かない」といった点を御指摘いただけますと大変うれしく思います。 (2007/09/14)
Declare Function CreateAlgorithm() As Long
Declare Function DestroyAlgorithm( ByVal hAlgorithm As Long ) As Long
Declare Function InitAlgorithm( ByVal hAlgorithm As Long ) As Long
Declare Function InputData( ByVal hAlgorithm As Long, ByVal data As Long, ByVal length As Long ) As Long
Declare Function GetHashLength( ByVal hAlgorithm As Long ) As Long
Declare Function GetHash( ByVal hAlgorithm As Long, ByVal buffer As Long, ByVal bufsize As Long ) As Long
Declare Function GetHashTextLength( ByVal hAlgorithm As Long ) As Long
Declare Function GetHashText( ByVal hAlgorithm As Long, ByRef buffer As String, ByVal bufsize As Long ) As Long
これらのコードは普段 VB を使用していない作者が一度も実行・コンパイルすることなく想像に頼って書いたコードです。 そこまで大きく的から外れているとも思ってはいませんが、この書き方を推奨するものでも動作を保証するものでもありません。 むしろ「VB で、そうは書かない」といった点を御指摘いただけますと大変うれしく思います。 (2007/09/14)
' HANDLE 型, ポインタ型, int 型 は同サイズの Long 型で代用。 ' バージョンによっては VB/VBA にもポインタ型があるらしい? Declare Function CreateAlgorithm Lib "md5.dll" () As Long Declare Function DestroyAlgorithm Lib "md5.dll" (ByVal hAlgorithm As Long) As Long Declare Function InitAlgorithm Lib "md5.dll" (ByVal hAlgorithm As Long) As Long Declare Function InputData Lib "md5.dll" (ByVal hAlgorithm As Long, ByVal data As String, ByVal length As Long) As Long Declare Function GetHashLength Lib "md5.dll" (ByVal hAlgorithm As Long) As Long Declare Function GetHash Lib "md5.dll" (ByVal hAlgorithm As Long, ByVal buffer As Long, ByVal bufsize As Long) As Long Sub Main() Dim result As Long ' Dim hAlgorithm As Long ' アルゴリズムへのハンドル Dim length As Long ' ハッシュ値のバイト数 Dim char As String ' ハッシュ値を文字列化する過程で使用する一時変数 Dim text As String ' ハッシュ値を文字列化したもの Dim hash(1 To 16) As Byte ' ハッシュ値を格納する配列 ' アルゴリズムの取得 hAlgorithm = CreateAlgorithm() If hAlgorithm = 0 Then MsgBox "error! CreateAlgorithm()" End If ' アルゴリズムの初期化 result = InitAlgorithm( hAlgorithm ) If result <> 0 Then MsgBox( "error! InitAlgorithm()" ) End If ' ここでハッシュ化したいデータを入力する result = InputData( hAlgorithm, "sample text", Len("sample text") ) If result <> 0 Then MsgBox( "error! InputData()" ) End If ' VarPtr で 配列 hash の先頭要素へのアドレスを取得する。 length = GetHashLength( hAlgorithm ) result = GetHash( hAlgorithm, VarPtr(hash(1)), length ) If result <> 0 Then MsgBox( "error! GetHash()" ) End If ' バイト列として得たハッシュを表示できるように文字列化する。 For i = 1 To length Step 4 For j = 0 To 3 Step 1 char = Hex( hash(i + j) ) If Len(char) < 2 Then char = "0" + char End If text = text + char Next j Next i ' アルゴリズムの破棄 result = DestroyAlgorithm( hAlgorithm ) If result <> 0 Then MsgBox( "error! DestroyAlgorithm()" ) End If ' ハッシュ値の表示 MsgBox( text ) End Sub