VBでVC作成のDLLの呼び出しするには?

解決


バル  2004-03-19 11:13:17  No: 112433  IP: [192.*.*.*]

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)

編集 削除
たかみちえ  URL  2004-03-19 11:53:34  No: 112434  IP: [192.*.*.*]

これだけではよくわかりませんが、DLLはどこにおいていますか?

編集 削除
バル  2004-03-19 12:08:07  No: 112435  IP: [192.*.*.*]

C:\WINNT\system32の下に入れています。
たぶんですが、引数の宣言(ByRef buf As Byte部分)に問題あるのかな?と思っていますが...
よろしくお願いします。

編集 削除
魔界の仮面弁士  2004-03-19 12:44:28  No: 112436  IP: [192.*.*.*]

> 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にしなければいけませんが…)

編集 削除
バル  2004-03-19 12:56:25  No: 112437  IP: [192.*.*.*]

DL_Data(0)としてみたのですが、同じ症状でした。
VC側のコードがまずいのでしょうか?
よろしくお願い致します。

編集 削除
特攻隊長まるるう  2004-03-19 13:54:45  No: 112438  IP: [192.*.*.*]

たぶんとか言わずにちゃんとデバッグしてみたらどうです?。
引数なし、引数1番目のみ、引数2番目のみ、引数3番目のみ、
を実行すればもっと特定されると思いますが?

編集 削除
バル  2004-03-19 15:21:51  No: 112439  IP: [192.*.*.*]

説明不足で申し訳ありませんでした。(初心者なもので...スミマセン)
引数なしの時はOKでした。引数がある場合にエラーが出ています。
何か調べる方法ありますか?
よろしくお願いします。

編集 削除
バル  2004-03-19 18:06:40  No: 112440  IP: [192.*.*.*]

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

編集 削除