Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Инициализация Direct3D

313
05 августа 2007 года
insane88
440 / / 13.12.2006
Изучаю Direct3D по книге Фленова. Первый же пример не компилируется. То, что я написал можно взять оттуда.
Лог компилятора:
 
Код:
DX93DInit\DX93DInit.cpp(8) : error C2143: syntax error : missing ';' before '*'
DX93DInit\DX93DInit.cpp(8) : error C2501: 'IDirect3D9' : missing storage-class or type specifiers
\DX93DInit\DX93DInit.cpp(8) : error C2501: 'pD3D' : missing storage-class or type specifiers
DX93DInit\DX93DInit.cpp(9) : error C2143: syntax error : missing ';' before '*'
DX93DInit\DX93DInit.cpp(9) : error C2501: 'IDirect3DDevice9' : missing storage-class or type specifiers
DX93DInit\DX93DInit.cpp(9) : error C2501: 'pD3DDevice' : missing storage-class or type specifiers
DX93DInit\DX93DInit.cpp(117) : error C3861: 'DX3DInit': identifier not found, even with argument-dependent lookup
Не могу понять, в чем дело...
Помогите разобраться :)
9
05 августа 2007 года
Lerkin
3.0K / / 25.03.2003
В инклудах напутал малось. Там у тебя есть dxfunc.h и dxfunc.cpp. И DX9 хейдеры подключаются только в dxfunc.h, который нигде не инклудится, кроме как в dxfunc.cpp. :D
313
05 августа 2007 года
insane88
440 / / 13.12.2006
После того, как я немного исправил код(лежит там), компилятор сообщает, что
 
Код:
\dxfunc.cpp(88) : fatal error C1010: unexpected end of file while looking for precompiled header directive

Что это? :o
9
05 августа 2007 года
Lerkin
3.0K / / 25.03.2003
А если #include "dxfunc.h" поместить в DX93DInit.h? ;)
313
05 августа 2007 года
insane88
440 / / 13.12.2006
Такая же беда :D
[COLOR="Silver"]Какой <censored> неожиданный конец файла может быть в dxfunc.cpp? "Медленный" что ли?[/COLOR]
313
06 августа 2007 года
insane88
440 / / 13.12.2006
В общем, разобрался :).

Ошибки:
  1. Ошибка линкера
    Вместо d3d9.lib указал d3d.lib
  2. Опечатки
    dxfunc.h
    Вместо
     
    Код:
    ...
    HRESULT DX3DInit(IDirect3D **ppiD3D9,
                            IDirect3DDevice **ppiD3DDevice9,
    ...

    нужно
     
    Код:
    ...
    HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
                            IDirect3DDevice9 **ppiD3DDevice9,
    ...

    dxfunc.cpp - строка 12
    Закрывающая скобка:
    if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)[COLOR="#ff0000"])[/COLOR] == NULL)
    Кстати, туда неплохо добавить "ошибочный" MessageBox.

    dxfunc.cpp - строка 17
    Zero[COLOR="Red"]m[/COLOR]Memory(&d3dpp, sizeof(d3dpp));

    Похожая опечатка в объявлении функции DX3DInit
     
    Код:
    ...
    HRESULT DX3DInit(IDirect3D[COLOR="Red"]9[/COLOR] **ppiD3D9,
    ...


    dxfunc.cpp - строка 36
    Константу D3DPRESENTATION_INTERVAL_DEFAULT нужно заменить на D3DPRESENT_INTERVAL_DEFAULT
    Немного ниже недописал имя параметра:
     
    Код:
    ...
    d3dpp.BackBuffer[COLOR="Red"]Format[/COLOR]    = d3ddm.Format;
    ...
  3. Настройки IDE
    • Project -> "имя проекта" Properties (Alt+F7) -> Configuration Properties -> C/C++ -> Precompiled Headers-> reate/Use Precompiled Header -> Not Using Precompiled Headers
    • Project -> "имя проекта" Properties (Alt+F7) -> Configuration Properties -> C/C++ -> Language -> Force Conformance in For Loop Scope -> NO (/ZC:ForScope~)

Архив с работающим примером можно взять там.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог