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

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Gramer
Сообщения: 2
Зарегистрирован: 16 фев 2008, 16:21

Здравствуйте у меня есть вопрос с конвертирование переменной из одного типа в другой.
Я вчера сидел разбирался в mci и для того что бы открыть устройство надо заполнить структуру по названием

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

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

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

Дизайн у форума великолепный
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

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

Не совсем понятно, как он структуру из предположим 40 байт конвертнёт в 4 байта, не как

не пойму или я вообще неправельно понел ?
А что это вообще за тип DWORD_PTR или __w64 unsigned long что за __w64 ?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Кидается указатель на структуру, который 32-битный, о чем и говорит DWORD PTR
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Не совсем понятно, как он структуру из предположим 40 байт конвертнёт в 4 байта, не как
Происходит конвертация не самой структуры, а указателя на неё (ты ведь используешь оператор &, возвращающий указатель переменной, перед которой он использован).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить