Dziwny problem z kompilacją

0

Witam.

Korzystam z MS VS 2010 Ultimate i mam dziwny problem z kompilacją programów windowsowych:
C++ uczę się z Megatutoriala Xion'a i kiedy chcę skompilować przykłady programów windowsowych ( part3, te co są juz dołączone ) wszystko pięknie się kompiluje. Ale kiedy już chcę utworzyć nowy projekt ( wszystko według tego tutoriala ), i wpisać w main.cpp ( a nawet wkleić :P ) ten sam kod, już aplikacja się nie kompiluje :(

A oto przykładowy kod z pierwszego programu:

// MsgBox - okno komunikatu

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpszCmdLine,   int nCmdShow)
{
    MessageBox (NULL, "Oto nasz pierwszy program w Windows!", "Komunikat", NULL);
    return 0;
}

W przykładzie pięknie się kompiluje, ale we własnym projekcie już nie.
W funkcji:

MessageBox (NULL, "Oto nasz pierwszy program w Windows!", "Komunikat", NULL);
  1. i 3. argument podświetla się na czerwono, a oto błąd przy nim:

Error: argument of type "const char*" is incompatible with parametr of type "LPCWSTR"

A kiedy przed tym stringiem dodam L:

MessageBox (NULL, L"Oto nasz pierwszy program w Windows!", L"Komunikat", NULL);

Program się kompiluje poprawnie. A to L jest bodajże od unicode. No ale co jak trzymam zwykły tekst w zmiennej? tu już L nie wstawię.

Wie ktoś może dlaczego tak mam? Jak to mogę naprawić? W różnych kursach przykładach itp. w internecie jest wszystko podane bez tej L i jakoś im działa. Również w tym przykładzie od Xion'a działa jak należy a w nowym projekcie nie.

Próbowałem zainstalować inną wersję kompilatora ( MS VS 2008 Professional ) i nadal to samo.

Wie ktoś o co chodzi?
Z góry thx.

0

Być może, że to zależy o kompilatora. Jeżeli będziesz miał w zmiennej np. w string'u to on ma taką metodę c_str(), która zwraca const char*.

0
xeo545x39 napisał(a)

Być może, że to zależy o kompilatora. Jeżeli będziesz miał w zmiennej np. w string'u to on ma taką metodę c_str(), która zwraca const char*.

Ale zauważ że ten przykładowy kod co podałem na początku kompilowałem 2 razy w tym samym kompilatorze ( MS VS 2010 Ultimate ) tylko że inny projekt/solucja ( jedno od Xion'a to gotowe a drugie nowo utworzone ) i to od Xion'a się skompilowało bez błędnie a moje... no cóż.

0

To nie trzymaj stringów w tablicy char tylko wchar_t, ewentualnie wstring i używaj jego metody c_str().
Inną opcją(nie polecam) jest tworzenie projektu bez obsługi unicode. Można to ustawić przy tworzeniu projektu i chyba w opcjach już stworzonego, jeżeli dobrze pamiętam.
Możesz też jawnie używać wersji ansi funkcji winapi, np. MessageBoxA

0

Eh, w kolo to samo, masz projekt "unicode", pogrzeb na forum i poszukaj w preferencjach projektu bo mi sie juz nie chce n-ty raz pisac. Nauczcie sie ludzie korzystac z narzedzi , na ktorych pracujecie.

edit
@byku_guzio: eh, wyprzedziles;-)

0

Ok dzięki za pomoc. Wyłączyłem unicode i wszystko pięknie działa, ale jeszcze małe pytanko: czy da się ( i jak ) na stałe wyłączyć unicode w programie?

0

Możesz uzasadnić po jaką cholerę? Nie ma to jak się ograniczać.

0

A z resztą... :P

Problem rozwiązany. Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0