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

Вниз

Почему код не работает на Win98, но чудесно работает в XP(RS232)   Найти похожие ветки 

 
Stasmor ©   (2006-11-15 12:38) [0]

Здравствуйте!
Можете мне помочь с кодом!
Это очень важно!
Данный код отлично работает с WinXP но никак не хочет работать с Win98...
Если есть глобальные ошибки в коде, помогите исправить...
Собственно сам код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, XPMan;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
 
   Edit1: TEdit;
   XPManifest1: TXPManifest;
   Button5: TButton;
   Button1: TButton;
   Button6: TButton;
   Label1: TLabel;
   Label2: TLabel;
   Button2: TButton;
   Button3: TButton;


   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);
   procedure Button5Click(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button3Click(Sender: TObject);
   

     private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 ComFile: THandle;
 W,V,Rad,R:integer;
 nulling:boolean;
implementation
uses unit2;
{$R *.dfm}

function OpenCOMPort: Boolean;
var
  DeviceName: array[0..80] of Char;
begin
   { First step is to open the communications device for read/write.
    This is achieved using the Win32 "CreateFile" function.
    If it fails, the function returns false.

    Wir versuchen, COM1 zu offnen.
    Sollte dies fehlschlagen, gibt die Funktion false zuruck.
  }
  StrPCopy(DeviceName, "COM1:");

  ComFile := CreateFile(DeviceName,
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);

  if ComFile = INVALID_HANDLE_VALUE then
    Result := False
  else
    Result := True;
end;

function SetupCOMPort: Boolean;
const
  RxBufferSize = 256;
  TxBufferSize = 256;
var
  DCB: TDCB;
  Config: string;
  CommTimeouts: TCommTimeouts;
begin
  Result := True;
  Config:="baud=9600 parity=n data=8 stop=1";

  if not BuildCommDCB(@Config[1], DCB) then
    Result := False;

  if not SetCommState(ComFile, DCB) then
    Result := False;

  with CommTimeouts do
  begin
    ReadIntervalTimeout         := 3;
    ReadTotalTimeoutMultiplier  := 3;
    ReadTotalTimeoutConstant    := 3;
    WriteTotalTimeoutMultiplier := 3;
    WriteTotalTimeoutConstant   := 3;
  end;

  if not SetCommTimeouts(ComFile, CommTimeouts) then
    Result := False;
end;

{
 The following is an example of using the "WriteFile" function
 to write data to the serial port.

 Folgendes Beispiel verwendet die "WriteFile" Funktion, um Daten
 auf den seriellen Port zu schreiben.
}

procedure SendText(s: string);
var
  BytesWritten: DWORD;
begin
   {
    Add a word-wrap (#13 + #10) to the string

    An den ubergebenen String einen Zeilenumbruch (#13 + #10) hangen
  }
  s := s ;
  WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
end;

{
 The following is an example of using the "ReadFile" function to read
 data from the serial port.
 
 Folgendes Beispiel verwendet die "ReadFile" Funktion, um Daten
 vom seriellen Port zu lesen.
}

function ReadText: string;
var
  d: array[1..80] of Char;
  s: string;
  BytesRead, i: Integer;
begin
  Result := "";
  if not ReadFile(ComFile, d, SizeOf(d), cardinal(BytesRead), nil) then
  begin
    { Raise an exception }
  end;
  s := "";
  for i := 1 to BytesRead do s := s + d[I];
  Result := s;
end;

procedure CloseCOMPort;
begin
  // finally close the COM Port!
 // nicht vergessen den COM Port wieder zu schliessen!
 CloseHandle(ComFile);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendText("V");

procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Text:="Открытие COM1..."+#13#10;
if OpenCOMPort then
begin
 SetupCOMPort;
memo1.Text:=memo1.text+"Порт открыт и готов к работе..."+#13#10;
end
else
begin
memo1.Clear;
memo1.Text:="Error to open COM1..."+#13#10;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseCOMPort;
end;

end.

не смотрите пожалуйсто на лишние куски кода ...=)
Заранее спасибо!!!


 
Array ©   (2006-11-15 12:42) [1]


> Данный код отлично работает с WinXP но никак не хочет работать
> с Win98...
а конкретнее


> не смотрите пожалуйсто на лишние куски кода ...=)
а куда собсвенно сматреть , милейший


> Заранее спасибо!!
да пока незашо впринципе )))


 
clickmaker ©   (2006-11-15 12:43) [2]


> Stasmor ©   (15.11.06 12:38)

