Russian Qt Forum
Ноябрь 22, 2024, 18:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при работе с CreateFile  (Прочитано 10861 раз)
BNN
Гость
« : Ноябрь 09, 2005, 10:30 »

Код:

#include <windows.h>
............
HANDLE        CommPort;
............
CommPort=CreateFile( "COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

При компиляции выдается ошибка:
 cannot convert `const char*' to `const WCHAR*' for a
rgument `1' to `void* CreateFileW(const WCHAR*, DWORD, DWORD, _SECURITY_ATTRIBUT
ES*, DWORD, DWORD, void*)'

Сколько не искал ни у кого вроде таких ошибок не возникает.
Компилирую gcc (MinGW).
В чем проблема?
Записан
BNN
Гость
« Ответ #1 : Ноябрь 09, 2005, 10:52 »

Цитата: "BNN"
Код:

#include <windows.h>
............
HANDLE        CommPort;
............
CommPort=CreateFile( "COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

При компиляции выдается ошибка:
 cannot convert `const char*' to `const WCHAR*' for a
rgument `1' to `void* CreateFileW(const WCHAR*, DWORD, DWORD, _SECURITY_ATTRIBUT
ES*, DWORD, DWORD, void*)'

Нашел!
В MInGW в файле winbase.h обьявлены две функции CreateFile:
Код:
WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
WINBASEAPI HANDLE WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);

В программе нужно указывать какую функцию используешь, в зависимости от типа аргумента. Я указал:
 
Код:
 CommPort=CreateFileA( "COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

и все заработало.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Ноябрь 09, 2005, 14:41 »

еще не все

в WINXP работать не будет

так надо

Код:
HANDLE handl;

handl = CreateFile("\\\\.\\COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Февраль 04, 2006, 00:47 »

Цитата: "Admin"
еще не все

в WINXP работать не будет

так надо

Код:
HANDLE handl;

handl = CreateFile("\\\\.\\COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);



    Такой вызов функции
Код:
CreateFile( "COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)

прекрасно работает под WinXP. Проверено 1000 раз!!!
    Дело в следующем: если мы пытаемся открыть порт с именами COM1-COM9, то приставку \\.\ можно не писать (система сама это поправит), а если мы пытаемся открыть порт с номером больше 9, то здесь действительно произойдет ошибка открытия порта. В этом случае необходимо дописать данную приставку.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 22.