私のVB.NETアプリケーションでは、文字列を与える.dllの関数を使用します。 関数を呼び出すときに、コールバックはその文字列の長さと文字列自体の代わりにアドレスを返します。VB.NETのアドレスからの文字列
私はこのコードで文字列を取得しようとしましたが、私はそれはVBの古典のためではなく、VB.NETのためのものだったと思う:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Object, ByVal Source As Object, ByVal Length As Long)
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long
Private Function pvToString(ByVal lPtr As Long) As String
If lPtr <> 0 Then
pvToString = String(lstrlenA(lPtr), 0)
Call CopyMemory(ByVal pvToString, ByVal lPtr, Len(pvToString))
End If
End Function
は私が4つのエラーを取得し、私は取り除く方法がわかりません
- '。'予想(ByValのための6行目の場合)期待(文字列の回線5用)
- 「string」はクラス型であり、(5行目の場合)式として使用することができない
- 式
- 期待式(用行6 for ByVal)
申し訳ありませんが、私の質問は愚かです。私はあなたの宣言は
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As String
の代わりに、申し訳ありません
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long
テストするために、今のVisual Studioにはアクセスできませんのようなものでなければなりませんように
何私はあなたを助けることができます: 'ByVal'を削除します。 –
これを使用する方法の完全な例は、ここにあります:http://www.pinvoke.net/default.aspx/urlmon/CopyMemory.html –
VB6のドキュメントを見て、 'String()'関数は、特定の文字の指定された量で。この行は問題なく削除できます。 –