[prg] Re[3]: C++. Определение размера диска
Приветствую всех.
> Но из-за языкового барьера многого не
> понял.
Минимум, что вам нужно было понять, это объявление функции, написанное на языке
программирования C или C++. Непонимание именно этого языка является причиной
ошибок, а не английского.
Вторая причина -- это враждебное отношение к используемому компилятору. Это характерно
для начинающих программистов -- они всегда ведут борьбу с используемым компилятором,
считая его основным препятствием для проявления своих программерских талантов.
Вы собственными руками заткнули рот своему компилятору, применив ручное приведение
типов к аргументам функции GetDiskFreeSpaceEx().
Очевидно, что без такого приведения компилятор сообщал об ошибке из-за несоответствие
типов аргументов и используемых переменных.
Вместо того, чтобы задуматься над тем, почему компилятор выдает сообщение об
ошибке и разобраться с типом ULARGE_INTEGER, вы сказали компилятору "заткнись,
я лучше знаю, что надо" и в результате получили неработающее приложение.
Не меньшая проблема и с ручным приведением типов при выводе результатов в файл:
оператор << является перегруженным, т.е. конкретная его реализация зависит от
типа аргумента, а вы совершенно произвольным образом меняете этот тип, не задумываясь
о последствиях. Кстати, в вашем случае это совершенно бесполезно, так как DWORD
и unsign long это одно и то же:
http://msdn.microsoft.com/en-us/library/cc230318.aspx
This type is declared as follows:
typedef unsigned long DWORD, *PDWORD, *LPDWORD;
И не надо ничего искать: в VisualStudio можно поместить курсор на нужный тип
или имя функции, открыть контекстное меню и выбрать пункт "Перейти к объявлению"
(или что-то в этом роде). После чего вам останется лишь внимательно прочитать
те строки заголовочного файла, в которых объявлен интересующий вас тип или функция.
И так дальше, пока вы не выясните для себя смысл всех проблемных элементов кода.
Анатолий.