Здравствуйте у меня есть вопрос с конвертирование переменной из одного типа в другой.
Я вчера сидел разбирался в mci и для того что бы открыть устройство надо заполнить структуру по названием
MCI_OPEN_PARMS mciOpen;
Я её заполнил потом читаю дальше по книге там написано поставить эту переменную на 4 место в функции
mciSendCommand(0,MCI_OPEN,flags,(DWORD_PTR)&mciOpen);
я её поставил сначала без (DWORD_PTR) после этого компилятор выдаёт, типа туда нужно только тип DWORD_PTR
я поставил ему этот тип, всё стало работать, но так и не понял, почему функция работает если это другой даже не тип переменной, а структура. Объясните пожалуйста почему ???
Спасибо !
Дизайн у форума великолепный
Конвертирование из одного типа в другой
Модераторы: Duncon, Hawk, Romeo, Eugie
Контроль типов в языках програмирования создан для улудьшения возможности выявления ошибок на этапе компиляции
Так если бы у тебя была функция принимающая указатель на структуру типа A, а ты передал бы указатель на В то компилятор нашел бы эту ошибку и указл тебе на нее
Так что если в прототипе функции указано что там должен стоять тип DWORD_PTR (что помоему сделано для совместимости с 64битными процесорами, так что можно ставить DWORD) то там и должен стоять DWORD_PTR но можно поставить и DWORD и int,long....
Твой компилятор умный он считает что эта функция не может принимать указатель на структуру
Так если бы у тебя была функция принимающая указатель на структуру типа A, а ты передал бы указатель на В то компилятор нашел бы эту ошибку и указл тебе на нее
Так что если в прототипе функции указано что там должен стоять тип DWORD_PTR (что помоему сделано для совместимости с 64битными процесорами, так что можно ставить DWORD) то там и должен стоять DWORD_PTR но можно поставить и DWORD и int,long....
Твой компилятор умный он считает что эта функция не может принимать указатель на структуру
Не совсем понятно, как он структуру из предположим 40 байт конвертнёт в 4 байта, не как
не пойму или я вообще неправельно понел ?
А что это вообще за тип DWORD_PTR или __w64 unsigned long что за __w64 ?
не пойму или я вообще неправельно понел ?
А что это вообще за тип DWORD_PTR или __w64 unsigned long что за __w64 ?
Кидается указатель на структуру, который 32-битный, о чем и говорит DWORD PTR
It's a long way to the top if you wanna rock'n'roll
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Происходит конвертация не самой структуры, а указателя на неё (ты ведь используешь оператор &, возвращающий указатель переменной, перед которой он использован)." писал(а):Не совсем понятно, как он структуру из предположим 40 байт конвертнёт в 4 байта, не как
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.