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

Вниз

Работа с компонентом AsyncProfessional   Найти похожие ветки 

 
Kolan ©   (2006-04-06 14:09) [0]

Здравствуйте,
 Использую компонент для работы с портом из этого пакета. Никак не могу открыть порт... Не занете как это сделать?
Там есть ф-ция Open, но она возврашает False, а при попытке записать что-то получаю исключение - устройство не открыто...


 
Сергей М. ©   (2006-04-06 14:16) [1]


> она возврашает False

Что говорит GetLastError() при этом ?


 
Kolan ©   (2006-04-06 14:19) [2]

1447
Чтобы в строку преобразовать кажется FormatMessage нужно использовать?


 
Сергей М. ©   (2006-04-06 14:21) [3]

SysErrorMessage(GetLasterror)


 
Сергей М. ©   (2006-04-06 14:22) [4]

Если не поможет, привети сюда текст тела метода Open()


 
Kolan ©   (2006-04-06 14:29) [5]

1447 - Окно не имеет полос прокрутки..... И что...
Ненавижу эти компоненты, еслибы не RS485...


 
Сергей М. ©   (2006-04-06 14:34) [6]

Значит, CreateFile() - не последний API-вызов в теле Open() ..

Приводи его код ...


 
Kolan ©   (2006-04-06 14:47) [7]

Легко сказать.
Open - это св-во.
procedure TApdCustomComPort.SetOpen(const Enable : Boolean);
   {-Open/close the port}
 begin
   if FOpen <> Enable then begin
     if not (csDesigning in ComponentState) and
        not (csLoading in ComponentState) then begin
       if Enable then begin
         if (PortState = psClosed) then                            
           InitPort
         else
           OpenPending := True;
       end else begin
         DonePort;
       end;
     end else begin
       FOpen := Enable;
       if Enable then
         ForceOpen := True;
     end;
   end;
 end;


Вот тут я думаю все и происходит...


 procedure TApdCustomComPort.InitPort;
   {-Physically open the comport}
 var
   Res : Integer;
   nBaud     : LongInt;
   nParity   : Word;
   nDataBits : TDatabits;
   nStopBits : TStopbits;
   nHWOpts, nSWOpts, nBufferFull, nBufferResume : Cardinal;
   nOnChar, nOffChar : Char;
 begin
   { Validate the comport -- not needed for Tapi }
   if TapiMode <> tmOn then
     ValidateComport;

   { Activate the specified device layer }
   FDispatcher := ActivateDeviceLayer;
   FDispatcher.DeviceName := Format("COM%d", [ComNumber]);
   try
     { Get line parameters that Tapi set }
     if TapiMode = tmOn then begin
       if ValidDispatcher.ComHandle = 0 then
         CheckException(Self, ecNotOpenedByTapi);
       FDispatcher.GetLine(nBaud, nParity, nDataBits, nStopBits);
       FDispatcher.GetFlowOptions(nHWOpts, nSWOpts, nBufferFull,
         nBufferResume, nOnChar, nOffChar);

       { Sync our properties with those set by Tapi }
       FBaud := nBaud;
       FParity := TParity(nParity);
       FDataBits := Ord(nDataBits);
       FStopBits := Ord(nStopBits);

       FHWFlowOptions := [];
       if (nHWOpts and hfUseDTR) <> 0 then
         Include(FHWFlowOptions, hwfUseDTR);
       if (nHWOpts and hfUseRTS) <> 0 then
         Include(FHWFlowOptions, hwfUseRTS);
       if (nHWOpts and hfRequireDSR) <> 0 then
         Include(FHWFlowOptions, hwfRequireDSR);
       if (nHWOpts and hfRequireCTS) <> 0 then
         Include(FHWFlowOptions, hwfRequireCTS);

       FSWFlowOptions := TSWFlowOptions(nSWOpts);
       FXOnChar := nOnChar;
       FXOffChar := nOffChar;
     end;

     Res := InitializePort;

     {$IFDEF Win32}
     {Remap access denied and file not found errors}
     if Res = ecAccessDenied then
       Res := ecAlreadyOpen
     else if (Res = ecFileNotFound) or (Res = ecPathNotFound) then
       Res := ecBadId;
     {$ENDIF}

     if (Res = ecOk) then begin
       {Handle preset properties}
       PortState := psOpen;
       UpdateHandlerFlag;
       Force := True;
       SetTracing(Tracing);
       SetLogging(Logging);
       SetHWFlowOptions(HWFlowOptions);
       SetSWFlowOptions(SWFlowOptions);
       SetXOnChar(FXonChar);
       SetXOffChar(FXoffChar);
       SetTriggerLength(FTriggerLength);
       SetDTR(FDTR);
       if DeviceLayer <> dlFossil then
         SetRTS(FRTS);
       SetUseMSRShadow(FUseMSRShadow);
       SetUseEventWord(FUseEventWord);
       SetCommNotificationLevel(FCommNotificationLevel);
       SetRS485Mode(FRS485Mode);
       {$IFDEF Win32}
       SetThreadBoost(FThreadBoost);                              
       {$ENDIF}
       Force := False;
       FOpen := True;

       {Prepare for triggers}
       RegisterComPort(True);

       {Add pending triggers}
       if CopyTriggers then begin
         CopyTriggers := False;
         FDispatcher.RestoreTriggers(SaveTriggerBuffer);
       end;

       {Send OnPortEvent}
       PortOpen;
     end else
       CheckException(Self, Res);
   except
     FOpen := False;                                                  
     PortState := psClosed;                                          
     FDispatcher.Free;
     FDispatcher := nil;
     raise;
   end;                                                            
 end;


 
Сергей М. ©   (2006-04-06 14:55) [8]


> Open - это св-во


> Там есть ф-ция Open,


Ты уж опоределись как-нибудь, что есть св-во, а что есть метод ..

Мда ... я предполагал, что там все значительно проще ...
Тут одной цитатой одного метода не обойдешься ..

Справка что по этому поводу говорит ?

Перекомпилить компонент с отладочной инфой и пройтись по Open() пошагово в отладчике - такая мысль не посещала ?


 
Kolan ©   (2006-04-06 15:19) [9]

Перекомпилить компонент с отладочной инфой и пройтись по Open() пошагово в отладчике - такая мысль не посещала ?
Тут проблемма. Может я компонент не так истановил... Он не заходит в этот метод. Хотя исходники есть...

Устанавливал так. Нашел файл - *.dpk Открыл в Delphi, сделал Install


 
Германн ©   (2006-04-06 15:30) [10]


> Устанавливал так. Нашел файл - *.dpk Открыл в Delphi, сделал
> Install

Вообще-то там два пакета: RTL  и DTL.
А бродить по закоулкам их кода - нелёгкое дело. :-(
Попробуй поставить номер порта 0 и брейкпойнт на функцию IsPortAvailable из AdSelCom.


 
Kolan ©   (2006-04-07 12:28) [11]


Вообще-то там два пакета: RTL  и DTL.

Да я знаю. Я поставил DTL



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

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

Наверх





Память: 0.49 MB
Время: 0.023 c
3-1142340418
Erik1
2006-03-14 15:46
2006.05.14
MyDAC &amp; ODAC


2-1146026542
severnij_nur
2006-04-26 08:42
2006.05.14
winexec


2-1146135245
Alex174
2006-04-27 14:54
2006.05.14
Есть ли картинка на экране?


2-1145856478
makar
2006-04-24 09:27
2006.05.14
Вывод данных через Application.MessageBox


15-1145269137
Кулхацкер
2006-04-17 14:18
2006.05.14
Как стать хакером





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