Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT 4.6] Проблема в QTCreator


Автор: Moby 3.6.2010, 13:56
До этого код был написан в MVS, программа запускается без ошибок.

Задача - послать по COM порту команды. Делаю это через WriteFile.

В общем все работает и посылается. Теперь ComPort.h и ComPort.cpp сую в QTCreator и он ругается на эти две строчки.


Код

TCHAR *pcCommPort = TEXT("COM1");  

error: cannot convert 'const CHAR*' to 'TCHAR*' in initialization

и на эту
Код

SecureZeroMemory(&dcb, sizeof(DCB));

error: 'SecureZeroMemory' was not declared in this scope

В чем ошибка то, как такое может быть, что бы в Студии все было нормально а тут ошибки?

На сколько я понимаю QTCreator использует, отличный от Студии, компилятор MinGW. Может дело в этом, но тогда как быть?

Автор: kuzulis 3.6.2010, 15:01
Цитата

В общем все работает и посылается. Теперь ComPort.h и ComPort.cpp сую в QTCreator и он ругается на эти две строчки.
....
...
В чем ошибка то, как такое может быть, что бы в Студии все было нормально а тут ошибки?

На сколько я понимаю QTCreator использует, отличный от Студии, компилятор MinGW. Может дело в этом, но тогда как быть?


QtCreator может использовать любой компилятор. 

Но если используешь MinGW, то:

[quote error: cannot convert 'const CHAR*' to 'TCHAR*' in initialization[/quote]
выходы :
1. Использовать ANSII функции из Win32API и не использовать типы данных типа  TCHAR  и т.п.
2. Посмотреть как "оборачивается" использование TCHAR и т.п. в исходниках самой Qt. (см. макрос QT_WA)

Цитата

error: 'SecureZeroMemory' was not declared in this scope


в хейдерах MinGW нет прототипа этой ф-ции.
выходы:
1. Заменить ее на ZeroMemory() или memset()
2. Подключить виндовую dll-ку в которой хранится ф-я SecureZeroMemory()

Добавлено через 4 минуты и 38 секунд
и раз используешь Qt - то грех не воспользоваться готовыми библиотеками для работы с последовательными портами:
QextSerialPort
или
QSerialDevice

ЗЫ: кстати можешь посмотреть как ЭТО сделано в них. 

Автор: Moby 3.6.2010, 15:13
Спасибо, все исправил. Просто надо было быстро реализовать послыку команд и первое на что наткнулся был способ через WriteFile.

Автор: djamshud 3.6.2010, 15:14
1.
Код

TCHAR const*pcCommPort = TEXT("COM1");


2.
Код

memset(&dcb,0,sizeof(DCB));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)