Форум: "Основная";
Текущий архив: 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