|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
API declarations with fixed length stringI'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
Show quote
Hide quote
"Urs Eichmann" <ursli@online.nospam> schrieb: Take a look at the 'VBFixedString' attribute.> 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 -- M S Herfried K. Wagner M V P <URL:http://dotnet.mvps.org/> V B <URL:http://classicvb.org/petition/> 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... > I would also use StringBuilder (Imports System.Text) Class Thanks. It worked well with a Stringbuilder.Urs |
|||||||||||||||||||||||