Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

Com-порт операции с DCB.   Найти похожие ветки 

 
Роман   (2004-03-04 18:55) [0]

С помощью CreateFile создан файл Com1, функция выполнилась без замечаний, однако записать состояние порта в DCB структуру не удаётся. Ниже приведён код, в котором я пытаюсь выполнить GetCommState и сразу проверяю результат его выполнения, показаны только операторы работающие с GetCommState.


Var
 DCB: TDCB;

//Другие операторы и т.д. и т.п.
//Далее...

SetLastError(0);
lpMsgBuf:="";
DCB.DCBlength:=sizeof(TDCB);
if not (GetCommState(CommHandle, DCB)) then
ShowMessage("Неудача выгрузки в DCB сотояния!");
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError, LANG_SYSTEM_DEFAULT, @lpMsgBuf, 100, nil);
ShowMessage("После GetCommState:"+" №="+IntToStr(GetLastError)+" "+lpMsgBuf);


На всё это творчество ответ: "После GetCommState: №=183 Невозможно создать файл, так как он уже существует."
Хотя CreateFile прошёл без замечаний...

Ещё вопрос: как проверить, на что указывает CommHandle? Вдруг не на Com1, уже и не знаю что предположить...


 
idiliya   (2004-03-04 19:29) [1]

Роман

"Неудача выгрузки в DCB сотояния" - показывается этот диалог? если да то проблема выше в том коде что вы не привели

Во вторых:

первый же ваш GetLastError я лично получаю 0, т.к. ShowMessage выполнилась успешно а там где-то внутри SetLastError(0) видимо стоит

и далее:
FormatMessage(...) API функция? да! соответственно "If the function fails, the return value is zero. To get extended error information, call GetLastError. "

и в следующей же строке вы получаете тот самый GetLastError от FormatMessage а не от ...DCB:
ShowMessage("После GetCommState:"+" №="+IntToStr(GetLastError)+" "+lpMsgBuf);

но это так, к слову.

You should call the GetLastError function immediately when a function"s return value indicates that such a call will return useful data. That is because some functions call SetLastError(0) when they succeed, wiping out the error code set by the most recently failed function.
Most functions in the Win32 API that set the thread"s last error code value set it when they fail; a few functions set it when they succeed.


 
Роман   (2004-03-04 19:54) [2]

Кому: Idiliya

Этот блок можно не включать в текст:
SetLastError(0);
lpMsgBuf:="";


Новый вариант:

Var
 DCB: TDCB;
 vLastError: Cardinal;

//Другие операторы и т.д. и т.п.
//Далее...

ShowMessage("Активация начата!");
DCB.DCBlength:=sizeof(TDCB);
GetCommState(CommHandle, DCB);
vLastError:=GetLastError;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER + FORMAT_MESSAGE_FROM_SYSTEM,
nil, vLastError, LANG_SYSTEM_DEFAULT, @lpMsgBuf, 100, nil);
ShowMessage("После GetCommState:"+" №="+IntToStr(vLastError)+" "+lpMsgBuf);


Теперь GetLastError  используеться только один раз, сразу после GetCommState.
Результат: "После GetCommState: №=1 Неверная функция."
Опять неудача...     :-(


 
Talla2k ©   (2004-03-05 01:50) [3]

CommHandle : integer;
DCB : TDCB;

  GetCommState(CommHandle,DCB);
  DCB.BaudRate:=CBR_4800;
  DCB.Parity:=NOPARITY;
  DCB.ByteSize:=8;
  DCB.StopBits:=OneStopBit;
  SetCommState(CommHandle,DCB);

З.Ы. DCB.DCBlength:=sizeof(TDCB); А это зачем???


 
idiliya   (2004-03-05 11:55) [4]

CommHandle :Longword; //THandle однако

З.Ы. DCB.DCBlength:=sizeof(TDCB); А это зачем???
Роман:
это надо только если сам создаёшь DCB, а не в случае GetCommState, хотя дело не в этом

//Другие операторы и т.д. и т.п.
//Далее...

это интересует, хотя бы CommHandle = CreateFile("COM1"...) можно в студию?


 
Talla2k ©   (2004-03-05 21:39) [5]

2 idiliya
А посмотреть в лом???
Вчера отвечал на все вопросы по портам в этой ветке.С десяток их было!
http://delphimaster.net/view/7-1078391643/


 
Роман.   (2004-03-08 18:38) [6]

Перейдите к вопросу:
Com-порт против NT Server.
http://delphimaster.net/view/7-1078391643/
Пожалуйста.


 
idiliya   (2004-03-09 15:03) [7]

2 Talla2k
не хамите



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
1-1082023357
RainKM
2004-04-15 14:02
2004.05.02
Компоненты


3-1081136342
Марат
2004-04-05 07:39
2004.05.02
Формат ячейки в DBGrid


1-1081966538
Netrix
2004-04-14 22:15
2004.05.02
Как зная путь и имя файла определить каким процессом он открыт?


9-1069619329
DDS
2003-11-23 23:28
2004.05.02
Не могу поместить один GL_POLYGON перед другим, ерунда какая-то..


7-1078907116
Alex*
2004-03-10 11:25
2004.05.02
Двусторонняя печать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский