stsanz
asked on
Casting in VB
Hello,
I am new to VB but I know C and, in a VB program I would like to "cast" a function parameter, just like it is done in C. The case is the following :
I have a VB function :
Function MyFunc (ByVal name As String) As Integer
and I want to call this function with an array of bytes as actual value of 'name' parameter without copying it to an intermediary string variable (this is important) :
Dim MyName(10) as Byte
' Fill MyName array with values
MyName(0) = ...
' Call MyFunc with MyName variable
result = MyFunc(MyName)
I guess I am missing here a conversion function taking an array of bytes as parameter and returning a string. Does such function exist in VB ?
Supplementary question : On Windows NT, are VB strings Unicode ?
I am new to VB but I know C and, in a VB program I would like to "cast" a function parameter, just like it is done in C. The case is the following :
I have a VB function :
Function MyFunc (ByVal name As String) As Integer
and I want to call this function with an array of bytes as actual value of 'name' parameter without copying it to an intermediary string variable (this is important) :
Dim MyName(10) as Byte
' Fill MyName array with values
MyName(0) = ...
' Call MyFunc with MyName variable
result = MyFunc(MyName)
I guess I am missing here a conversion function taking an array of bytes as parameter and returning a string. Does such function exist in VB ?
Supplementary question : On Windows NT, are VB strings Unicode ?
Sorry, the trick is not to dimension your array:
Dim MyName() As Byte
Dim MyName() As Byte
Dim cArray(260) As Byte
Dim sString As String
Dim lVal As Long
lVal = SendMessage(Me.hwnd, WM_GETTEXT, 255&, cArray(0))
sString = StrConv(cArray, vbUnicode)
sString = Left(sString, lVal)
Debug.Print sString
I believe you will need the c null character at the end of your array.
Dim sString As String
Dim lVal As Long
lVal = SendMessage(Me.hwnd, WM_GETTEXT, 255&, cArray(0))
sString = StrConv(cArray, vbUnicode)
sString = Left(sString, lVal)
Debug.Print sString
I believe you will need the c null character at the end of your array.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Im not sure what the actual question is, but I can explain a little more, what caraf_C was talking about
If you do not dimension the array, then you can redimension the number of items in it, i.e.
dim cArray() as byte
redim cArray(255)
This would make the array 255 characters.
If you wanted to do this for a string of an unknown length, you could do the following:
Dim cArray
dim i as integer
for i = 1 to len(string)
ReDim Preserve cArray(i)
cArray(i) = mid$(String, i, 1)
next i
Redim Preserve will ReDimension the array, while keeping the contents intact
You would have to pass the array as a variant, which can still be used as an array within the function. Youw would just have to modify the above code to make the array back into a string.
SiM99
If you do not dimension the array, then you can redimension the number of items in it, i.e.
dim cArray() as byte
redim cArray(255)
This would make the array 255 characters.
If you wanted to do this for a string of an unknown length, you could do the following:
Dim cArray
dim i as integer
for i = 1 to len(string)
ReDim Preserve cArray(i)
cArray(i) = mid$(String, i, 1)
next i
Redim Preserve will ReDimension the array, while keeping the contents intact
You would have to pass the array as a variant, which can still be used as an array within the function. Youw would just have to modify the above code to make the array back into a string.
SiM99
MyName = name
Yes.