VCで作成したDLLをVBで実行しようとしたら、”DLLが正しく呼び出せません”
のエラーが出ます。色々調べたのですが、原因がわかりませんでした。
どなたか、ご教示お願いします。
VBのコード
Declare Function tmon_read Lib "TMON.DLL" (ByRef buf As Byte, ByVal Address As Long, ByVal Length As Long) As Long
Sub test
dim DL_Data(0 To DATA_SU) As Byte
Dim sts As Long
sts = tmon_read(DL_Data, &H10000, 512)
End Sub
VCのコード
__declspec( dllexport ) signed long tmon_read(char *buf, signed long addr, signed long len)
これだけではよくわかりませんが、DLLはどこにおいていますか?
編集 削除C:\WINNT\system32の下に入れています。
たぶんですが、引数の宣言(ByRef buf As Byte部分)に問題あるのかな?と思っていますが...
よろしくお願いします。
> Declare Function tmon_read Lib "TMON.DLL" (ByRef buf As Byte, ByVal Address As Long, ByVal Length As Long) As Long
この宣言でならば、
> sts = tmon_read(DL_Data, &H10000, 512)
ではなく、
sts = tmon_read(DL_Data(0), &H10000, 512)
のように呼び出してください。
もし、「DL_Data」で渡したいなら、Declare側は「ByRef buf() As Byte」とと書く必要があります。(もっともこれだと、DLL側をSafeArrayにしなければいけませんが…)
DL_Data(0)としてみたのですが、同じ症状でした。
VC側のコードがまずいのでしょうか?
よろしくお願い致します。
たぶんとか言わずにちゃんとデバッグしてみたらどうです?。
引数なし、引数1番目のみ、引数2番目のみ、引数3番目のみ、
を実行すればもっと特定されると思いますが?
説明不足で申し訳ありませんでした。(初心者なもので...スミマセン)
引数なしの時はOKでした。引数がある場合にエラーが出ています。
何か調べる方法ありますか?
よろしくお願いします。
VBのコードに下記エイリアスを設定すればエラーなくなりました。
Declare Function tmon_read Lib "TMON.DLL" Alias "_tmon_read@12" (ByRef buff As Byte, ByVal Address As Long, ByVal Length As Long) As Long