Wysyłam dane przy użyciu tego kodu w vb6
cds.dwData = CLng(RegisterWindowMessage("MyWMCopyData"))
cds.cbData = Len(Message) * 2 ' characters are 2-bytes each
cds.lpData = StrPtr(Message) ' access the string's character buffer directly
' Send the string.
Dim i As Long:i = SendMessage(lHwnd, WM_COPYDATA, MainForm.hwnd, cds)
Czy możesz mi pomóc z kodem, aby go otrzymać vurrently mam to?
Dim B() As Byte
ReDim B(0 To tCDS.cbData - 1) As Byte
CopyMemory B(0), ByVal tCDS.lpData, tCDS.cbData
Dim sData As String
sData = Trim$(StrConv(B, vbUnicode))
Jeśli wyślę Hello
, otrzymam go jako H e l l o
2 odpowiedzi
Mieszasz konwersje ciągów.
Twój kod wysyłający wysyła wskaźnik do pełnego ciągu Unicode. Kiedy go otrzymasz, przekazujesz go do StrConv(..., vbUnicode)
, który konwertuje z ANSI na Unicode, „uszkadzając” dane ciągu.
Aby rozwiązać ten problem, wystarczy przypisać ostateczną tablicę bajtów bezpośrednio do ciągu:
sData = B
Alternatywnie możesz przydzielić długość ciągu i skopiować bezpośrednio do niego:
Dim sData As String
sData = String(tCDS.cbData / 2, vbNullChar) ' characters are 2-bytes each
CopyMemory ByVal StrPtr(sData), ByVal tCDS.lpData, tCDS.cbData
Ciąg jest w formacie Unicode
W uncode każdy pojedynczy znak zajmuje 2 bajty, ponieważ ASCII miał tylko 1 bajt, więc myślę, że vb wypełnia kolejny bajt spacją (być może)
Podobne pytania
Nowe pytania
api
NIE UŻYWAJ. W stosownych przypadkach użyj określonych tagów, takich jak [google-cloud-platform], [facebook], [amazon-web-services] lub [api-design]. Pytania dotyczące rekomendacji lub znalezienia interfejsu API są nie na temat.