By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,582 Members | 1,720 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,582 IT Pros & Developers. It's quick & easy.

API declarations with fixed length string

P: n/a
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

Nov 21 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
"Urs Eichmann" <ur***@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/>
Nov 21 '05 #2

P: n/a
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...


Nov 21 '05 #3

P: n/a
> I would also use StringBuilder (Imports System.Text) Class

Thanks. It worked well with a Stringbuilder.

Urs
Nov 21 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.