.netでcall から ByValの値を呼び出すには?


vbib32  2005-08-06 10:29:05  No: 123976

初歩的な質問ですいません。
vb4.0からvb.netにプログラムを書き換えているのですが4.0で
Declare function a32 Lib "gp32.dll" Alias "aA" (Byval ud As_ Long,sstr As Any) As Long

Sub a(ByVal ud As Integer,Byval udname As string)
    Call a32(ud, Byval udname)
end sub

のプログラムを

.netで
Declare function a32 Lib "gp32.dll" Alias "aA" (Byval ud As_ Long,sstr As String) As Long

Sub a(ByVal ud As Integer,Byval udname As string)
    Call a32(ud, Byval udname)
end sub

と直してる途中なのですが、ByValのところで"式が必要です"というエラーがでます。解決法を自分なりに探したのですがわかりません。ご教授お願いします。


マグ  2005-08-06 18:16:45  No: 123977

APIの記述に問題があります。

Public Declare Function a32 Lib "gp32.dll" Alias "aA" (ByVal ud As Integer, ByRef sstr As Object) As Integer

あと、第2引数のsstrはByrefではないでしょうか?
そうしたら、サブルーチンの'udname'もByrefになると思います。
Callに関しての記述も
Call a32(ud, udname)で・・・・・


vbib32  2005-08-07 00:42:05  No: 123978

申し訳ありません。書き間違えていました。
4.0で
    Declare Function a32 Lib "gp32.dll" Alias "aA" (ByVal ud As Long, ByVal sstr As any) As Long

 Public Sub a(ByVal ud As Integer, ByVal udname As string)       
    Call a32(ud, Byval udname )
end sub

でした。
.netで
   Declare Function a32 Lib "Gpib-32.dll" Alias "aA" (ByVal ud As Long, ByVal sstr As Object) As Long

  Public Sub a(ByVal ud As Integer, ByVal udname As String)
     Call a32(ud, ByVal udname)
End Sub

とご指摘のようにobjectに変えてみたのですが、やはりByValのところでエラーが出てしまいます。

Call a32(ud, udname)
の様にByValを消すとエラーは解決されるのですが、実際にプログラムが動くかは、まだ他にもエラーがあるので確認出来ません。ByValを消しても動くものでしょうか?


マグ  2005-08-07 01:37:18  No: 123979

あと、
LongをIntegerに直す。
APIの第2引数をByrefに変更
aのサブルーチンの第2引数もByrefに変更

とレスに書いてあります。
>実際にプログラムが動くかは、まだ他にもエラーがあるので確認出来ません。ByValを消しても動くものでしょうか?

'Call a32(ud, udname)'がVB.NETでのサブルーチンの受け渡しでの正しい記述です。
実際に動くかどうかは動かしてください。


vbib32  2005-08-07 02:26:22  No: 123980

ありがとうございます。しばらく、時間がかかりそうなので出来次第報告いたします。


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




  


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