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

Вниз

НЕОБЫЧНАЯ Работа с КОМ - портом   Найти похожие ветки 

 
MAYOR   (2002-08-13 16:26) [0]

Здравия желаю!!!
У меня вот какая проблемаЖ я пишу код работы с ком портом используя ТФайлСтреам .Когда я работаю с этим кодом из формы то
данные передаются и принимаются как надо но стоит етот код один к одному перенести в ДЛЛ-ку так ничего не хочет работать!!
если есть возможность пишите на мыло быстрее решим етот вопрос


 
DiamondShark   (2002-08-14 00:59) [1]

На код бы посмотреть...

PS
А на мыло -- это не по-товарищески. Вруг еще кому-то интересно?


 
Ага,   (2002-08-14 03:45) [2]

а я пишу код работы с ком портом используя авторучку (шариковую, иногда). Дык когда она черного цвета - то все ОК, но стоит взять зеленую, так полный облом!!
Прошу на мыло (лучше Saveguard, если есть возможность! Все-таки микробов поменьше будет).


 
MAYOR   (2002-08-14 10:14) [3]

>DiamondShark © (14.08.02 00:59)
>На код бы посмотреть...

function Connect(const aInitString: PChar): integer; stdcall;
var
tmpStr, Cmp: string;
tmpInt: integer;
m_res: integer;
begin

m_res := 1;
try
///otcrivaem com-port
tmpStr := copy(aInitString, 1, 4);
tmpInt := StrToInt(tmpStr);
if (tmpInt <= 1024) and (tmpInt > 0) then Cmp := "COM" + inttostr(tmpInt) else
Cmp := "COM1";

fs := TFileStream.Create(Cmp, fmOpenReadWrite);

///skorost obmena
tmpStr := copy(aInitString, 5, 6);
tmpInt := StrToInt(tmpStr);


m_hCom := fs.Handle;
m_bPortReady := SetupComm(m_hCom, 128, 128);
m_bPortReady := GetCommState(m_hCom, m_dcb);
fillchar(m_dcb.DCBlength, sizeof(m_dcb), 0);
m_dcb.DCBlength := sizeof(m_dcb);

m_dcb.BaudRate := tmpInt;
m_dcb.Flags := m_dcb.Flags or dcb_DtrControlEnable;
tmpStr := copy(aInitString, 11, 1);
tmpInt := StrToInt(tmpStr);
if (tmpInt < 8) and (tmpInt >= 5)
then m_dcb.ByteSize := tmpInt else m_dcb.ByteSize := 8;



tmpStr := copy(aInitString, 12, 3);
m_dcb.StopBits := ONESTOPBIT;
if tmpStr = "1.5" then m_dcb.StopBits := ONE5STOPBITS;
if tmpStr = " 2" then m_dcb.StopBits := TWOSTOPBITS;

m_dcb.Parity := NOPARITY;
m_bPortReady := SetCommState(m_hCom, m_dcb);

tmpStr := copy(aInitString, 15, 3);
tmpInt := StrToInt(tmpStr);
m_CommTimeouts.ReadIntervalTimeout := tmpInt;

tmpStr := copy(aInitString, 18, 3);
tmpInt := StrToInt(tmpStr);
m_CommTimeouts.ReadTotalTimeoutConstant := tmpInt;

tmpStr := copy(aInitString, 21, 3);
tmpInt := StrToInt(tmpStr);
m_CommTimeouts.ReadTotalTimeoutMultiplier := tmpInt;

tmpStr := copy(aInitString, 24, 3);
tmpInt := StrToInt(tmpStr);
m_CommTimeouts.WriteTotalTimeoutConstant := tmpInt;

tmpStr := copy(aInitString, 27, 3);
tmpInt := StrToInt(tmpStr);
m_CommTimeouts.WriteTotalTimeoutMultiplier := tmpInt;


m_bPortReady := SetCommTimeouts(m_hCom, m_CommTimeouts);



except
m_res := -1;
end;
result := m_res;
end;

//==============================================================================
//Разрыв соединения

function Disconnect: integer; stdcall;
begin
fs.Free;
result := 0;
end;


//==============================================================================
//Отправка данных на линию

function Write(const aBuffer: PChar): integer; stdcall;
begin
fs.WriteBuffer(aBuffer^, length(aBuffer));
result := 1;
end;

//==============================================================================
//Получение данных с линии

function Read(var aBuffer: PChar): integer; stdcall;
var
a, b: PChar;
n: integer;
begin
//a := "q";
n := 1;
// while n <> 0 do try
// m_bPortReady := GetCommState(m_hCom, m_dcb);
//if m_bPortReady then begin
//n := fs.Size;
// while (not EOF(fs)) do begin
fs.ReadBuffer(a^, 1);
strcat(b, a);
// end;

// end;
// except
n := 0;
aBuffer := b;
// end;
result := 1;
end;




 
doomin   (2002-08-20 11:09) [4]

Необычный подход, ничего не скажешь. Но не проще ли воспользоваться старым добрым API или компонентом, обернутым вокруг него? В dll работает - проверено



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

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

Наверх





Память: 0.56 MB
Время: 0.033 c
6-92629
MVova
2002-08-27 15:46
2002.10.28
Где узнать какин порты какими програмами используються?


4-92817
Yegor Derevenets
2002-09-07 17:46
2002.10.28
Размер оперативной памяти, выделенной процессу


1-92590
antonioxxx
2002-10-15 20:05
2002.10.28
Packages в Delphi


1-92549
Jony
2002-10-16 13:50
2002.10.28
Как задать цвет шрифта для акт. ячейки в DBGrid1DrawColumnCell?


1-92442
kukuikar
2002-10-17 21:04
2002.10.28
буду нагл до невозможности





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский