PDAclub.pl - Forum użytkowników technologii mobilnych

Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: majkel_2 w Styczeń 15, 2006, 13:18:38

Tytuł: problem z funkcja WriteFile
Wiadomość wysłana przez: majkel_2 w 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]
Tytuł: Re: problem z funkcja WriteFile
Wiadomość wysłana przez: fp w 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.
Tytuł: problem z funkcja WriteFile
Wiadomość wysłana przez: majkel_2 w Styczeń 16, 2006, 21:44:11
dziala,
dzieki za pomoc