Главная страница
    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.46 MB
Время: 0.008 c
14-92656
Сергей Ежиков
2002-10-05 19:13
2002.10.28
В чем сделать такую картинку?


14-92730
Anatoly Podgoretsky
2002-10-09 08:45
2002.10.28
Именинники 9 октября


3-92346
PavelOKES
2002-10-07 09:42
2002.10.28
Ошибка с PReport


3-92321
big_bugzy
2002-10-04 16:13
2002.10.28
insufficient key column information


1-92592
jen_bond
2002-10-17 08:52
2002.10.28
MainMenu 2000/Xp





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