Kornival Дата: Понедельник, 22 Ноября 2010, 19:05 | Сообщение # 1
The Witcher
Сейчас нет на сайте
У меня какая-то странная проблема-в проекте два .cpp файла, один подключает другой директивой inсlude и их компиляция идет нормально, но при сборке выскакивает куча ошибок связанных с линкованием. Самое интересно что если вручную запихнуть содержимое одного файла в другой, то все работает нормально. А если поставить debug режим все работает в любом случае. Если кто-нить знает в чем проблема отпишитесь пожалуйста. Хранит весь код в одном файле не удобно Код обоих файлов под спойлером
dx.cpp
Code
#ifndef DIRECT3D #define DIRECT3D # pragma comment(lib,"d3d9.lib") #include <d3d9.h> #include <windows.h> LPDIRECT3D9 pDirect3D = NULL; LPDIRECT3DDEVICE9 pDirectDevice = NULL; HRESULT DirectInit(HWND hWnd) { D3DDISPLAYMODE Display; D3DPRESENT_PARAMETERS Direct3DParameters; if(FAILED(pDirect3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; if(FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) return E_FAIL; ZeroMemory(&Direct3DParameters,sizeof(Direct3DParameters)); Direct3DParameters.Windowed = true; Direct3DParameters.SwapEffect = D3DSWAPEFFECT_DISCARD; Direct3DParameters.BackBufferFormat = Display.Format; if(FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, &Direct3DParameters,&pDirectDevice))) return E_FAIL; return S_OK; } void RenderingDirectX3D(int R = 0, int G = 0, int B = 0) { pDirectDevice->Clear(0,0,D3DCLEAR_TARGET,D3DCOLOR_XRGB(R,G,B),1.0f,0); pDirectDevice->BeginScene(); pDirectDevice->EndScene(); pDirectDevice->Present(0,0,0,0); } void Release() { if(pDirectDevice != NULL) pDirectDevice->Release(); if(pDirectDevice !=NULL)pDirect3D->Release(); } #endif
Window.cpp
Code
#include "dx.cpp" LRESULT CALLBACK WndProc(HWND,UINT,UINT,LONG); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wnd; MSG msg; HWND hWnd; {//Класс wnd wnd.cbClsExtra = 0; wnd.cbWndExtra = 0; wnd.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); wnd.hCursor = LoadCursor(NULL,IDC_ARROW); wnd.hIcon = LoadIcon(NULL,IDI_APPLICATION); wnd.hInstance = hInstance; wnd.lpfnWndProc = WndProc; wnd.lpszClassName = "Engine"; wnd.lpszMenuName = 0; wnd.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; } if(!RegisterClass(&wnd)) MessageBox(NULL,"Can`t register class wnd(WNDCLASS)","ERROR",MB_OK); hWnd = CreateWindow("Engine","Engine",WS_OVERLAPPEDWINDOW|WS_VISIBLE,200,150,648,480,NULL,NULL,hInstance,NULL); if(S_OK==(DirectInit(hWnd))) { ShowWindow(hWnd,1); UpdateWindow(hWnd); } while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT message,UINT wParam,LONG lParam) { switch(message) { case WM_PAINT: RenderingDirectX3D(255,255,0); ValidateRect(hWnd,0); break; case WM_DESTROY: { Release(); PostQuitMessage(0); return 0; } break; } return (DefWindowProc(hWnd,message,wParam,lParam)); }
ezhickovich Дата: Понедельник, 22 Ноября 2010, 19:24 | Сообщение # 2
[Великий и могучий хозяинъ]
Сейчас нет на сайте
Quote (Kornival )
У меня какая-то странная проблема-в проекте два .cpp файла, один подключает другой директивой inсlude
Это идиотизм... Нормальные люди инклудят хедеры... (в них они объявляют функции, а затем реализуют их в CPP файлах) пример:
Code
// foo.h #ifndef FOO_H #define FOO_H void foo (); #endif /* FOO_H */
Code
// foo.cpp #include "foo.h" #include <cstdio> void foo () { printf ("FOO\n"); }
Code
// main.cpp #include "foo.h" int main () { foo (); return 0; }
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
Kornival Дата: Понедельник, 22 Ноября 2010, 19:41 | Сообщение # 3
The Witcher
Сейчас нет на сайте
Quote (ezhickovich )
Это идиотизм...
Ах вот оно что Quote (ezhickovich )
Нормальные люди инклудят хедеры...
Я знаю, просто не подумал что из-за этого могут быть ошибки Спасибо тебе.Добавлено (22.11.2010, 19:41) --------------------------------------------- P.S. что означает слово CALL в следующей строке
Code
virtual void CALL System_Shutdown();
ezhickovich Дата: Понедельник, 22 Ноября 2010, 19:55 | Сообщение # 4
[Великий и могучий хозяинъ]
Сейчас нет на сайте
Quote (Kornival )
virtual void CALL System_Shutdown();
Я не телепат... Скорее всего это скорее всего это макрос... (если ты под студией, то должны подсвечиваться определения макросов... P.S. я не под студией...)Добавлено (22.11.2010, 19:55) --------------------------------------------- Ну по крайней мере в 2010 студии так... Хотя в любом случае можно перейти к определению...
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
Kornival Дата: Понедельник, 22 Ноября 2010, 19:57 | Сообщение # 5
The Witcher
Сейчас нет на сайте
Quote (ezhickovich )
Скорее всего это скорее всего это макрос... (если ты под студией, то должны подсвечиваться определения макросов... P.S. я не под студией...)
Я под code::blocks, а это не макрос а а метод класса. Знаешь что значит CALL?
ezhickovich Дата: Понедельник, 22 Ноября 2010, 20:30 | Сообщение # 6
[Великий и могучий хозяинъ]
Сейчас нет на сайте
CALL - макрос
Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
Kornival Дата: Понедельник, 22 Ноября 2010, 20:47 | Сообщение # 7
The Witcher
Сейчас нет на сайте
Quote (ezhickovich )
CALL - макрос
Точно, нашел Code
#define CALL __stdcall