Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.14;
Скачать: CL | DM;

Вниз

Работа с компонентом 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
8-1134720539
Вечный студент
2005-12-16 11:08
2006.05.14
Вопрос глупый, но доставший...


15-1145346910
Layner
2006-04-18 11:55
2006.05.14
Если из комп. ActiveX на веб странице реализовать POST посылку


3-1143117757
MakNik
2006-03-23 15:42
2006.05.14
Оптимизация ПК для работы MSSQL


15-1145537828
fast2
2006-04-20 16:57
2006.05.14
Где взять маленькие рисунки всяких стрелочек, галочек и т.д.


15-1145429535
makar
2006-04-19 10:52
2006.05.14
Книги по Delphi 7