Win API - jak začít? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Win API - jak začít? – C / C++ – Fórum – Programujte.comWin API - jak začít? – C / C++ – Fórum – Programujte.com

 

Sergei0
Newbie
27. 8. 2009   #1
-
0
-

Na doporučení jsem začal číst seriál o WinAPI http://www.builder.cz/art/cpp/winapi1.html a hned první program, který by měl být na úrovni "HelloWorld!" se mi nedaří zkompilovat.

#include <windows.h> 


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Ahoj Win API !!!","První program", MB_OK);
return 0;
}


Vyhodí mi to chybu : "error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [17]' to 'LPCWSTR'"

Je to bída, když mi nejde ani tento první program, který by měl sloužit jako odrazový můstek. :D
Je možné, že při práci s WinAPI je třeba nastavit ve VS 2005 jinak vlastnosti projektu, než u "klasických" programů v C++ ?

Nahlásit jako SPAM
IP: 62.129.41.–
KIIV
~ Moderátor
+43
God of flame
27. 8. 2009   #2
-
0
-

zkus jestli to nepujde s MessageBox(NULL, L"Ahoj Win API !!!", L"První program", MB_OK);

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sergei0
Newbie
27. 8. 2009   #3
-
0
-

To KIIV : Díky za reakci...
L před řetězcem jsi zamýšlel kvůli češtině, že? No každopadně to s tím taky nefakčí, ale hned jako druhá lekce v onom seriálu je příloha se zdrojovými kódy http://www.builder.cz/data/win_api_2.zip a tohle když zkompiluju, tak to jede, tak nad tím mi hlava stojí...to on asi přeci jen musí mít jinak nastavený ten projekt, než mám já...

Nahlásit jako SPAM
IP: 62.129.41.–
KIIV
~ Moderátor
+43
God of flame
27. 8. 2009   #4
-
0
-

To Sergei : ono sem se koukal a da se najit reseni.. staci hledat messageboxw a podobne

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
TooM70
Newbie
27. 8. 2009   #5
-
0
-

Projekt je implicitne nastaven na podporu Unicode, tzn. ze jeden znak je kodovan vice bajty, takze bud pred kazdy retezec pridas to L, nebo budes volat fce bez podpory Unicode (maji na konci nazvu 'A', napr. MessageBoxA) a nebo si podporu Unicode v projektu vypnes (v Project->Properties->Configuration Properties->General nastavit Character Set na Use Multi-Byte Character Set)

Nahlásit jako SPAM
IP: 85.135.97.–
survik1
~ Moderátor
0
Posthunter
27. 8. 2009   #6
-
0
-
Nahlásit jako SPAM
IP: 89.103.154.–
Život je jen hra, která se nedá vyhrát.
Sergei0
Newbie
27. 8. 2009   #7
-
0
-

To survik1 : Tento kód mi příjde podobný jako ten, který jsem použil já. Vzhledem k tomu, že mi oba nejdou, tentokráte s chybou : "MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup "
dá se předpokládat, že můj defoultně nastavený VS 2005 prostě není pro tuto aplikaci správně nastaven. Naneštěstí ani v jednom z článků se o nějakém speciálním nastavení pro VS 2005 nepíše.
Ještě jsem zkoušel oba kódy (na který jsi dal link i ten co jsem uvedl na úvod) spustit v DevCpp a tam JEDOU v pohodě, naneštěstí DevCpp používat nechci (kvůli budoucímu využití WinAPI pro Windows Mobile).
Podobný problém jsem měl i s knihovnou Dirent.h, která mi zpočátku (na defoultně nastaveném VS 2005) nechtěla běhat.
Otázkou stále zůstává, proč mi ten samý projekt funguje, když použiju zdrojové soubory autora a když si chcu projekt udělat sám, tak to nejde???

Nahlásit jako SPAM
IP: 62.129.41.–
dannyk0
Věrný člen
27. 8. 2009   #8
-
0
-

Kdyz udelas to, co radi TooM7, tak by ti mel fungovat ten uplne puvodni kod.

Ono to nejde prave kvuli nastaveni projektu (kompilator atd). Na zacatku je to boj, ale pak, jak clovek zjisti, co kaj nastavit, tak uz to neni tak strasne.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Sergei0
Newbie
28. 8. 2009   #9
-
0
-

To dannyk : Tak jak se dalo předpokládat, tak chyba byla v rozlišném nastavení oproti nastavení, který měl zdrojový kód testovacího příkladu. Konkrétně jde o to, že když si chci rozjet nový projekt a nechci ho mít konolový (console application) , ale oknový (windows application), tak tento projekt lze vytvořit jen S předkompilovanou hlavičkou, což znamená množství zdrojového kódu navíc, v kterém se vůbec nevyznám.

Aby se tot dalo obejít, tak je třeba vytvořit konzolový projekt (Console application) a potom v nastavení projectu -> properties -> Linker -> System -> SubSystem -> a zde změnit z Console (/SUBSYSTEM:CONSOLE) na Windows (/SUBSYSTEM:WINDOWS) . Nevím přesně, jestli jsem si tímto nastavením změnil projekt z Konzolového na oknový, ale můj problém to prozatím vyřešilo. A testovací projekt se mi daří rozjet nezávisle na zdrojových souborech od autora článku o WinAPI

Zajímavé potom je, že při práci s DevCpp tato různost (konzolový projekt vs. oknový projekt) zcela odpadá, protože tam mi to jelo v pohodě bez jakýchkoliv změn v nastavení...

Nahlásit jako SPAM
IP: 62.129.41.–
KIIV
~ Moderátor
+43
God of flame
28. 8. 2009   #10
-
0
-

To Sergei : no to je potom vcelku jasne ze ti to neproslo ... okna potrebujou jako hlavni funkci winMain(..) ..
ale konzole potrebuje klasicky main()

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sergei0
Newbie
28. 8. 2009   #11
-
0
-

To KIIV : Aha, jo díky za vysvětlení... Učebnice, z kterých jsem se učil základy C++ se zabývají jen konzolovými aplikacemi a příjde mi trochu divné, že v internetovém seriálu o WinAPI třeba trochu nezmíní (pro ty největší amatéry, jako jsem já), že projekt musí být oknový a že oknové aplikace potřebujou jako hlavní funkci winMain() ...

Nahlásit jako SPAM
IP: 62.129.41.–
DooFy930
Stálý člen
28. 8. 2009   #12
-
0
-
Nahlásit jako SPAM
IP: 212.80.64.–
Sergei0
Newbie
31. 8. 2009   #13
-
0
-

To DooFy93 : V tom případě je článek napsán asi moc odborně, protože jsem po jeho přečtení neoplýval znalosti nastvení pro MS Visual. :D

EDIT: Teď jsem ho četl podruhé a mnohem pozorněji a musím tvrdit, že se tam o nastavení Visual Studia nepíše. A ten druhý link mi moc nepomůže, když používám verzi Professional.

Nahlásit jako SPAM
IP: 62.129.41.–
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, 69 hostů

Podobná vlákna

Win API — založil Midnight

Win 32 API — založil radvis

Win 32 API - Podokno — založil FanatiK

Win 32 api Dialogy — založil whysper

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ý