0

I am trying to copy a byte array into a Class that is in a third party library

    Dim usr As New RSI_USER_RECORD
    Dim ba(RSI_USER_RECORD.RSI_LEN_USER_REC - 1) As Byte
    'populate ba here
    usr = ba 'how can I do this?

Is this even possible?

Here is the definition of the class (from Reflector)

Public Class RSI_USER_RECORD
    ' Methods
    Public Function Clone() As RSI_USER_RECORD
        Return New RSI_USER_RECORD With { _
            .pID = Me.pID.Clone, _
            .pTemplateVector = Me.pTemplateVector.Clone, _
            .authorityLevel = Me.authorityLevel, _
            .rejectThreshold = Me.rejectThreshold, _
            .timeZone = Me.timeZone _
        }
    End Function


    ' Fields
    Public authorityLevel As RSI_AUTHORITY_LEVEL = RSI_AUTHORITY_LEVEL.RSI_AUTHORITY_NONE
    Public pID As RSI_ID = New RSI_ID
    Public pTemplateVector As RSI_TEMPLATE = New RSI_TEMPLATE
    Public rejectThreshold As UInt16 = 0
    Public Const RSI_LEN_USER_REC As Integer ModOpt(IsConst) = &H10
    Public timeZone As Byte = 0
End Class
Matt Wilko
  • 26,994
  • 10
  • 93
  • 143

2 Answers2

0
    Dim usr As  USER_RECORD() ' init the values
    Dim ba As  USER_RECORD() = New  USER_RECORD(usr.Length - 1) {}

    For i As Integer = 0 To usr.Length - 1
        ba(i) = usr(i) ' if USER_RECORD is value type
       'ba(i) = DirectCast( usr(i).Clone(), USER_RECORD) ' if USER_RECORD is reference type

    Next
Tilak
  • 30,108
  • 19
  • 83
  • 131
  • The problem is that I have the data in a byte array and I want to basically do a memory copy of that into the location of my instance of USER_RECORD (which is a class) – Matt Wilko May 25 '12 at 14:07
  • ok, are you looking for something similar to Buffer block copy. You can check [Buffer.BlockCopy](http://msdn.microsoft.com/en-us/library/system.buffer.blockcopy.aspx) but you need to extract byte array from your User_Record – Tilak May 25 '12 at 15:05
0

Each data in your byte array have to be assigned at one of the attribute. Basically you will have to do something like

authorityLevel = byte(someIndex)
pID = byte(someIndex)
pTemplateVector = byte(someIndex)
rejectThreshold = byte(someIndex)
timeZone =byte(someIndex)

in your code :

Dim usr As New RSI_USER_RECORD
Dim ba(RSI_USER_RECORD.RSI_LEN_USER_REC - 1) As Byte
'populate ba here
usr = ba 'how can I do this?

you can not assign an array in an object, but you could use the array to initialize the object. like

dim anInstance as new RSI_USER_RECORD(ba)

and create a new constructor that will do the job.

Minus
  • 729
  • 8
  • 20