#c #pointers #directx #directx-9
#c #указатели #directx #directx-9
Вопрос:
H1. Я пытаюсь перенести свои коды в разные файлы .cpp и .h, чтобы упростить их поиск, просмотр и понимание. Вот что я пытаюсь сделать сейчас: я получилMeshes.cpp это мой основной исходный файл .cpp. В функции рендеринга ( Render() ) я должен вызвать функцию с именем SetupMatrices:
Это мой «d3dGeneral.cpp «файл:
// Begining of the "d3dGeneral.cpp"
#include "DXUT.h"
VOID SetupMatrices( LPDIRECT3DDEVICE9 *PDev )
{
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( amp;matProj,
D3DX_PI / 4,
1.777777777777778f,
1.0f,
1000.0f );
PDev->SetTransform( D3DTS_PROJECTION, amp;matProj ); // The problem is here......
}
//Enging of the "d3dGeneral.cpp"
И это мой «Meshes.cpp » файл: (который является основным cpp-файлом)
// Begining of the "Meshes.cpp" file.
#include "DXUT.h"
#include "XMesh.h"
#include "Camera.h"
#include "d3dGeneral.cpp"
...
...
//Usualy SetupMatrices is found here.
...
...
VOID Render()
{
SetupMatrices( amp;g_pd3dDevice );
...
...
...
}
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, int nCmdShow)
{
...
...
...
Render();
...
...
...
}
// End of the "Meshes.cpp" file
Файл заголовка с именем DXUT.h содержит другие общие включения.
Итак, когда я делаю это, я получаю сообщение об ошибке:
Ошибка 2 ошибка C2227: слева от ‘-> setTransform’ должен указывать класс / структура / объединение / универсальный тип c:userscattdesktopdenemed3dgeneral.cpp 74 Сетчатый класс
Я знаю, что это значит, но я не могу найти, как этого избежать. Похоже, у меня проблема с указателями. Также я пытался использовать PDev следующим образом:
*PDev->SetTransform( D3DTS_PROJECTION, amp;matProj ); // ???
Я знаю, что мне не обязательно использовать d3dDevice со ссылкой в этой функции, но у меня также есть функция очистки. Я думаю, мне нужно дать ссылку на это, потому что это должно очистить само реальное устройство, а не его копию 8). Надеюсь, я правильно объяснил себя. Если вы сможете мне помочь, это будет потрясающе. Спасибо, что уделили свое время…
Ответ №1:
Вы пробовали это:
(*PDev)->SetTransform( D3DTS_PROJECTION, amp;matProj );
Ответ №2:
LPDIRECT3D9DEVICE
это уже указатель. Вам не нужен указатель на него. Просто возьмите LPDIRECT3D9DEVICE
по значению.
Конечно, я лично предпочитаю использовать IDirect3D9Device*
, поскольку это понятнее, и, кроме того, мне нравится хранить исходный указатель в интеллектуальном указателе.
Комментарии:
1. Спасибо за ответ. Я попытался использовать его без указателя: тогда он говорит, что произошла ошибка при переписке… Возможно, я что-то сделал… То, что сказал Джем Кальонку, сработало для меня.