在尝试使用 WindowsAPI 时,我的应用程序出现了一点问题......我正在尝试以一种可以正常工作的方式连接到句柄,但是如果我更改代码,它就不再工作了......
有效的代码:
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)
无论如何,或者它说我没有正确的语法或错误:无法将 unicode 字符串转换为 wchar_t。
编辑:
完整源码(功能):
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。