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

Вниз

[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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
1-12730
Рома-р
2003-04-23 14:07
2003.05.05
Как создать *.RTF с альбомным расположением листа?


7-12947
tv
2003-03-14 10:43
2003.05.05
Пропала возможность ввода на немецком языке


11-12684
tanddt
2002-07-18 15:54
2003.05.05
ComboBox - помогите начинающему


3-12635
admled
2003-04-15 20:36
2003.05.05
Печать из базы одной записи


14-12931
Ёжик
2003-04-18 11:34
2003.05.05
Учет в Библиотеке