У меня небольшая проблема с моим приложением при попытке использовать WindowsAPI ... Я пытаюсь подключиться к дескриптору так, как он работает, но если я изменю код, который он делает «т работает больше ...Преобразование строки unicode в wchar_t
код, который работает:
handle_t porta; // Global var
COMMTIMEOUTS tempos; // Global var
DCB configuracao; // Global var
wchar_t pcCommPort[]= TEXT("COM1");
//gate address to be accessed (COM1)
код, который я пытаюсь сделать:
handle_t porta; // Global var
COMMTIMEOUTS tempos; // Global var
DCB configuracao; // Global var
String GATE = "COM" + Label1->Text;
wchar_t pcCommPort[]= TEXT(GATE);
//gate address to be accessed (Any gate)
Я также попробовал:
handle_t porta; // Global var
COMMTIMEOUTS tempos; // Global var
DCB configuracao; // Global var
wchar_t pcCommPort[]= TEXT("COM" + Label1->Text);
//gate address to be accessed (Any gate)
И:
handle_t porta; // Global var
COMMTIMEOUTS tempos; // Global var
DCB configuracao; // Global var
String GATE = "COM" + Label1->Text;
wchar_t pcCommPort[]= GATE;
//gate address to be accessed (Any gate)
В любом случае или он говорит, что я не Мид правильный синтаксис или ошибка: Не удается преобразовать юникод строку в wchar_t.
EDIT:
Полный источник (функция):
void abrirporta(){
wchar_t pcCommPort[]= TEXT("COM1");
//endereço da porta a ser acessada (COM1)
//porta foi declarado como HANDLE na seção private da declaração de classe Form
//HANDLE porta
porta = CreateFile(pcCommPort,GENERIC_READ+GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(porta == INVALID_HANDLE_VALUE){
log(7);
throw Exception("Não foi possível abrir a porta COM.\nPor favor, tente novamente!");
}
//Tempo máximo entre o recebimento de 2 bytes (ms)
tempos.ReadIntervalTimeout = 20;
//Multiplicador de tempo de recebimento por byte
tempos.ReadTotalTimeoutMultiplier = 0;
tempos.ReadTotalTimeoutConstant = 100;
tempos.WriteTotalTimeoutMultiplier = 0;
tempos.WriteTotalTimeoutConstant = 100;
if(!SetCommTimeouts(porta ,&tempos))
{
CloseHandle(porta);
frmPrincipal->spLig->Visible = False;
frmPrincipal->spStatusInd->Visible = False;
log(6);
throw Exception("Erro na configuração de Timeout");
}
GetCommState(porta, &configuracao);
configuracao.BaudRate = 19200;
configuracao.ByteSize = 8;
configuracao.Parity = NOPARITY;
configuracao.StopBits = ONESTOPBIT;
if(!SetCommState(porta,&configuracao))
{
CloseHandle(porta);
frmPrincipal->spLig->Visible = False;
frmPrincipal->spStatusInd->Visible = False;
log(5);
throw Exception("Erro na Configuração da porta");
}
frmPrincipal->spLig->Visible = True;
frmPrincipal->spStatusInd->Visible = False;
log(3);
frmPrincipal->btEnviar->Enabled = true;
frmPrincipal->swSaida1->Enabled = true;
log(8);
}
Я надеюсь, что вы можете мне помочь ... Поскольку теперь благодаря XD.
Почему вы продолжаете хранить его в 'wchar_t []' вместо того чтобы держать его в классе строки что-то вроде? –
Вы, кажется, используете C++/CLI, а не C++. –
Если это правда, тогда вы должны использовать API-интерфейсы .Net, а не API Win32. Преобразование типов C++/CLI для совместимости с Win32 - это кошмар, с которым вы не хотите попасть. –