Форум: "Основная";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
Вниз[Error] на значении Nil Найти похожие ветки
← →
DDF (2003-04-22 10:40) [0]Народ, подскажите пожалуйста. Не могу понять почему при компиляции выскакивыет ошибка на Nil:
...
ReadFile(hPort, pDat^, Available, Readed, nil);
...
Ругается:
Types of actual and formal var parameters must be identical
← →
MBo (2003-04-22 10:47) [1]скорее не на nil, а на пред. параметры - должны быть Dword (Cardinal)
← →
Skier (2003-04-22 10:48) [2]Видимо последний параметр в ReadFile имеет модификатор var
var
A : TSomeType;
begin
//..............
A := nil;
ReadFile(hPort, pDat^, Available, Readed, A);
//..............
← →
D (2003-04-22 10:48) [3]А другие пар-ры каких типов?
Точно ли pDat^ или просто pDat ?
← →
evvcom (2003-04-22 10:49) [4]Потому что фактически на var параметр передается адрес переменной. Но подставлять туда надо все же переменную, компилятор сам сделает операции адресации и разадресации. А nil - это не переменная, это константа, подразумевающая "нет адреса" или "адрес = 0"
← →
Sheriff (2003-04-22 10:53) [5]тип Available - DWORD
← →
DDF (2003-04-22 10:58) [6]Я скачал три компоненты для работы с COM портом но не одна не устанавливается, везде выскакивает именно эта ошибка. Возможно дело в настройках Delphi? У меня Delphi7 сейчас попробую на шестой.
← →
Skier (2003-04-22 11:00) [7]
> Возможно дело в настройках Delphi?
?!
Жутко интересно в каких...
← →
Anatoly Podgoretsky (2003-04-22 11:01) [8]Skier © (22.04.03 10:48)
Не является, но при такой постановке вопроса можно только заниматься гаданием на кофейной гуще, что и как у него объявлено, я даже не удивлюсь, если у него окажется еще какой нибудь модуль с такой же функцией. Ну жу объявления мог бы привести.
← →
Skier (2003-04-22 11:03) [9]>Anatoly Podgoretsky
> но при такой постановке вопроса можно только заниматься
> гаданием на кофейной гуще,
Я им и занимался...
← →
DDF (2003-04-22 11:04) [10]Нет в 6 тоже не пашет
Вот одна из процедур на которой выскакивает ошибка
function TCommPortDriver.SendDataEx( DataPtr: pchar; DataSize, Timeout: UINT ): UINT;
var nToSend, nSent: integer;
t1: longint;
begin
{ Do nothing if port has not been opened }
Result := 0;
if not Connected then
exit;
{ Current time }
t1 := GetTickCount;
{ Loop until all data sent or timeout occurred }
while DataSize > 0 do
begin
{ Get TX buffer free space }
nToSend := OutFreeSpace;
{ If output buffer has some free space... }
if nToSend > 0 then
begin
{ Check signals }
if FCkLineStatus and (GetLineStatus = []) then
exit;
{ Don"t send more bytes than we actually have to send }
if nToSend > DataSize then
nToSend := DataSize;
{ Send }
WriteFile( FComPortHandle, DataPtr^, nToSend, nSent, nil );
nSent := abs( nSent );
if nSent > 0 then
begin
{ Update number of bytes sent }
Result := Result + nSent;
{ Decrease the count of bytes to send }
DataSize := DataSize - nSent;
{ Inc. data pointer }
DataPtr := DataPtr + nSent;
{ Get current time }
t1 := GetTickCount;
{ Continue. This skips the time check below (don"t stop
trasmitting if the Timeout is set too low) }
continue;
end;
end;
{ Buffer is full. If we are waiting too long then exit }
if (GetTickCount-t1) > Timeout then
exit;
end;
end;
Может в Uses прописать что надо
там сейчас Windows, Messages, SysUtils, Classes, Forms;
← →
Skier (2003-04-22 11:07) [11]>DDF
Да,... Вы, батенька, никак издеваетесь ?!
> Вот одна из процедур на которой выскакивает ошибка
КАКАЯ ОШИБКА ???
В противном случае - Вам к экстрасенсу !
← →
Anatoly Podgoretsky (2003-04-22 11:14) [12]nToSend, nSent не того типа, то есть акуальные и формальные параметры не соответствуют, вероятно и с ReadFile у тебя подобное творится, зря ты ушел от ответа в другую сторону.
Кусок кода явно откуда то бездумно скопирован.
← →
DDF (2003-04-22 11:15) [13]Та которую описал раньше на WriteFile (Windows.pas)
← →
evvcom (2003-04-22 11:16) [14]А может еще и на предыдущих версиях Дельфи попробовать? А потом попробовать на Билдере, а вдруг там пройдет? :)))
Во-первых, что есть WriteFile (ReadFile), его описание (прототип), в каком модуле описан? Наведи мышь на это слово, выскочит хинт, из которого будет ясно, в каком модуле Дельфи его нашел. Если хинт не выскочит, значит Дельфи его не знает, настрой пути проекта (или глобальные) на поиск модулей.
Включи нужный модуль в uses. Если такая функция есть также в другом модуле, и существует неоднозначность, то конкретизируй вызов MyUnit.WriteFile
← →
Skier (2003-04-22 11:17) [15]>DDF
"В огороде бузина, а в Киеве дядька"
← →
Anatoly Podgoretsky (2003-04-22 11:18) [16]evvcom © (22.04.03 11:16)
Пройдет на Д3, я говорю он бездумно скопировал
← →
DDF (2003-04-22 11:24) [17]Спасибо ВСЕМ. Код я не копировал а скачал три разные компоненты с разных мест и на всех трех эта ошибка вот и был уверен что в коде ощибки нет. Оказалось как говорил MBo и Sheriff вместо Integer должно быть Dword.
← →
Lord Warlock (2003-04-22 11:30) [18]
> DDF (22.04.03 11:24)
Когда используешь апишные функции, при указании параметров почаще жми Ctrl+Shift+Space, и смотри, параметры какого типа требуются. Тогда не будет таких вопросов.
← →
Anatoly Podgoretsky (2003-04-22 11:37) [19]DDF (22.04.03 11:24)
В Д3 тоже dWord, но там это будет работать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c