Home All Groups Group Topic Archive Search About

API declarations with fixed length string

Author
4 Apr 2005 9:04 AM
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

Author
4 Apr 2005 10:07 AM
Herfried K. Wagner [MVP]
Show quote Hide quote
"Urs Eichmann" <ursli@online.nospam> schrieb:
> 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.

--
M S   Herfried K. Wagner
M V P  <URL:http://dotnet.mvps.org/>
V B   <URL:http://classicvb.org/petition/>
Author
4 Apr 2005 10:52 AM
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...
Author
4 Apr 2005 2:39 PM
Urs Eichmann
> I would also use StringBuilder (Imports System.Text) Class

Thanks. It worked well with a Stringbuilder.

Urs