Základní aplikace WinAPI pro DX v MS Visual Studiu 2010 – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Základní aplikace WinAPI pro DX v MS Visual Studiu 2010 – .NET – Fórum – Programujte.comZákladní aplikace WinAPI pro DX v MS Visual Studiu 2010 – .NET – Fórum – Programujte.com

 

Scrash0
Newbie
24. 6. 2011   #1
-
0
-

Dobrý den, potřeboval bych nějaké rady, ohledně nastavení základního projektu ve Visual Studiu 2010,
Koupil jsem si knížku DirectX začínáme programovat od Pavla Pokorného, došel jsem ke 2 kapitole
o základním nastavení aplikace, ze které pak mají vycházet všechny ostatní programy. Knížka je cca. 2
roky stará a autor zde ještě pracuje ve vývojovém prostředí Visual C++ 6.0.

Ve Visual Studiu 2010 Proffesional:
Klasicky jsem si vytvořil nový projekt FILE -> NEW -> PROJECT a zde jsem vybral položku Win32 Project (Visual C++)
Aplication type jsem nastavil na Windows Aplication a zaškrtl empty file.

Tudíž se mi vytvořil nový projekt.
V properties projektu u VC++ jsem nastavil cesty k nejnovější stažené knihovně SDK (Library a Include).
Potom jsem v nastavení LINKER -> COMMAND LINE přilinkoval dxguid.lib a ddraw.lib(zatím nepotřebné)
a v LINKER -> GENERAL zapnul Enable Incremental Linking

Potom jsem jen opsal zdrojové kódy z knihy a pokusil se zkompilovat celý projekt (CTRL + F7).

Kompilátoru se ale zdrojový kód nelíbí a křičí na mě tyto hlášky:



1>------ Build started: Project: DirectX, Configuration: Debug Win32 ------
1>Build started 24.6.2011 17:54:11.
1>ClCompile:
1> Winmain.cpp
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\capplication.h(6):
error C2236: unexpected 'class' 'CApplication'. Did you forget a ';'?
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\capplication.h(6):
error C2143: syntax error : missing ';' before '{'
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\capplication.h(6):
error C2447: '{' : missing function header (old-style formal list?)
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\winmain.cpp(8):
error C2065: 'CApplication' : undeclared identifier
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\winmain.cpp(8):
error C2146: syntax error : missing ';' before identifier 'App'
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\winmain.cpp(8):
error C2065: 'App' : undeclared identifier
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\winmain.cpp(11):
error C2065: 'App' : undeclared identifier
1>c:\users\scrash\documents\visual studio 2010\projects\directx\directx\winmain.cpp(11):
error C2228: left of '.Initialize' must have class/struct/union
1> type is ''unknown-type''
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.43
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Pokud bude potřeba, dodám všechny zdrojové kódy.
Tady je pro ukázku soubor CApplication.h


#pragma once

#include "CWindow.h"

class CApplication
{
private:
CWindow m_Window;

public:
CApplication(void);
~CApplication(void);
bool Initialize(void);
void Terminate(void);
};


Syntaxe je podle správná, takže mám domění, že je to zastaralejší způsob a kompilátor to už nebere.
Nemáte s tím někdo zkušenosti ? Nebo alespoň nějakou dobrou alternativu, chtěl bych se držet pravidel
knížky, abych výklad dobře pochopil.

Nahlásit jako SPAM
IP: 178.23.217.–
_tomas
~ Anonymní uživatel
22 příspěvků
24. 6. 2011   #2
-
0
-

Nastavené to máš dobre, len si zle niečo opísal. Ak by si mal zle nastavené cesty/linker/kódovanie hádzalo by ti to iná chyby. Hoď sem zvyšok.

Nahlásit jako SPAM
IP: 46.150.223.–
_tomas
~ Anonymní uživatel
22 příspěvků
24. 6. 2011   #3
-
0
-

To _tomas : iné

Nahlásit jako SPAM
IP: 46.150.223.–
nervak0
Věrný člen
24. 6. 2011   #4
-
0
-

Takže při kompilaci winmain.cpp překladač v capplication.h narazil na neočekávanou deklaraci třídy CApplication. Chyba asi bude někde těsně před ní. To znamená v souboru global.h, ve kterém není co pokazit, nebo v souboru cwindow.h, ve kterém ti, tak jak je napsáno na prvním řádku chybového výpisu, nejspíš na konci deklarace třídy CWindow chybí středník.

Nutno podotknout, že bezezbytku splňuješ to, co jsem tušil při tvém prvním dotazu na DX. A není to nic lichotivého.

Nahlásit jako SPAM
IP: 213.211.51.–
Scrash0
Newbie
24. 6. 2011   #5
-
0
-

Tady jsou jednotlivé soubory, je toho docela dost, předem díky za jakoukoli radu.

Winmain.cpp

//#pragma comment (lib, "d:\\dxguid.lib")


#include "Global.h"
#include "CApplication.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
CApplication App;
MSG msg;

if(!App.Initialize())
{
MessageBox(NULL, TEXT("Chyba při inicializaci !"), APP_NAME, MB_ICONERROR);
return (0);
}

while(true)
{
if(PeekMessage(&msg, NULL, 0 ,0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}

//Zde mohou být volány funkce programu
}

return (msg.wParam);
}


CWindow.cpp
#include "Global.h"

#include "CWindow.h"

CWindow::CWindow(void)
{
m_hWnd = NULL;
}

CWindow::~CWindow(void)
{
}

bool CWindow::Initialize(void)
{
WNDCLASS wc;
ZeroMemory(&wc, sizeof(wc));
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszClassName = APP_NAME;

if(!RegisterClass(&wc))
return (false);

if(!(m_hWnd = CreateWindowEx(0, APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, wc.hInstance, NULL)))
return (false);

ShowWindow(m_hWnd, SW_SHOW);
UpdateWindow(m_hWnd);

return (true);
}

LRESULT CALLBACK WndProc(HWND m_hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
break;

case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(m_hWnd, uMsg, wParam, lParam);
}


Capplication.cpp
#include "Global.h"

#include "CApplication.h"

CApplication::CApplication(void)
{
}

CApplication::~CApplication(void)
{
Terminate();
}

bool CApplication::Initialize(void)
{
if(!m_Window.Initialize())
return (false);
return (true);
}

void CApplication::Terminate(void)
{
}


Global.h
#pragma once


#include <windows.h>

#define APP_NAME TEXT("Moje 1. Aplikace")


CWindow.h
#pragma once


class CWindow
{
private:
HWND m_hWnd;

public:
CWindow(void);
~CWindow(void);

bool Initialize(void);

friend LRESULT CALLBACK WndProc(HWND m_hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
}


Capplication.h
#pragma once


#include "CWindow.h"

class CApplication
{
private:
CWindow m_Window;

public:
CApplication(void);
~CApplication(void);
bool Initialize(void);
void Terminate(void);
};

Nahlásit jako SPAM
IP: 178.23.217.–
Scrash0
Newbie
24. 6. 2011   #6
-
0
-

To nervak :
Aha, měl si pravdu, tohoto jsem si nevšimnul, jelikož jsem s visualem měl problémy i u mých konzolových programů. které jsem napsal v DevCpp, nebral jsem tuto chybu nějak navedomí a myslel jsem si že je chyba v nastavení kompilátoru.

Jen, pokud narážíš na to, že pořádné základy C++ jsou tím nejdůležitějším stavebním kamenem, tak to máš 100% pravdu a já to vím.

Nahlásit jako SPAM
IP: 178.23.217.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý