Страница 1 из 1

Конвертирование из одного типа в другой

Добавлено: 16 фев 2008, 16:36
Gramer
Здравствуйте у меня есть вопрос с конвертирование переменной из одного типа в другой.
Я вчера сидел разбирался в mci и для того что бы открыть устройство надо заполнить структуру по названием

MCI_OPEN_PARMS mciOpen;
Я её заполнил потом читаю дальше по книге там написано поставить эту переменную на 4 место в функции

mciSendCommand(0,MCI_OPEN,flags,(DWORD_PTR)&mciOpen);

я её поставил сначала без (DWORD_PTR) после этого компилятор выдаёт, типа туда нужно только тип DWORD_PTR
я поставил ему этот тип, всё стало работать, но так и не понял, почему функция работает если это другой даже не тип переменной, а структура. Объясните пожалуйста почему ???
Спасибо !

Дизайн у форума великолепный

Re: Конвертирование из одного типа в другой

Добавлено: 16 фев 2008, 21:54
ssDev
Контроль типов в языках програмирования создан для улудьшения возможности выявления ошибок на этапе компиляции
Так если бы у тебя была функция принимающая указатель на структуру типа A, а ты передал бы указатель на В то компилятор нашел бы эту ошибку и указл тебе на нее
Так что если в прототипе функции указано что там должен стоять тип DWORD_PTR (что помоему сделано для совместимости с 64битными процесорами, так что можно ставить DWORD) то там и должен стоять DWORD_PTR но можно поставить и DWORD и int,long....
Твой компилятор умный он считает что эта функция не может принимать указатель на структуру

Re: Конвертирование из одного типа в другой

Добавлено: 17 фев 2008, 21:38
Gramer
Не совсем понятно, как он структуру из предположим 40 байт конвертнёт в 4 байта, не как

не пойму или я вообще неправельно понел ?
А что это вообще за тип DWORD_PTR или __w64 unsigned long что за __w64 ?

Re: Конвертирование из одного типа в другой

Добавлено: 18 фев 2008, 09:22
somewhere
Кидается указатель на структуру, который 32-битный, о чем и говорит DWORD PTR

Re: Конвертирование из одного типа в другой

Добавлено: 18 фев 2008, 10:38
Romeo
&quot писал(а):Не совсем понятно, как он структуру из предположим 40 байт конвертнёт в 4 байта, не как
Происходит конвертация не самой структуры, а указателя на неё (ты ведь используешь оператор &, возвращающий указатель переменной, перед которой он использован).