Autor Wątek: Czemu to nie działa?! Help...  (Przeczytany 4020 razy)

Offline AS

  • Użytkownik
    • Homepage

# Styczeń 10, 2006, 20:53:22
Bez zbędnych wstępów przechodzę do sedna sprawy, a raczej problemu... ;)

Wcześniej miałem Dev-Cpp i przy najprostszym programie WinApi (nawet nie Hello World! :P) wywalał dziesiątki błędów. Więc się załamałem i postanowiłem go zmienić. :) Zmieniłem na Visual C++ 6.0 Enterprise Edition. I tu sytuacja przedstawia się dość ciekawie. Wklepałem kod arcytrudnego "programu":

#include <windows.h> // First.cpp

int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)
{
MessageBox(0, "jakiśtamtext", "A Tu Tytuł", 0);
return 0;
}

(sam kod programu jest w porządku, zwłaszcza, że taki sam błąd występuje nawer przy _przykładowym_programie_ z Visuala. :()

"Compile". Jest. "Build". Jest. No to "Execute Program". Ok, pokazuje się okienko. Co nie w porządku? Zaraz zobaczycie.

Następnie wyłączam Visual C++ i włączam go ponownie. Otwieram "First.cpp". Po czym (znów) go kompiluje - nadal ok. Lecz przy "Build" - wyskakują 2 błędy! Oto one:

Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/alert.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

First.exe - 2 error(s), 0 warning(s)

Huh? Nie mam pojęcia o co w tym chodzi. Wszystkie pliki .lib i .h są na miejscu. Może ktoś mnie również oświeci po kiego grzyba mój VC++ tworzy dodatkowo (oprócz mojego .cpp i .exe) jakieś pliki .NCB .HTML .DSP .OPT oraz folder Debug zawalony jakimiś szczątkami. Może w tym rzecz? Po drodze VC++ pyta się mnie o to czy utworzyć nowy domyślny "workspace" i czy kontynuować poprzedni projekt. Wątpie, żeby to było coś z tym, ale obydwa potwierdzam.

Proszę o pomoc, ew. wskazówki... Wiecie jak to jest zawieść się już na samym początku użytkowania przy nowym programie. Nie? :P No cóż, trudno. :D

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

nadult

  • Gość
# Styczeń 10, 2006, 20:59:34
Źle skonfiguorwałeś projekt. Kompilujesz go jako aplikacje konsolową a nie okienkową.
W MSDEV2k3 możesz to zmienić w [Project/properties/linker/system/subsystem]:
windows / console
« Ostatnia zmiana: Styczeń 10, 2006, 21:01:31 wysłana przez nadult »

Offline yorp

  • Użytkownik
    • ProfessionGG Project

# Styczeń 10, 2006, 21:05:28
nadult: on nie skonfigurowal projektu, bo napisal, ze otwiera samo cpp, ktore defaultowo jest kompilowane jako konsola.
As: nie otwieraj pliku zrodlowego cpp, tylko plik projektu, w vc6 to chyba jest .dsp

Offline HIUAUA

  • Użytkownik

# Styczeń 10, 2006, 23:26:23
Tak -> Wg mnie zamiast wziac aplikacje okienkowa wybrales aplikacje konsolowa. A poniewaz ap. konsolowa korzysta zawsze( z tego co mi wiadomo ;) ) z funkcji main(), wiec kompilator wywala tobie blad, ze nie widzi tej funkcji.

Ja projekt otwieram zawsze plikiem o rozszerzeniu .dsw.

Offline Xion

  • Moderator
    • xion.log

# Styczeń 11, 2006, 00:52:18
Bo w Visual Studio otwieramy zawsze nie pojedynczy plik z kodem (a co jak program ma ich więcej?), nie projekt, tylko tzw. rozwiązanie (kiedyś to się nazywało przestrzenią roboczą), które może zawierać więcej projektów, chociaż zwykle ma tylko jeden. I właśnie w strukturze nadrzędnej wobec plików z kodem, jaką jest choćby projekt, zawarte są informacje o opcjach kompilatora czy linkera. Więc nie zaczynamy od pliku z kodem, tylko od stworzenia projektu (rozwiązanie jest tworzone po drodze).

A tak swoją drogą, to dwie rzeczy:
1) Dev-C++ także ma swój sposób organizacji kodu w projekty i specjalnie nie różni się od tego z VS ani żadnego innego sensownego IDE.
2) Te "niepotrzebne pliki" zawierają właśnie opcje kompilatora i linkera, plus może takie rzeczy jak lista otwartych plików w IDE czy też dane związane z uzupełnianiem kodu (plik .NCB). A "szczątki" to po prostu skompilowane moduły i pliki z informacjami dla linkera.

A i jeszcze jedno... Jeżeli podczas kompilacji programu wyskakują błędy, to szansa, iż jest to wina kompilatora/IDE, jest - khm - powiedzmy... "dosyć" niewielka...

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Styczeń 12, 2006, 17:29:58
Temat jest OK - ale już tytuł, jaki nadał mu jego autor nie jest i trzebaby coś z tym zrobić. Proponuję bezlitośnie tępić takie tytuły jak "Czemu to nie działa?! Help...", bo jeszcze się nam tu rozplenią i dopiero będzie :)

Offline exor

  • Użytkownik

# Styczeń 12, 2006, 18:02:26
zdecydowanie popieram. tytuł ma wskazywać na temat postu.

Offline xeryph

  • Użytkownik

# Styczeń 13, 2006, 00:11:40
proponuje stworzyc dzial na forum
jezyki - problemy raczkujacych w tematyce :)

a tak na serio to jeszcze druga mysl:
a raczej opinia - jak ktos jest poczatkujacy
to nie powinien brac sie za profesjonalne
srodowiska do programowania bo sie pogubi w nadmiarze opcji
(chociaz dopelnianie nazw funkcji w visualu jest przydatne)

zacznij od np. hmm zainstalowania MinGW http://www.mingw.org
i potem zainstaluj IDE takie jak np. Dev C++ albo RELO http://www.fifsoft.com/relo (bardzo fajne!!)




Offline AS

  • Użytkownik
    • Homepage

# Styczeń 14, 2006, 16:02:51
Serdecznie dziękuję za wszyskie odpowiedzi.

Rację miał Yunior^Pro, otwierałem .cpp a nie .dsp (Project) albo .dsw (Workspace, przestrzeń robacza). :(

Xion bardzo rozjaśnił mi w głowie tymi wyjaśnieniami. Big thx!

Regeditowi też przyznaję rację - popełniłem błąd z tytułem tego postu. Da się to jakoś zmienić, np. na "Problemy z VC++ 6"?

Xeryph - propozycja dobra, jak dla mnie. Co do myśli:
a raczej opinii - IMHO jak ktoś jest początkujący, to i tak może zaczynać od profesjonalnych narzędzi! I tak będzie nawet dla niego lepiej, na dłuższą metę. ;) Niech się uczy, przecież nie musi korzystać na razie z wszystkich opcji.
Mam Dev-C++ i sądzę, że VC++ jest lepszy.

A i jeszcze jedno (~Xion)... Nie twierdzę, że jak wyskakuje jakiś błąd, to jest to wina kompilatora. :) Na pewno jest to mój byk :D, tylko w Dev-C++ nie wiedziałem jak usunąć kilkadziesiąt błędów, a w VC++ tylko dwa. :P

Aha, może kogoś to interesuje - przeszedłem do II etapu Logii06 (http://logia.oeiizk.waw.pl/page.php?sr=logia06/1etap). Jakbyście chcieli rozwiązania z I etapu albo co, wystarczy napisać do mnie.

Teraz wszystko już mi działa. Na razie :D...

                            Pozdrawiam!


PS. Wolałem stare forum, tyle w nim było informacji...

Offline lgromanowski

  • Użytkownik
    • OpenMW, Elderscrolls III: Morrowind engine reimplementation

# Styczeń 15, 2006, 19:06:25
Mam Dev-C++ i sądzę, że VC++ jest lepszy.
http://www.codeblocks.org jest lepsze niż VC (IDE) ;D
Screenshotami na stronie głównej C::B się nie sugeruj, bo są troszkę nie aktualne (C::B wygląda lepiej) :)

