Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Byte array to Visual Basic unicode string

Status
Not open for further replies.

Helen1greece

Technical User
Jun 4, 2003
85
0
0
GR
Is there a way to change a byte array to a Visual Basic unicode string? Can somebody give me an example code?
 

Helen1greece, I see you have not read FAQ222-2244 item 15 yet.

Look up the StrConv function

 
I have created this code but when I click on CommandButton Command1 the output I get is nothig! And I wonder if the Private Function ChangeToStringUni is wrong...! Can you help with this:

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, ByVal pSrc As String, ByVal ByteLen As Long)

Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long)



Const RAS95_MaxEntryName = 256

Const RAS_MaxPhoneNumber = 128

Const RAS_MaxCallbackNumber = RAS_MaxPhoneNumber



Const UNLEN = 256

Const PWLEN = 256

Const DNLEN = 12

Private Type RASDIALPARAMS

dwSize As Long

szEntryName(RAS95_MaxEntryName) As Byte

szPhoneNumber(RAS_MaxPhoneNumber) As Byte

szCallbackNumber(RAS_MaxCallbackNumber) As Byte

szUserName(UNLEN) As Byte

szPassword(PWLEN) As Byte

szDomain(DNLEN) As Byte

End Type



Private Type RASENTRYNAME95

dwSize As Long

szEntryName(RAS95_MaxEntryName) As Byte

End Type



Private Declare Function RasDial Lib "rasapi32.dll" Alias "RasDialA" (ByVal lprasdialextensions As Long, ByVal lpcstr As String, ByRef lprasdialparamsa As RASDIALPARAMS, ByVal dword As Long, lpvoid As Any, ByRef lphrasconn As Long) As Long

Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long

Private Declare Function RasGetEntryDialParams Lib "rasapi32.dll" Alias "RasGetEntryDialParamsA" (ByVal lpcstr As String, ByRef lprasdialparamsa As RASDIALPARAMS, ByRef lpbool As Long) As Long


Private Function ChangeToStringUni(Bytes() As Byte) As String

Dim temp As String

temp = StrConv(Bytes, vbUnicode)

ChangeToStringUni = Left(temp, InStr(temp, Chr(0)) - 1)

End Function



Private Function ChangeBytes(ByVal Str As String, Bytes() As Byte) As Boolean

Dim lenBs As Long 'length of the byte array

Dim lenStr As Long 'length of the string

lenBs = UBound(Bytes) - LBound(Bytes)

lenStr = LenB(StrConv(Str, vbFromUnicode))

If lenBs > lenStr Then

CopyMemory Bytes(0), Str, lenStr

ZeroMemory Bytes(lenStr), lenBs - lenStr

ElseIf lenBs = lenStr Then

CopyMemory Bytes(0), Str, lenStr

Else

CopyMemory Bytes(0), Str, lenBs 'stay truncated

ChangeBytes = True

End If

End Function

Private Sub Command1_Click()
Dim rdp As RASDIALPARAMS, t As Long

rdp.dwSize = Len(rdp) + 6

ChangeBytes List1.Text, rdp.szEntryName


t = RasGetEntryDialParams(List1.Text, rdp, 0)


Text1.Text = ChangeToStringUni(rdp.szUserName)

Text2.Text = ChangeToStringUni(rdp.szPassword)

End Sub

Private Sub Form_Load()

Dim s As Long, l As Long, ln As Long, a$

ReDim r(255) As RASENTRYNAME95



r(0).dwSize = 264

s = 256 * r(0).dwSize

l = RasEnumEntries(vbNullString, vbNullString, r(0), s, ln)

For l = 0 To ln - 1

a$ = StrConv(r(l).szEntryName(), vbUnicode)

List1.AddItem Left$(a$, InStr(a$, Chr$(0)) - 1)

Next

If List1.ListCount > 0 Then

For l = 0 To List1.ListCount - 1

If List1.List(l) = "Ivera" Then

List1.ListIndex = l

Exit For

End If

Next l

End If
End Sub
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top