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

Winapy - strcpy – C / C++ – Fórum – Programujte.comWinapy - strcpy – C / C++ – Fórum – Programujte.com

 

Vollf0
Duch
28. 1. 2008   #1
-
0
-

Zdravím lidi, jsem tu zas po dlouhý době (možná už si mě nepamatujete :) ) Rozhodnul sem se začít učit něco ve winapi a abych pořád něco bezhlavě neopisoval, občas to nějak sám pozměnit, ale moc to nejde.

Chci se zeptat proč to nejde takhle, hlásí to nějaký divný chyby

void VlastniKresleni(WPARAM wParam, LPARAM lParam)

{
POINTS ptCursor;
HDC hdc;
TCHAR chText[30];
ptCursor = MAKEPOINTS(lParam);
strcpy("ahoj", chText);

// _stprintf(chText, "x=%d, y=%d", ptCursor.x, ptCursor.y);
hdc = GetDC(g_hwndMain);
if ( wParam & MK_CONTROL )
SetTextColor(hdc, 0x000000FF);
TextOut(hdc, ptCursor.x, ptCursor.y, chText, lstrlen(chText));
ReleaseDC(g_hwndMain, hdc);
}


To strcpy sem tam dal já (nejde ani lstrcpy) a to // _stprintf(chText, "x=%d, y=%d", ptCursor.x, ptCursor.y); je správně.

Vše potřebný includovaný mam (stdio, tchar.h, a tak). Takže v tom to nebude, ale já v tomhle co sem udělal chybu nevidím :( Hold sem ještě nezkušenej.

PS: Je to samozřejmě jen část programu, spíš jen jedna funkce z něj. Ale o ten zbytek kódu nejde.

Takže díky za rady a ponaučení

Nahlásit jako SPAM
IP: 91.195.106.–
Zelenáč0
Posthunter
28. 1. 2008   #2
-
0
-

To Vollf : Chybu mas minimalne v tom radku se strcpy - snazis se zkopirovat chText do "ahoj", coz skonci osklive...

Nahlásit jako SPAM
IP: 89.176.254.–
Jura
~ Anonymní uživatel
637 příspěvků
28. 1. 2008   #3
-
0
-

To Vollf :

Zdravím,

je to proto, že TCHAR je definován, buď jako CHAR nebo jako WCHAR(UNICODE) a zaléží na tom, jestli překládaš program v UNICODU nebo bez něj. Jde o to, že v UNICODU každý znak zabíra více bajtů(sizeof(unsigned short) nebo sizeof(wchar_t),což jsou obvykle 2 bajty), narozdíl od CHARu, který zabírá nejméně 1 B. Kromě toho pokud píšeš pod UNICODem tak veškeré literály musí být uvozeny písmenem L, příklad: WCHAR *wstr=L"Tohle je text v UNICODu"; K tomu, aby jsi nemusel přepisovat veškeré literály v textu xistuje v WinAPI makro _T(x),které samo v závilosti na tom, jetsli je definováno makro UNICODE rozvine řetězec o L.
Takže správně by to mohlo být:



....
lstrcpy(_T("ahoj"), chText); // takže pokud překladáš se zaplým UNICODE pak se ten kód rozvine na lstrcpy(L"ahoj", chText); pokud ne, tak zůstane jen lstrcpy("ahoj", chText);
....

Nahlásit jako SPAM
IP: 85.207.192.–
Zelenáč0
Posthunter
28. 1. 2008   #4
-
0
-

Jinak posli ty chyby.. To, ze tobe pripadaj divny jeste neznamena, ze se to tak bude jevit i ostatnim a vetsinou takova chyba podivuhodne presne popisuje, kde a co mas spatne!

Nahlásit jako SPAM
IP: 89.176.254.–
Jura
~ Anonymní uživatel
637 příspěvků
28. 1. 2008   #5
-
0
-

Kua, koukám, že jsem napsal taky pěknou p*čovinu. Samozřejmě ty argumenty mají být naopak, jak píše Zelenáč. A jinak platí i to, co jsem napsal já.

Nahlásit jako SPAM
IP: 85.207.192.–
Vollf0
Duch
28. 1. 2008   #6
-
0
-

Hej známý firmy, Zelenáš, Jura, a spol. :) Kucí zlatý chyběli ste mi :)

Tak už to jede ... mam to takhle:

void VlastniKresleni(WPARAM wParam, LPARAM lParam)

{
POINTS ptCursor;
HDC hdc;
TCHAR chText[30];
ptCursor = MAKEPOINTS(lParam);
lstrcpy(chText, TEXT("ahoj"));

// _stprintf(chText, "x=%d, y=%d", ptCursor.x, ptCursor.y);
hdc = GetDC(g_hwndMain);
if ( wParam & MK_CONTROL )
SetTextColor(hdc, 0x000000FF);
TextOut(hdc, ptCursor.x, ptCursor.y, chText, lstrlen(chText));
ReleaseDC(g_hwndMain, hdc);
}


Sice to funguje i skončí bez problému ale stejně to píše tohle (v informačním okně visual C++):

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
The thread 0xEAC has exited with code 0 (0x0).
The program 'C:\DATA\C++\Win32\1\Debug\1.exe' has exited with code 0 (0x0).

Nahlásit jako SPAM
IP: 91.195.106.–
Zelenáč0
Posthunter
28. 1. 2008   #7
-
0
-

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:WINDOWSsystem32kernel32.dll', no matching symbolic information found.
Loaded 'C:WINDOWSsystem32user32.dll', no matching symbolic information found.
Loaded 'C:WINDOWSsystem32gdi32.dll', no matching symbolic information found.


Tak s tim ti nepomuzu.. Muzu te jen odkazat na msdn: http://msdn2.microsoft.com/en-us/library/cy2kta5a(VS.80).aspx
Na funkcnosti to te aplikaci ale neubira, nebo ano?

Nahlásit jako SPAM
IP: 89.176.254.–
Vollf0
Duch
28. 1. 2008   #8
-
0
-

neubírá no :)

tak díky moc ...

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

Podobná vlákna

Strcpy a AnsiString — založil geroj

Nefunguje mi strcpy() — založil Bionik

Nebezpečné voláné strcpy — založil Dusty007

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ý