C++ sa menilo? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ sa menilo? – C / C++ – Fórum – Programujte.comC++ sa menilo? – C / C++ – Fórum – Programujte.com

 

Samuel Lehotský0
Stálý člen
2. 5. 2007   #1
-
0
-

Mám problém, kúpil som si knižku o Direct 3D v C++ a príklady sú tam písané vo Visual Studiu .NET, ja mám novšie Visual Studio 2005 Pro a už mi to blbne, normálne odpíšem príklad ale kompilátor vyhodí chybu, uvediem príklady.
Napr.

static red = 0;
bolo v knižke a ja som to musel prepísať na
static int red = 0;

ďalej napr. v knižke je
g_hVysledok = D3DXLoadSurfaceFromFile(g_pObrazovePovrchy[x], NULL, NULL, nazovSuboru, NULL, D3DX_DEFAULT, 0, NULL);

a mne to vyhodí túto chybu
Error	2	error C2664: 'D3DXLoadSurfaceFromFileW' : cannot convert parameter 4 from 'char [15]' to 'LPCWSTR'	c:\documents and settings\samo\my documents\visual studio 2005\projects\animacia\animacia\animacia.cpp	201

no a tu je akurát ten problém lebo okeby som to aj prepísal na toto
g_hVysledok = D3DXLoadSurfaceFromFile(g_pObrazovePovrchy[x], NULL, NULL, (LPCWSTR)nazovSuboru, NULL, D3DX_DEFAULT, 0, NULL);

tak to len blbo preblikne a vyhodí ma z programu, a takto to musím prepisovať na veľa miestach, keď som si stiahol originálne kódy z netu tak to tam bolo presne tak ako v tej knižke a keď som to spustil tak to išlo, VS si najprv spustilo nejaký konvertor zo starých projektov na nové ale neprepísal nič a ide to, ono bude problém v nastaveniach projektu niekde, neviete kde sa to dá nastaviť? aby mi nevyhadzoval nové chyby ale aby to prekladal po starom?

Nahlásit jako SPAM
IP: ...–
Dustm@n -Junks are my life
DeaLer+2
Hero
2. 5. 2007   #2
-
0
-

To samo: ano, ve VS 2005 je C++/CLI a vněm jsou oproti C++ w/Managed Extensions dost podstatný rozdíly. Pokud jsou v té knížce nativní projekty, tak by to mohlo fungovat (případně s nějakým nastavením), ale vzhledem k tomu co jsi psal bych tipoval, že jde o managed a v tom případě může kompatibilita problematická.

V C++ je možné kombinovat unmanaged kód s managed kódem a VS 2005 si to pravděpodobně nakonfiguruje při převodu projektu na nový formát. Nemám s tím zkušenosti, ale třeba bude někdo vědět víc.

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Samuel Lehotský0
Stálý člen
2. 5. 2007   #3
-
0
-

čiže VS 2005 používa CLI a VS .NET Managed Extensions? Som o tom nikdy nepočul, nedá sa to nejako zmeniť? V tej knižke (mám ju po česky) sú tie kódy preložené do češtiny, z netu sa dajú stiahnuť orig. anglické kódy, ale ja si to chcem písať sám, nie len skopírovať už hotové kódy, nech sa mi to dostane do krvi a to sa nedá lebo to potom chyby hádže.

Nahlásit jako SPAM
IP: ...–
Dustm@n -Junks are my life
jozi
~ Anonymní uživatel
6 příspěvků
2. 5. 2007   #4
-
0
-

Tieto chyby nemaju nic spolocne z CLI atd. To su jasne chyby knihy. Ako moze funngovat static red? static coho? Dalsia chyba je pretypovanie. Tiez nema nic spolocne. Je mozne ze niektore kompilatory to mozu detekovat ako error, ine ako warning.

Nahlásit jako SPAM
IP: ...–
DeaLer+2
Hero
2. 5. 2007   #5
-
0
-

To jozi: je to možný, C++ vůbec neznám

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Samuel Lehotský0
Stálý člen
3. 5. 2007   #6
-
0
-

To jozi: ale prdlajs, je to možné, však o to ide, keď si stiahneš origoš kódy tak tam to je, len static red, VS si to sám určí, že static čoho asi. A to je len jedna chyba, v starom VS by to išlo, ide to aj v tom mojom, ale len keď otvorím ten projekt čo stiahnem, kebyže skopírujem ten istý kód do nového projektu už to nepôjde, teraz má pravdu skôr dealer.

Nahlásit jako SPAM
IP: ...–
Dustm@n -Junks are my life
jozi
~ Anonymní uživatel
6 příspěvků
3. 5. 2007   #7
-
0
-

Totizto kompilator od M$ prichodom .NET a managed code stratil doveru. Jeho zladenost z C++ standardom sla dole vodou. To je dovod preco ti to v starom slo. Toto by nemalo nikde fungovat. Ked si M$ najal externych ludi uznavanych C++ komunitou na C++/CLI, ich prvou prioritou a ulohou bolo zladit kompilator zo standardom. CLI ako take s tym nema nic spolocne. Ty si sa len stretol z dosledkom tohto pribehu.

