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

解決


バル  2004-03-19 20:13:17  No: 112433

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 20:53:34  No: 112434

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


バル  2004-03-19 21:08:07  No: 112435

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


魔界の仮面弁士  2004-03-19 21:44:28  No: 112436

> 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 21:56:25  No: 112437

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


特攻隊長まるるう  2004-03-19 22:54:45  No: 112438

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


バル  2004-03-20 00:21:51  No: 112439

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


バル  2004-03-20 03:06:40  No: 112440

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加