Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

НЕОБЫЧНАЯ Работа с КОМ - портом [D5, D6, NT4, Win2k, WinXP]


MAYOR ©   (2002-08-13 16:26:00) 

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


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

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


MAYOR   (2002-08-14 10:14:00) [2]

>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;



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

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


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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо