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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Серийные номер HDD (Delphi), Серийные номер HDD 
:(
    Опции темы
DRAGON88
Дата 27.4.2012, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашел код программы, который определяет серийный номер HDD. Код рабочий, только пока никак не могу разобраться
Код


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, 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;

implementation

{$R *.DFM}

const
SMART_GET_VERSION = $074080;
SMART_SEND_DRIVE_COMMAND = $07C084;
SMART_RCV_DRIVE_DATA = $07C088;

// Values of ds_bDriverError
DRVERR_NO_ERROR = 0;
DRVERR_IDE_ERROR = 1;
DRVERR_INVALID_FLAG = 2;
DRVERR_INVALID_COMMAND = 3;
DRVERR_INVALID_BUFFER = 4;
DRVERR_INVALID_DRIVE = 5;
DRVERR_INVALID_IOCTL = 6;
DRVERR_ERROR_NO_MEM = 7;
DRVERR_INVALID_REGISTER = 8;
DRVERR_NOT_SUPPORTED = 9;
DRVERR_NO_IDE_DEVICE = 10;

// Values of ir_bCommandReg
ATAPI_ID_CMD = $A1;
ID_CMD = $EC;
SMART_CMD = $B0;

type
TIdeRegs = packed record
bFeaturesReg,
bSectorCountReg,
bSectorNumberReg,
bCylLowReg,
bCylHighReg,
bDriveHeadReg,
bCommandReg,
bReserved: Byte;
end;

TDriverStatus = packed record
bDriverError: Byte;
bIDEError: Byte;
bReserved: array[1..2] of Byte;
dwReserved: array[1..2] of DWORD;
end;

TSendCmdInParams = packed record
dwBufferSize: DWORD;
irDriveRegs: TIdeRegs;
bDriveNumber: Byte;
bReserved: array[1..3] of Byte;
dwReserved: array[1..4] of DWORD;
bBuffer: Byte;
end;

TSendCmdOutParams = packed record
dwBufferSize: DWORD;
dsDriverStatus: TDriverStatus;
bBuffer: array[1..512] of Byte;
end;

TGetVersionInParams = packed record
bVersion,
bRevision,
bReserved,
bIDEDeviceMap: Byte;
dwCapabilities: DWORD;
dwReserved: array[1..4] of DWORD;
end;


procedure CorrectDevInfo(var _params: TSendCmdOutParams);
asm
lea edi, _params.bBuffer

add edi,14h
mov ecx,0Ah

@@SerNumLoop: mov ax,[edi]
xchg al,ah
stosw
loop @@SerNumLoop


add edi,6
mov cl,18h

@@ModelNumLoop: mov ax,[edi]
xchg al,ah
stosw
loop @@ModelNumLoop
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i: DWORD;
tmp: string;
dev: THandle;
scip: TSendCmdInParams;
scop: TSendCmdOutParams;
gvip: TGetVersionInParams;
ret: DWORD;

begin
dev := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if dev <> INVALID_HANDLE_VALUE then begin
if DeviceIoControl(dev, SMART_GET_VERSION, nil, 0, @gvip, SizeOf(gvip),
ret, nil) then begin
scip.dwBufferSize := 512;
scip.bDriveNumber := 0;
scip.irDriveRegs.bSectorCountReg := 1;
scip.irDriveRegs.bSectorNumberReg := 1;
scip.irDriveRegs.bDriveHeadReg := $A0; // ???
scip.irDriveRegs.bCommandReg := ID_CMD; // ???

if not DeviceIoControl(dev, SMART_RCV_DRIVE_DATA, @scip, SizeOf(scip),
@scop, SizeOf(scop), ret, nil) then
ShowMessage(SysErrorMessage(GetLastError))
else
if scop.dsDriverStatus.bDriverError = DRVERR_NO_ERROR then begin
CorrectDevInfo(scop);
SetLength(tmp, 20);
Move(scop.bBuffer[21], tmp[1], 20);
Memo1.Lines.Add('Serial Number: ' + tmp);

SetLength(tmp, 8);
Move(scop.bBuffer[47], tmp[1], 8);
Memo1.Lines.Add('Firmware Revision: ' + tmp);

SetLength(tmp, 40);
Move(scop.bBuffer[55], tmp[1], 40);
Memo1.Lines.Add('Model: ' + tmp);
end
else
ShowMessageFmt('Error code: %d', [scop.dsDriverStatus.bDriverError])
end
else
ShowMessage(SysErrorMessage(GetLastError));

CloseHandle(dev);
end;

end;
end.


Мне в этом коде непонятно все, например:
Код


SMART_GET_VERSION = $074080;
SMART_SEND_DRIVE_COMMAND = $07C084;
SMART_RCV_DRIVE_DATA = $07C088;

// Values of ds_bDriverError
DRVERR_NO_ERROR = 0;
DRVERR_IDE_ERROR = 1;
DRVERR_INVALID_FLAG = 2;
DRVERR_INVALID_COMMAND = 3;
DRVERR_INVALID_BUFFER = 4;
DRVERR_INVALID_DRIVE = 5;
DRVERR_INVALID_IOCTL = 6;
DRVERR_ERROR_NO_MEM = 7;
DRVERR_INVALID_REGISTER = 8;
DRVERR_NOT_SUPPORTED = 9;


А это, по моему, разве язык Delphi???
Код


asm
lea edi, _params.bBuffer

add edi,14h
mov ecx,0Ah

@@SerNumLoop: mov ax,[edi]
xchg al,ah
stosw
loop @@SerNumLoop


add edi,6
mov cl,18h

@@ModelNumLoop: mov ax,[edi]
xchg al,ah
stosw
loop @@ModelNumLoop


Вообщем, очень хочу, чтобы профессионалы этого форума прокомментировали каждую строчку кода. Если нет, то скажите хотя бы сайт, где я могу получить пояснения, например, что такое:
Код

SMART_GET_VERSION = $074080;
SMART_SEND_DRIVE_COMMAND = $07C084;
SMART_RCV_DRIVE_DATA = $07C088;

// Values of ds_bDriverError
DRVERR_NO_ERROR = 0;
DRVERR_IDE_ERROR = 1;
DRVERR_INVALID_FLAG = 2;
DRVERR_INVALID_COMMAND = 3;
DRVERR_INVALID_BUFFER = 4;
DRVERR_INVALID_DRIVE = 5;
DRVERR_INVALID_IOCTL = 6;
DRVERR_ERROR_NO_MEM = 7;
DRVERR_INVALID_REGISTER = 8;
DRVERR_NOT_SUPPORTED = 9;
DRVERR_NO_IDE_DEVICE = 10;


или

Код

procedure CorrectDevInfo(var _params: TSendCmdOutParams);
asm
lea edi, _params.bBuffer

add edi,14h
mov ecx,0Ah

@@SerNumLoop: mov ax,[edi]
xchg al,ah
stosw
loop @@SerNumLoop


add edi,6
mov cl,18h

@@ModelNumLoop: mov ax,[edi]
xchg al,ah
stosw
loop @@ModelNumLoop
end;



PM MAIL   Вверх
DarkProg
Дата 27.4.2012, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата(DRAGON88 @  27.4.2012,  23:54 Найти цитируемый пост)
А это, по моему, разве язык Delphi???

Нет это кусок кода на ассемблере, там даже соответствующая директива есть(asm)

А чем вам не угодила функция GetVolumeInformation, что вы решили взять такой вариант?


Цитата(DRAGON88 @  27.4.2012,  23:54 Найти цитируемый пост)
SMART_GET_VERSION = $074080;
SMART_SEND_DRIVE_COMMAND = $07C084;
SMART_RCV_DRIVE_DATA = $07C088;
// Values of ds_bDriverError
DRVERR_NO_ERROR = 0;
DRVERR_IDE_ERROR = 1;
DRVERR_INVALID_FLAG = 2;
DRVERR_INVALID_COMMAND = 3;
DRVERR_INVALID_BUFFER = 4;
DRVERR_INVALID_DRIVE = 5;
DRVERR_INVALID_IOCTL = 6;
DRVERR_ERROR_NO_MEM = 7;
DRVERR_INVALID_REGISTER = 8;
DRVERR_NOT_SUPPORTED = 9;
DRVERR_NO_IDE_DEVICE = 10;


Это константы для удобства smile Только обычно их желательно объявлять до объявления классов, или если быть точным до сразу после первого uses.

Что делает код на ассемблере я вам точно не скажу, но IMHO тоже самое что и api-шная функция GetVolumeInformation, только есть вероятность того что ваш код в "каких-нить специфичных случаях" работать не будет.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
northener
Дата 27.4.2012, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(DRAGON88 @  27.4.2012,  22:54 Найти цитируемый пост)
А это, по моему, разве язык Delphi???

Это "встроенный ассемблер" Дельфи. Так что можно сказать что это таки "язык Дельфи".

Цитата(DarkProg @  27.4.2012,  23:23 Найти цитируемый пост)
А чем вам не угодила функция GetVolumeInformation, что вы решили взять такой вариант?

GetVolumeInformation отнюдь не гарантирует выдачу информацию о серийном номере HDD, хотя судя по её описанию она изначально делалась с учетом такой возможности в будущем.

Цитата(DRAGON88 @  27.4.2012,  22:54 Найти цитируемый пост)
Вообщем, очень хочу, чтобы профессионалы этого форума прокомментировали каждую строчку кода.

А зачем вам это нужно? Код найденный вами работает (по вашим же словам). 



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
kami
Дата 28.4.2012, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(northener @  27.4.2012,  23:53 Найти цитируемый пост)
GetVolumeInformation отнюдь не гарантирует выдачу информацию о серийном номере HDD

Вот-вот. Емнип, пытался применить ее для привязки одной из программ к железу. Споткнулся на первом же Raid-е smile Плюнул и забыл про эти глупости smile
Цитата(DRAGON88 @  27.4.2012,  22:54 Найти цитируемый пост)
то скажите хотя бы сайт, где я могу получить пояснения

Google => MSDN (SMART_GET_VERSION control code) Только там даже с поллитрой не разберешься, разве что Riply поможет.
PM MAIL WWW   Вверх
northener
Дата 28.4.2012, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(kami @  28.4.2012,  00:00 Найти цитируемый пост)
разве что Riply поможет

<offtop>
Имхо, она серийными номерами HDD не занималась. А для того чтобы занялась нужен весьма веский повод. smile
</offtop>


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
DRAGON88
Дата 28.4.2012, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(northener @  27.4.2012,  23:53 Найти цитируемый пост)
А зачем вам это нужно? Код найденный вами работает (по вашим же словам). 


Ну понимаете, я только недавно начал изучать Delphi. И таких "высот" как в этом коде я не достиг. Код рабочий, google мне помог его найти. Тестировал на компах с разной ОС, интерфейсом дисков все работает. А почему мне это нужно?? Да просто препод мне дал вот такое задание (как самому лучшему студенту по Delphi), уж очень не хочу попасть в тупик smile . Тем более он мне автоматом обещал экзамен. 

PM MAIL   Вверх
DarkProg
Дата 28.4.2012, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата(kami @  28.4.2012,  01:00 Найти цитируемый пост)
Вот-вот. Емнип, пытался применить ее для привязки одной из программ к железу.

Офтоп, но всё же, есть комопоненты MSIC Suite - отлично привязывает к железу, можно даже к конкретно этому экземпляру ОС привязать ;) И вытаскивают много инфы о железе smile


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
kami
Дата 28.4.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(DarkProg @  28.4.2012,  08:49 Найти цитируемый пост)
есть комопоненты MSIC Suite

Дополнение к оффтопу, но все же  smile Несколько лет назад, имея только GPRS -интернет мне было как-то не до глобальных поисков компонентов, спасал только диск с MSDN  smile Теперь я вообще не привязываюсь к железу, есть и другие методы.

Цитата(DRAGON88 @  28.4.2012,  08:32 Найти цитируемый пост)
И таких "высот" как в этом коде я не достиг. 

Поверьте, многие (и я в том числе) не достигли таких высот.
Но это не мешает нам пользоваться чужим работающим кодом. Необходимость разобраться с внутренностями возникает только тогда, когда скопированный код работает не так, как хочется.
В качестве примера: Вы же не знаете (наверное) внутренностей TForm, однако используете его(ее)?

Это я к тому, что вряд ли Вам будут объяснять "построчно" - Вы с этим кодом хотите "залезть" на такой уровень, который подразумевает отличные навыки самостоятельного поиска и анализа информации, и в первую очередь  - в MSDN.

PM MAIL WWW   Вверх
DarkProg
Дата 28.4.2012, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата(kami @  28.4.2012,  13:04 Найти цитируемый пост)
Теперь я вообще не привязываюсь к железу, есть и другие методы.

Да есть и другие, но это так было к слову.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DRAGON88
Дата 28.4.2012, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Цитата(kami @  28.4.2012,  12:04 Найти цитируемый пост)
Это я к тому, что вряд ли Вам будут объяснять "построчно" - Вы с этим кодом хотите "залезть" на такой уровень, который подразумевает отличные навыки самостоятельного поиска и анализа информации, и в первую очередь  - в MSDN.


Блин. Что-то вообще не доганяю. А причес здесь MSDN??? MSDN - это же подразделение компании Майкрософт, ответственное за взаимодействие фирмы с разработчиками. В данном случае, под разработчиками понимаются разработчики аппаратного обеспечения, интересующиеся операционной системой, а также разработчики, использующие программные интерфейсы операционной системы и скриптовые языки различных приложений, разработанных Microsoft.
A Delphi разработан другой компанией (конрурентом Microsoft). Соответственно, нужно пользоваться справочной пособией по Delphi. Или я что-то не говорю?????

Цитата(kami @  28.4.2012,  00:00 Найти цитируемый пост)
Google => MSDN (SMART_GET_VERSION control code) Только там даже с поллитрой не разберешься, разве что Riply поможет. 


А Riply - это что?????

PM MAIL   Вверх
northener
Дата 28.4.2012, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(DRAGON88 @  28.4.2012,  21:34 Найти цитируемый пост)
А причес здесь MSDN??? MSDN - это же подразделение компании Майкрософт, ответственное за взаимодействие фирмы с разработчиками. В данном случае, под разработчиками понимаются разработчики аппаратного обеспечения, интересующиеся операционной системой, а также разработчики, использующие программные интерфейсы операционной системы и скриптовые языки различных приложений, разработанных Microsoft.
A Delphi разработан другой компанией (конрурентом Microsoft). Соответственно, нужно пользоваться справочной пособией по Delphi. Или я что-то не говорю?????

Именно что-то не то. Странно слышать такое от "лучшего" студента. smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
DRAGON88
Дата 28.4.2012, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(northener @  28.4.2012,  21:52 Найти цитируемый пост)
Именно что-то не то. Странно слышать такое от "лучшего" студента.


Ну если не то, можно хотя бы пояснить. MSDN как он пременим к Delphi (особенно у коду, который я выставил)??? Где я могу найти информацию по:

Код

SMART_GET_VERSION = $074080;
SMART_SEND_DRIVE_COMMAND = $07C084;
SMART_RCV_DRIVE_DATA = $07C088;
// Values of ds_bDriverError
DRVERR_NO_ERROR = 0;
DRVERR_IDE_ERROR = 1;
DRVERR_INVALID_FLAG = 2;
DRVERR_INVALID_COMMAND = 3;
DRVERR_INVALID_BUFFER = 4;
DRVERR_INVALID_DRIVE = 5;
DRVERR_INVALID_IOCTL = 6;
DRVERR_ERROR_NO_MEM = 7;
DRVERR_INVALID_REGISTER = 8;
DRVERR_NOT_SUPPORTED = 9;


Please, а то у меня уже начинает желание все пропадать. Просто руки опускаются. Ну сложно для меня пока-что это на данном этапе. Но желание разбираться огромное. Мне бы только ссылку на сайт (желательно конечно на русском), а там я буду смотреть, анализировать, что такое SMART_GET_VERSION = $074080, DRVERR_IDE_ERROR = 1 и др.

PM MAIL   Вверх
kami
Дата 28.4.2012, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(DRAGON88 @  28.4.2012,  21:34 Найти цитируемый пост)
. В данном случае, под разработчиками понимаются разработчики аппаратного обеспечения, интересующиеся операционной системой, а также разработчики, использующие программные интерфейсы операционной системы и скриптовые языки различных приложений, разработанных Microsoft.

Вот блин. А мужики-то не знают smile
Упрощенно, MSDN можно понимать как глобальный справочник, посвященный всему и вся в Windows и для Windows.

Цитата(DRAGON88 @  28.4.2012,  22:23 Найти цитируемый пост)
Где я могу найти информацию по:

А по ссылке, которую я дал, пройти не судьба? Кроме как там, более актуальной, полной и исчерпывающей информации вряд ли где можно найти.

Добавлено через 1 минуту и 3 секунды
Цитата(DRAGON88 @  28.4.2012,  22:23 Найти цитируемый пост)
Мне бы только ссылку на сайт (желательно конечно на русском)

А вот на это надеяться не надо. Читать такое лучше и правильнее в оригинале.
PM MAIL WWW   Вверх
DRAGON88
Дата 28.4.2012, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



К примеру, что такое StrToInt или IntToStr я понимаю. Если встречается какия-то непонятная функция, я пользуюсь Help по Delphi который у меня есть. А увидев этот код я ничего не могу понять. В своем Help по Delphi я не нашелЮ что значит
Код

MART_GET_VERSION = $074080;
SMART_SEND_DRIVE_COMMAND = $07C084;
SMART_RCV_DRIVE_DATA = $07C088;
// Values of ds_bDriverError
DRVERR_NO_ERROR = 0;
DRVERR_IDE_ERROR = 1;
DRVERR_INVALID_FLAG = 2;
DRVERR_INVALID_COMMAND = 3;
DRVERR_INVALID_BUFFER = 4;
DRVERR_INVALID_DRIVE = 5;
DRVERR_INVALID_IOCTL = 6;
DRVERR_ERROR_NO_MEM = 7;
DRVERR_INVALID_REGISTER = 8;
DRVERR_NOT_SUPPORTED = 9;


Поэтому и создал тему в надежде что мне смогут помощь или подтолкнуть в правильном направлении. Главное - желание разбраться во всем этом, а желание у меня пока что есть.
PM MAIL   Вверх
DarkProg
Дата 28.4.2012, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата(DRAGON88 @  28.4.2012,  23:23 Найти цитируемый пост)
DRVERR_NO_ERROR = 0;
IDE_ERROR = 1;
INVALID_FLAG = 2;
INVALID_COMMAND = 3;
INVALID_BUFFER = 4;
INVALID_DRIVE = 5;
INVALID_IOCTL = 6;
ERROR_NO_MEM = 7;
INVALID_REGISTER = 8;
NOT_SUPPORTED = 9;


Вопрос, что изменилось? Ответ, да ничего, кроме названия "обёртки". Это просто коды коотрые возвращает функция написанная на асме и с ними производится сравнение, можно писать что-нить типа такого

Код

if ReturnValue=1 then
  ShowMessage('О у нас тут проблема 1');
if ReturnValue=2 then
   ShowMessage('О, а теперь проблема 2')


А можно вот так
Код

if ReturnValue=IDE_ERROR  then
  ShowMessage('О у нас тут проблема 1');
if ReturnValue=INVALID_FLAG  then
   ShowMessage('О, а теперь проблема 2')


Читабельность второго будет выше, да и универсальность больше, т.к. при применении в другом месте этих же констант можно не заморачиваться по поводу их замены, если они вдруг изменятся.

Причём тут MSDN, ну как при чём... а где WinApi функции описываются, а где мелкомягкие пишут про свои всякие штуки вроде SQL Server, .Net и т.д. и т.п.?


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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