problem z funkcja WriteFile

  • 2 Odpowiedzi
  • 809 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

problem z funkcja WriteFile
« dnia: Styczeń 15, 2006, 13:18:38 »
mam taki problem: przy komunikacji przez port COM funkcja WriteFile
wysyla mi lancuch ale zmniejszony o polowe:

kod wyglada tak:
void CPortyDlg::PutString(CString lancuch)
{
  DWORD dwByteCount = 0;
  WriteFile(aPort.Handle, lancuch, lancuch.GetLength() ,    
              &dwByteCount, NULL);
}//PutString



a wywolanie tej funkcji PutString(m_tekst);
gdzie m_tekst jest zmienna typu CString skojarzana z EditBoxem.
Problem jest w tym ze lancuch wpisany do EditBoxa wyslany zostaje tylko
w polowie.
Bycmoze funkcja PutString musi miec parametr wejsciowy innego typu,
a moze jest jakas metoda dla typu CString ktora zwraca ilosc bajtow, a nie dlugosc lancucha(tak jak to robi GetLength() )
Jezeli zadeklaruje staly napis i stala dlugosc to wysyla tak jak trzeba.
dzieki za pomoc
[/code]

*

Offline fp

  • **
  • 113
    • http://pdaclub.pl/forum/index.php?action=search
Re: problem z funkcja WriteFile
« Odpowiedź #1 dnia: Styczeń 16, 2006, 09:52:23 »
void CPortyDlg::PutString(CString lancuch)
{
  DWORD dwByteCount = 0;
  WriteFile(aPort.Handle, (LPCTSTR)lancuch, lancuch.GetLength()*sizeof(WCHAR) ,  
              &dwByteCount, NULL);
}


takie wywołanie będzie poprawne - łańcuchy znakowe w Windows CE są w UTF16, a więc zajmują po 2 bajty. metoda CString::GetLength() zwraca liczbę znaków a nie bajtów.

problem z funkcja WriteFile
« Odpowiedź #2 dnia: Styczeń 16, 2006, 21:44:11 »
dziala,
dzieki za pomoc