Offline SauRooN

  • Użytkownik

# Styczeń 16, 2006, 03:14:09
http://www.codeblocks.org jest lepsze niż VC (IDE) ;D
A co jest dla Ciebie ważniejsze, IDE czy kompilator?

Offline lgromanowski

  • Użytkownik
    • OpenMW, Elderscrolls III: Morrowind engine reimplementation

# Styczeń 16, 2006, 12:00:45
A co jest dla Ciebie ważniejsze, IDE czy kompilator?
Ważniejsze jest dla mnie IDE, bo kompilatory jeśli chodzi o optymalizację i szybkość działania są na zbliżonym poziomie a z IDE jest różnie.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 16, 2006, 17:11:46
Cytuj
Ważniejsze jest dla mnie IDE, bo kompilatory jeśli chodzi o optymalizację i szybkość działania są na zbliżonym poziomie a z IDE jest różnie.
Z kompilatorami też jest różnie, ale nawet jeżeli coś działa dwa rezy wlniej pod G++ niż pod VC++ (raz po przeportowaniu kawałka kodu pod VC++ czas wykonania spadł z 9s to 5s), to zwykle różnica ta pozostaje niezauważona, a IDE ze swojej natury samo rzuca się w oczy. :)

Offline xeryph

  • Użytkownik

# Styczeń 16, 2006, 17:13:04
majac dobre IDE moza duzo szybciej pisac programy przeciez:)

juz nie mowie o uzupelnianiu kodu (np nawet 15literowe zasoby DX'a:P)
ale np. w VS podglad obiektow i definicji klas,
 wiekszosc posiada uzupelnianie nazw funkcji oraz listy argumentow,

 taki BCB :) przeciez w ciagu 10min mozna zrobic notatnik
 na zaliczenie z infy (przy uzyciu VCL)
 a nie mordowac sie z WinApi w innym IDE
 (chociaz VS posiada buildera MFC :) - ale troche bardziej skomplikowany w obsludze)

 niektore pakiety zawieraja dodatkowe biblioteki czesto niedostepne z kompilatorem :P
 np.  taki RELO posiada biblioteke wx_costam (nie wiem nie dziala ale pisze na
stronie programu ze ma dzialac :)  - oczywiscie biblioteka jest dostepna ogolnie
ale komu chce sie dodatkowo sciagac :P )

do AS:
 sorki ze tak wyskoczylem z tym ze beginer nie moze uzywac adv IDE
 ale akuratnie bylem po rozmowie kumplem ktory nie wiedzial jak
 utworzyc nowy projek w Visualu:) bo tam jest taaak duzo opcji :)

 fakt :P jak ktos jest poczatkujacy powinien uczyc sie na najlepszym sprzecie
 ( o ile go nie zniszczy albo nie dokona profanacji :P)
 
jak to mowi moja znajoma:
 "nie sztuka grac na nastrojonej gitarze " :)
 

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 16, 2006, 17:25:48
Cytuj
taki BCB przeciez w ciagu 10min mozna zrobic notatnik
na zaliczenie z infy (przy uzyciu VCL)
a nie mordowac sie z WinApi w innym IDE
(chociaz VS posiada buildera MFC - ale troche bardziej skomplikowany w obsludze)
Z MFC teraz już Microsoft się nawet wycofule, ale C# jest dosyć przyjazny pod względem budowania interfejsów. :)

Cytuj
oczywiscie biblioteka jest dostepna ogolnie
ale komu chce sie dodatkowo sciagac
Czasami warto się trochę pomęczyć i sciagnąć (a nawet czasem samemu skompilować), niż męczyć się z wynajdywaniem koła na nowo. :)