что, прямо так и говорит: "Не хочу я твую 98-ю, ХР давай"?
SysErrorMessage(GetLastError) оченно помогает в таких случаях, лучше утюга и пассатиж


 
Германн ©   (2006-11-15 13:32) [3]


> Данный код отлично работает с WinXP но никак не хочет работать
> с Win98...

Опять нам лапшу вешают. Хорошо ещё, если окажется в результате, что виноваты 64К в мемо :-)


 
Anatoly Podgoretsky ©   (2006-11-15 13:53) [4]

> Stasmor  (15.11.2006 12:38:00)  [0]

> не смотрите пожалуйсто на лишние куски кода ...=)

Значит ты знаешь какие лишнии куски, так почему же не убрал, а вывалил весь мусор не форум.


 
Anatoly Podgoretsky ©   (2006-11-15 13:54) [5]

> Германн  (15.11.2006 13:32:03)  [3]

64К, щедрый ты.


 
Vlad Oshin ©   (2006-11-15 14:58) [6]


> Anatoly Podgoretsky ©   (15.11.06 13:54) [5]

32?


 
Anatoly Podgoretsky ©   (2006-11-15 21:33) [7]

> Vlad Oshin  (15.11.2006 14:58:06)  [6]

Реально 32-38 кб, зависит от многих факторов. Просто 64 это логический предел, но из этих 64 кое что и система использует.. Можно даже несколько раз запускать, результаты будут колебаться.
Проще считать 32 кб. Это ограничение пошло от win 16


 
Германн ©   (2006-11-16 02:18) [8]


> Anatoly Podgoretsky ©   (15.11.06 13:54) [5]
>
> > Германн  (15.11.2006 13:32:03)  [3]
>
> 64К, щедрый ты.
>

Я не "щедрый"! Я "справедливый" :-)
Memo.Text:=Memo.Text+ "a";  даст почти 64К. :-)


 
Германн ©   (2006-11-16 02:29) [9]

Но вот тут вот что ещё интересно. Данное ограничение в Win9x влияет на работу программы, только если даноое мемо "видимо".


 
stasmor ©   (2006-11-19 23:39) [10]

Спасибо всем кто откликнулся...


> что, прямо так и говорит: "Не хочу я твую 98-ю, ХР давай"?
>
> SysErrorMessage(GetLastError) оченно помогает в таких случаях,
>  лучше утюга и пассатиж

Воспользуюсь вашим советом и гляну...
как я понимаю SysErrorMessage(GetLastError)  нужно вставить после попытки посылки или приема инфы?
Прошу прощения если я туплю...я с Дэлфой только начал работать...


 
Германн ©   (2006-11-20 01:08) [11]


> stasmor ©   (19.11.06 23:39) [10]
>
> Спасибо всем кто откликнулся...
>

Для начала лучше пройдись отладчиком по программе. (Т.е. используя "волшебные" клавиши F5, F9, F8, F7).
Кстати. Откуда "содрал" код?


 
Stasmor ©   (2006-11-20 08:39) [12]

На почти весь код содрал с ДэлфиВорлда...
Когдато(курсе на первом) писал сразу в регистры(через АСМ), но с появлением ХРени, АСМ перестал быть актуальным...
А чем мне может помочь Отладчик? код же работает на ХР, значит, ничего нового я не найду...Единственное подозрение у меня вызывает правильная ли установка Тайм-аутов...(хотя все может быть)
Кстати. как правильно юзать SysErrorMessage(GetLastError)?


 
Делфи   (2006-11-20 11:42) [13]


> Кстати. как правильно юзать SysErrorMessage(GetLastError)?

как я понимаю просто писать после глючного кода :)
например
i := i/0;
showmessage(IntToStr(SysErrorMessage(GetLastError)));

ps. надеюсь я прав...



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

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

Наверх





Память: 0.5 MB
Время: 0.895 c
1-1161929527
Shlomo
2006-10-27 10:12
2006.12.10
Точка входа в проц-у ConvertToGlobalHandle не найден в kernel32


2-1164205377
Kolan
2006-11-22 17:22
2006.12.10
Как получить номер выделенной строки DBGrid?


15-1163422460
Игорь Ситиков
2006-11-13 15:54
2006.12.10
Контакты сайта


2-1164115734
gosha73
2006-11-21 16:28
2006.12.10
Ядро - дельфи, плагин - си. Указатель на процедуру.


15-1163817022
Ппп
2006-11-18 05:30
2006.12.10
Посоветуйте программу





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