Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с АПИшным таймером, как отловить WM_TIMER... 
:(
    Опции темы
S.A.P.
Дата 17.8.2004, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 2
Всего: 71



NULL - это не ноль !!!. Не знаю, как в Дельфи, в С++ NULL принято считать пустым указателем, использующимся в API, в том случае, если он игнорируется при вызове функции. Чему он равняется я не знаю, но подозреваю, что NULL в С++ эквивалентен nil в Дельфи.
PM MAIL   Вверх
Girder
Дата 17.8.2004, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата
NULL - это не ноль !!!. Не знаю, как в Дельфи, в С++ NULL принято считать пустым указателем, использующимся в API, в том случае, если он игнорируется при вызове функции. Чему он равняется я не знаю, но подозреваю, что NULL в С++ эквивалентен nil в Дельфи
Null(c++)=nil(delphi)=0(в реальности).

Это сообщение отредактировал(а) Girder - 17.8.2004, 12:51


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
decoder
Дата 17.8.2004, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



Ну-ну, Гирдер, напиши чё-нить типа GetDC(nil).
HWND - LongWord, а nil - Pointer!!!
А NULL, ИМХО, - это универсальная функция, которая выдаёт nil или 0 или ещё чё-нить...
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
S.A.P.
Дата 17.8.2004, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 2
Всего: 71



Точно, вспомнил NULL - это что-то вроде макроса, меняющего свое значение в зависимости от типа:
-для численного типа, такого как Integer - 0
-для строки - это ""
-для указателя - это (возможно) указатель на область памяти, зарегистрированной системой, другими словами указатель в никуда.

А HWND - это самостоятельный тип, размером с двойное слово, грубо говоря LongWord, но NULL при нем, скорее всего определяется не нулем, как было бы в LondWord, а каким - нибудь зарегистрированным дескриптором.
Можно конечно взять SoftIce и расковырять заранее подготовленную для этого программу на VC++, и узнать реалоное значение NULL HWND smile.gif .
Однако стоит попытаться найти эквивалент NULL в дельфи для оконного дескриптора, возможно, что то-же самый nil им и является. wink.gif
PM MAIL   Вверх
decoder
Дата 17.8.2004, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



mad.gif mad.gif mad.gif mad.gif mad.gif
эквивалент
НОЛЬ!!!
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
<Spawn>
Дата 17.8.2004, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата(decoder @ 17.8.2004, 06:33)
Ну-ну, Гирдер, напиши чё-нить типа GetDC(nil).
HWND - LongWord, а nil - Pointer!!!
А NULL, ИМХО, - это универсальная функция, которая выдаёт nil или 0 или ещё чё-нить...

В реальности это 0. nil = Pointer(0)
Добавлено @ 22:39
Вот проверь как нить на досуге:

Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Pointer(0) = nil then
   ShowMessage('Equal')
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
p0s0l
Дата 17.8.2004, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Если уж говорить об универсальности, то лучше передавать 0 - в случае Pointer-параметра, 0 автоматом превращается в nil... А NULL <> nil - в качестве pointer'а не передашь...


--------------------
С уважением, г-н Посол.
PM   Вверх
Girder
Дата 18.8.2004, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Что есть Null(C++)?
Цитата
MSDN: NULL is the null-pointer value used with many pointer operations and functions

И вообще Perchilla и decoder вы хоть английский знаете? Переведите просто енто слово на русский.
Цитата
Null(c++)=nil(delphi)=0(в реальности)
В реальности - имелось в виду: "Если абстрагироваться от языка высокого уровня".


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
decoder
Дата 19.8.2004, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



2Girder
Null(c++)=Null(Delphi)!
2All
Звыняйте, я вам какой-то странный код ДЛЛ-ки дал... Timring таймеров тама совсем не обнуляется... Я исправил так, как компилировал... Там Timring таймеров обнулялся сразу при вызове функции Timring... Я ж не знал, что стока сообщений сразу генерируется (попробовал в экзэшнике хук оформить)!!! Т.е. Timring таймеров тока труился, и сразу же фолсился... Кстати, попробовал воспользоваться советом хантера (сообщения в файл) - лучше бы не пробовал adv/wow.gif ... Терь всё работает нанмально - мои догадки (0,0...,нил - ВМ_ТАЙМЕР в сис очередь сообщений) оказались верны!!!!!!!!
Отбой!

Это сообщение отредактировал(а) decoder - 19.8.2004, 20:12
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Girder
Дата 20.8.2004, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



decoder погоди с отбоем. Возмем для примера функцию: GetDriveType - почитай внимательно её описание.

Рассмотрим простейший пример её использования.
1)Брось на пустую форму Memo и Button.
2)Пусть скомпилированная прога находится на DRIVE_FIXED smile.gif (DRIVE_FIXED=3);
3)Объявим функцию следующим образом:
Код
 function GetDriveTypeA(lpRootPathName: Cardinal): UINT; stdcall;
 function GetDriveTypeA; external kernel32 name 'GetDriveTypeA';

4)И на последок, не забудем:
Цитата
If this parameter is NULL, the function uses the root of the current directory


Сам модуль:
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 function GetDriveTypeA(lpRootPathName: Cardinal): UINT; stdcall;
 function GetDriveTypeA; external kernel32 name 'GetDriveTypeA';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
Memo1.Clear;
s:='';
Memo1.Lines.Add(IntToStr(getdrivetypeA(Cardinal(PChar(s)))));
s:=ExtractFileDrive(ParamStr(0));
Memo1.Lines.Add(IntToStr(getdrivetypeA(Cardinal(PChar(s)))));
Memo1.Lines.Add(IntToStr(getdrivetypeA(Cardinal(PChar(nil)))));
Memo1.Lines.Add(IntToStr(getdrivetypeA(Cardinal(nil))));
Memo1.Lines.Add(IntToStr(getdrivetypeA(0)));
// NullAsStringValue:=null;
// try
//   Memo1.Lines.Add(IntToStr(getdrivetypeA(Cardinal(PChar(NullAsStringValue)))));
// except
//  Memo1.Lines.Add('Обломс');
// end;
// try
// Memo1.Lines.Add(IntToStr(getdrivetypeA(null)));
// except
//  Memo1.Lines.Add('Обломс');
// end;
end;

end.


Проверил результат? а теперь убери '//' и снова проверь.

Если я не путаю, то Null в Delphi указывает на неизвестные или отсутствующие данные.

Удачи.



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1101 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.