Nahlásit jako SPAM
IP: ...–
Samuel Lehotský0
Stálý člen
3. 5. 2007   #8
-
0
-

ok tak dajme tomu, že ten static je chyba, ale tá druhá? Však tam by mal zobrať normálny text a hádže chybu, že to mám pretypovať. A dám ti ešte jednu chybu ktorú vyhodí fakt len 2005ka a to je úplný základ, ešte aj v seriáli čo tu je tu, to je normálne.

Toto je výsek z programu pre vytvorenie okna vo WINAPI, pozri parameter 3 a 4

///////////////////////////////////////////

////////// VytvorenieOknaAplikácie()
///////////////////////////////////////////
void VytvorenieOknaAplikacie(HINSTANCE hInstance)
{
g_hWnd = CreateWindowEx(
NULL,
TEXT("WinApp"),
TEXT("Jednoduchá aplikácia vo Windows"),
WS_OVERLAPPEDWINDOW,
100,
100,
648,
514,
GetDesktopWindow(),
NULL,
hInstance,
NULL);
}

to makro TEXT() tam vôbec nemá byť, ono to má prijať aj obyčajné úvodzovky, ale vtedy mi vyhodí túto chybu:
Error	2	error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [7]' to 'LPCWSTR'	c:\documents and settings\samo\my documents\visual studio 2005\projects\jednoduchaaplikace\jednoduchaaplikace\jednoduchaaplikacia.cpp	91


A najlepšie je, že keď to spravím takto (LPCWSTR)"WinApp", takto nepôjde, program spustí ale nezobrazí sa nič. A takýchto "chýb" je tam dosť veľa a ťažko sa opravujú, kód mám správne ale označí ti ho chybne tak to teraz opravuj..

Nahlásit jako SPAM
IP: ...–
Dustm@n -Junks are my life
jozi
~ Anonymní uživatel
6 příspěvků
3. 5. 2007   #9
-
0
-

Ta druha a aj dalsia uvedena je opat chyba. Ked sa lebsie pozries na chybu tak si vsimni meno funke : 'D3DXLoadSurfaceFromFileW' a nie D3DXLoadSurfaceFromFile. Preco? Pretoze mas v projekte zapnutu podporu UNICODE. Totizto vecsina funkcii API ma 2 verzie.

- pre klasicky 8 bitovy char, vtedy sa pouzije funkcia D3DXLoadSurfaceFromFile alebo CreateWindowEx
- pre 16 bitovy WCHAR, vtedy sa funkcia vola D3DXLoadSurfaceFromFileW alebo CreateWindowExW

Macro TEXT() sa stara o spravnu konverziu, aby nenastal problem s pretypovanim. Totizto priklad v knihe je pisany nie pre UNICODE. Toto vsak je vec stara ako WIN32 API same a nema to nic spolocne z Managed a unmanaged code. Autor knihy teda mal na zaciatku spomenut ze je potrebne vypnut UNICODE definiciu alebo mal pouzivat spomenute macro TEXT().

Dovod je zrejme ten ze donedavna UNICODE bol defaultne vypnuty, kdezto v novom VisualC++ je uz defaultne zapnuty.

Nahlásit jako SPAM
IP: ...–
Samuel Lehotský0
Stálý člen
3. 5. 2007   #10
-
0
-

jozi píše:#
# Ta druha a aj dalsia uvedena je opat chyba. Ked sa lebsie pozries na chybu tak si vsimni meno funke : ##uvozovka##D3DXLoadSurfaceFromFileW##uvozovka## a nie D3DXLoadSurfaceFromFile. Preco? Pretoze mas v projekte zapnutu podporu UNICODE. Totizto vecsina funkcii API ma 2 verzie.#
##
#- pre klasicky 8 bitovy char, vtedy sa pouzije funkcia D3DXLoadSurfaceFromFile alebo CreateWindowEx#
#- pre 16 bitovy WCHAR, vtedy sa funkcia vola D3DXLoadSurfaceFromFileW alebo CreateWindowExW#
##
#Macro TEXT() sa stara o spravnu konverziu, aby nenastal problem s pretypovanim. Totizto priklad v knihe je pisany nie pre UNICODE. Toto vsak je vec stara ako WIN32 API same a nema to nic spolocne z Managed a unmanaged code. Autor knihy teda mal na zaciatku spomenut ze je potrebne vypnut UNICODE definiciu alebo mal pouzivat spomenute macro TEXT().#
##
#Dovod je zrejme ten ze donedavna UNICODE bol defaultne vypnuty, kdezto v novom VisualC++ je uz defaultne zapnuty.#
#


jo, paráda, už to ide, díky, ty si génius :D

Nahlásit jako SPAM
IP: ...–
Dustm@n -Junks are my life
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, 7 hostů

Moderátoři diskuze

 

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