проблема, с которой я столкнулся, заключается в том, что при отправке сообщения L «Вторая строка» моему приложению для чтения последовательного порта я получаю «Вторую строку», но при замазке я получил «Вторую строку», я думаю, это потому, что wchar_t является закодирован в 16-битном формате, поэтому между каждой буквой стоит 00. Но до сих пор не знаю, как это исправить, я новичок во всех этих вещах, поэтому это немного сбивает с толку.
Я не уверен, нужно ли мне устанавливать размер байта равным 16 в моем приложении?
Я хочу отправить это LPCWSTR LogpszMessage, потому что я отправляю некоторые сообщения журнала из приложения. Это еще один код, работающий здесь, должен работать там.
конфигурация шпатлевки составляет 8 бит, и это то, что я отправляю;
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;
int main()
{
LPCWSTR LogpszMessage = L"Second line";
char bytes_to_send[] = "test1 y test2";
// Declare variables and structures
HANDLE hSerial;
DCB dcbSerialParams = { 0 };
COMMTIMEOUTS timeouts = { 0 };
// Open the highest available serial port number
fprintf(stderr, "Opening serial port...");
hSerial = CreateFile(
L"\\\\.\\COM24", GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSerial == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "Error\n");
return 1;
}
else fprintf(stderr, "OK\n");
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (GetCommState(hSerial, &dcbSerialParams) == 0)
{
fprintf(stderr, "Error getting device state\n");
CloseHandle(hSerial);
return 1;
}
dcbSerialParams.BaudRate = CBR_115200;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (SetCommState(hSerial, &dcbSerialParams) == 0)
{
fprintf(stderr, "Error setting device parameters\n");
CloseHandle(hSerial);
return 1;
}
// Set COM port timeout settings
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (SetCommTimeouts(hSerial, &timeouts) == 0)
{
fprintf(stderr, "Error setting timeouts\n");
CloseHandle(hSerial);
return 1;
}
// Send specified text (remaining command line arguments)
DWORD bytes_written, total_bytes_written = 0;
fprintf(stderr, "Sending bytes...");
/*if (!WriteFile(hSerial, bytes_to_send, sizeof(bytes_to_send), &bytes_written, NULL))
{
fprintf(stderr, "Error\n");
CloseHandle(hSerial);
return 1;
}*/
if (!WriteFile(hSerial, LogpszMessage, wcslen(LogpszMessage) * sizeof(wchar_t), &bytes_written, NULL))
{
fprintf(stderr, "Error\n");
CloseHandle(hSerial);
return 1;
}
fprintf(stderr, "%d bytes written\n", bytes_written);
// Close serial port
fprintf(stderr, "Closing serial port...");
if (CloseHandle(hSerial) == 0)
{
fprintf(stderr, "Error\n");
return 1;
}
fprintf(stderr, "OK\n");
getchar();
// exit normally
return 0;
}
Заранее спасибо.