ページ 1 / 1
「SHA1.dll」の使用法について
Posted: 2006年3月19日(日) 09:23
by ひで
初めまして。
AB初心者ですがよろしくお願いします。
現在、水無瀬 優氏作の「SHA1.dll」を使用したソフトを作成したいと思い、あれこれやっているところなのですが、コーディングの仕方がよくわからないのです。
とりあえず関数仕様(
http://katsura-kotonoha.sakura.ne.jp/soft/hashdll.shtml)などを見ながら、
1. LoadLibrary() で DLL をロードする。
2. GetProcAddress() で関数へのポインタを取得する。
ところまではなんとか出来たのですが、その先がわかりません。どなたかご教授をお願いいたします。
Re: 「SHA1.dll」の使用法について
Posted: 2006年3月19日(日) 16:17
by hira
コード: 全て選択
Declare Function CreateAlgorithm Lib "sha1" () As HANDLE
Declare Function DestroyAlgorithm Lib "sha1" (hAlgorithm As HANDLE) As DWord
Declare Function InitAlgorithm Lib "sha1" (hAlgorithm As HANDLE) As DWord
Declare Function InputData Lib "sha1" (hAlgorithm As HANDLE, data As VoidPtr, length As Long) As DWord
Declare Function GetHashLength Lib "sha1" (hAlgorithm As HANDLE) As Long
Declare Function GetHash Lib "sha1" (hAlgorithm As HANDLE, buffer As VoidPtr, bufsize As Long) As DWord
Declare Function GetHashTextLength Lib "sha1" (hAlgorithm As HANDLE) As Long
Declare Function GetHashText Lib "sha1" (hAlgorithm As HANDLE, buffer As *Char, bufsize As Long) As DWord
ひでさんの提示されたページを参考にして、関数の宣言を作ってみました。
この宣言を記述すれば、あとはそのページのサンプルにあるような使い方ができます。
※バージョン依存などの場合はLoadLibrary等は役立ちますが、DLLを同梱するなどの理由でエラー処理を考えなくていいような場合には関数を宣言して使うと簡単です(この場合、DLLが存在しなければエラーが出てプログラムは起動しません)。
※念のためですが、LoadLibrary→GetProcAddressの手順を踏んでも関数を呼び出す方法はあります(少し面倒ですが)。
Re:Re:「SHA1.dll」の使用法について
Posted: 2006年3月19日(日) 21:51
by ひで
hiraさん 初めまして (^_^)
レスありがとうございます。
自分としては、DLLを同梱しないでも配布可能となるようLoadLibrary→GetProcAddressの手順(関数ポインタのコール)でやってみたかったのですが、何分ポインタというものがまだ良く理解できていないので、お教えいただいたとおりDeclareでやってみたいと思います!
ついでのお願いで恐縮ですが、関数ポインタをコールする場合はどのようなコードになるのでしょうか? 今後の参考にしたいので、お教えいただけると幸いです。
Re:「SHA1.dll」の使用法について
Posted: 2006年3月20日(月) 08:08
by hira
コード: 全て選択
'プログラム開始時
Dim hDLL As HINSTANCE
Dim CreateAlgorithm As *Function() As HANDLE
Dim DestroyAlgorithm As *Function(hAlgorithm As HANDLE) As DWord
'(中略)
hDLL=LoadLibrary("sha1.dll")
'hDLL=0 のとき、DLLが読み込めていない。
CreateAlgorithm=GetProcAddress(hDLL,"CreateAlgorithm")
DestroyAlgorithm=GetProcAddress(hDLL,"DestroyAlgorithm")
'(中略)
'プログラム終了時
FreeLibrary(hDLL)
関数ポインタを格納する変数は、CreateAlgorithm・DestroyAlgorithmと同じようにすれば他の関数についても宣言できます。
あとはこの変数にGetProcAddressの戻り値を格納することになります。
hDLLやGetProcAddressの戻り値を格納する変数については、(1つの関数の中でDLL読み込み→関数呼び出し→解放をやってしまうような場合を除いて)グローバルにしておかなければなりません。
取得した関数の呼び出し方法はDeclareのときと同じです。
Re:「SHA1.dll」の使用法について
Posted: 2006年3月21日(火) 23:45
by ひで
hiraさんレス遅れてすいません。
いろいろありがとうございます。
ちょっと時間がとれなくて、未だに教えていただいた最初のコードもテスト出来ないでいるのですが、また、わからないことが出来ましたら質問させていただきたいと思いますので、どうかよろしくお願いします m(_ _)m