API declarations with fixed length string

U

Urs Eichmann

Hello
I'm trying to convert the following VB6 code to VB.NET, but can't seem
to find the right API declaration. Note that the Buffer is an output
field which the API call will fill a value in.

VB6 Code:

[VB6]

Type JAG_STRING_40
Data As String * 40
End Type
Public Declare Function JagRead Lib "jagxapi.dll" (ByVal DataPath As
String, ByVal BufferLen As Integer, Buffer As Any, ReturnLen As Integer)
As Integer

Private Function ReadVariable() as String
Dim Lit01Val As JAG_STRING_40
JagRead("/j1/var01", 40, Lit01Val, jagReturnLength)
ReadVariable = RTrim$(Lit01Val.Data)
end Sub

I tried this declaration, but the returned buffer always seems to be empty:

[VB.NET]

Private Const BUFFER_LEN As Integer = 40

<StructLayout(LayoutKind.Sequential)> Private Structure FixLenBuffer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=BUFFER_LEN)>
Public Data As String

Public Sub New(ByVal vData As String)
Me.Data = LSet(vData, BUFFER_LEN)
End Sub

End Structure

Private Shared mBuffer As FixLenBuffer

Private Declare Ansi Function JagReadApi Lib "jagxapi.dll" Alias
"JagRead" (ByVal DataPath As String, ByVal BufferLen As Short, ByRef
Buffer As FixLenBuffer, ByRef ReturnLen As Short) As Short

Friend Shared Function JagRead(ByVal vVarName As String) As String

Dim retLen As Short
mBuffer = New FixLenBuffer("")
Dim ret As Short = JagReadApi("/j1/" + vVarName, BUFFER_LEN,
mBuffer, retLen)
Return Trim(Left(mBuffer.Data, retLen))

End Function



Any help would be greatly appreciated!

Urs
 
H

Herfried K. Wagner [MVP]

Urs Eichmann said:
I'm trying to convert the following VB6 code to VB.NET, but can't seem
to find the right API declaration. Note that the Buffer is an output
field which the API call will fill a value in.

VB6 Code:

[VB6]

Type JAG_STRING_40
Data As String * 40
End Type
Public Declare Function JagRead Lib "jagxapi.dll" (ByVal DataPath As
String, ByVal BufferLen As Integer, Buffer As Any, ReturnLen As Integer)
As Integer

Take a look at the 'VBFixedString' attribute.
 
C

Crouchie1998

Are you looking for someone to totally re-write your finction/API
declaration? If so, attach the 'jagxapi.dll' please

I would also use StringBuilder (Imports System.Text) Class

Declare sb As New System.Text.StringBuilder...
 
U

Urs Eichmann

I would also use StringBuilder (Imports System.Text) Class

Thanks. It worked well with a Stringbuilder.

Urs
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top