C++ -kysymykset

Muu yhteisön välinen keskustelu.
Post Reply
User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

C++ -kysymykset

Post by koodaaja » Thu Sep 06, 2007 11:17 pm

Sarjassamme wanhoja suosittuja topikkeja, C++ -kysymykset.

Ja pidemmittä puheitta esitän oman ongelmani; yritän OpenGL:lle tehdä jonkunnäköistä systeemiä, jolla saisi kätevästi pidettyä muistissa kolmiot, verteksit sun muut härpäkkeet. Nyt tuli sellainen probleemi, että tämän rivin ansiosta Windows antaa virheilmoituksen ("project.exe on havainnut virheen") , kääntäjä kun ei anna mitään erroria:

Code: Select all

glVertex3fv(triangles[i].vect[j]->coord);
Eli kolmiot käydään läpi ja niiden verteksit käydään edelleen läpi. Kolmio-struktissa on siis kolmen verteksin pointteritaulukko, joka sisältää kolmen floatin koordinaattitaulukon. Eli miten tämä oikeasti kannattaisi toteuttaa, ja miten tämän nykyisen systeemin saisi toimimaan?

User avatar
Dibalo
Advanced Member
Posts: 298
Joined: Mon Aug 27, 2007 8:12 pm
Location: Espoo, Finland
Contact:

Re: C++ -kysymykset

Post by Dibalo » Fri Sep 07, 2007 12:42 pm

Todennäköisesti yli- tai aliluet taulukkoa. Suosittelen opettelemaan debuggerin käytön ja tarkistamaan asian sillä. Kun on debuggeria kerran maistanut, ei ilman sitä pärjää.. ;)
The darkest spells can be found from
http://tunkkaus.blogspot.fi

User avatar
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda » Sun Sep 09, 2007 6:48 pm

Dibalo wrote:Todennäköisesti yli- tai aliluet taulukkoa. Suosittelen opettelemaan debuggerin käytön ja tarkistamaan asian sillä. Kun on debuggeria kerran maistanut, ei ilman sitä pärjää.. ;)
Kuka voi koodata ilman debuggeria :shock: ?
Eli kolmiot käydään läpi ja niiden verteksit käydään edelleen läpi. Kolmio-struktissa on siis kolmen verteksin pointteritaulukko, joka sisältää kolmen floatin koordinaattitaulukon. Eli miten tämä oikeasti kannattaisi toteuttaa, ja miten tämän nykyisen systeemin saisi toimimaan?
Ymmärsinkö oikein, että sinulla on siis nyt jotain tämän kaltaista:

Code: Select all

//Pseudo code ahead:

struct Kolmio
{
Vertex* verises;
};

struct Vertex
{
float* coordinate;
};
Koska kolmiossa on aina kolme verteksiä, ja verteksissä on aina kolme koordinaattia(plus väri), niin ne voisi ihan kovakoodata tuohon. Paitsi jos teet Kolmio-luokan joka peritään Shape-luokasta, niin silloin taulukko on hyvä valinta.

Code: Select all

class Shape
{
public:
    virtual void Draw( /*viittaus piirtopintaan, renderöijään tms*/ ) = 0;

protected:
    Vertex* Vertises;
};

class Triangle : public Shape
{
public:
    void Draw( /*viittaus piirtopintaan, renderöijään tms*/ ); //piirrä täällä kolmio käyttäen verteksejä
};

struct Vertex
{
public:
    float X;
    float Y;
    float Z;
    float Color;
};
OoO

FuJi
Member
Posts: 70
Joined: Tue Aug 28, 2007 3:09 pm

Re: C++ -kysymykset

Post by FuJi » Tue Sep 25, 2007 4:50 pm

Nyt kun aloitin tuon C++:n opettelun tuli ongelma tuon kääntäjän kanssa. Kääntäjä on siis Dev-C++.
Kun aloitan uuden projektin (New -> Projekt) ja sitten valitsen sieltä Windows Application ja siihen tulee seuraava koodi:

Code: Select all

#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
Mihin kohtaan tähän kuuluu laittaa se koodi, jossa tulostetaan teksti?

User avatar
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii » Tue Sep 25, 2007 9:46 pm

FuJi wrote:Nyt kun aloitin tuon C++:n opettelun tuli ongelma tuon kääntäjän kanssa. Kääntäjä on siis Dev-C++.
Kun aloitan uuden projektin (New -> Projekt) ja sitten valitsen sieltä Windows Application ja siihen tulee seuraava koodi:

Code: Select all

#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
Mihin kohtaan tähän kuuluu laittaa se koodi, jossa tulostetaan teksti?
Eieieiei. Jos olet alottelija, niin älä vain aloita harjoitteluja WinAPI:n kanssa. Aloita konsoliohjelmilla, koska kaikki aloittelijanoppaat on tehty konsoleille.

Tässä on hyvä C++ -opas. Lue se läpi, niin sitten voit alkaa opettelemaan WinAPI:a (jota en suosittele, koska wxWidget on keksitty, joka vastaa WinAPI:a, mutta on käyttöjärjestelmäriippumaton ja selkeämpi).

FuJi
Member
Posts: 70
Joined: Tue Aug 28, 2007 3:09 pm

Re: C++ -kysymykset

Post by FuJi » Wed Sep 26, 2007 3:24 pm

Mutta kun esimerkiksi koittaa tulostaa tektiä niin se ruutu vain välähtää siinä ja lähtee heti pois.
Miten tämän saisi niin, että se ruutu pysyisi siinä?

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja » Wed Sep 26, 2007 4:20 pm

FuJi wrote:Mutta kun esimerkiksi koittaa tulostaa tektiä niin se ruutu vain välähtää siinä ja lähtee heti pois.
Miten tämän saisi niin, että se ruutu pysyisi siinä?
Sinun pitää pysäyttää ohjelma jotenkin, esim. system("pause"); voisi toimia, en ole tosin varma kirjoitetaanko se isolla jne.

Sitten oma kysymys: miten konsoli-akkunan voi tyhjentää? Siis cls:n vastine?

User avatar
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: C++ -kysymykset

Post by jannepelaa » Wed Sep 26, 2007 4:39 pm

koodaaja wrote:
FuJi wrote:Mutta kun esimerkiksi koittaa tulostaa tektiä niin se ruutu vain välähtää siinä ja lähtee heti pois.
Miten tämän saisi niin, että se ruutu pysyisi siinä?
Sinun pitää pysäyttää ohjelma jotenkin, esim. system("pause"); voisi toimia, en ole tosin varma kirjoitetaanko se isolla jne.

Sitten oma kysymys: miten konsoli-akkunan voi tyhjentää? Siis cls:n vastine?
Muistaakseni system("cls"); Ja tuolla system-funktiolla voi kutsua ihan komentokehotteen (XP: cmd.exe) komentoja mm. pause ja cls.

User avatar
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii » Wed Sep 26, 2007 5:17 pm

FuJi wrote:Mutta kun esimerkiksi koittaa tulostaa tektiä niin se ruutu vain välähtää siinä ja lähtee heti pois.
Miten tämän saisi niin, että se ruutu pysyisi siinä?
Et ilmeisesti ole koskaan käyttänyt DOSia tai komentokehoitetta? Ensin sinun pitää aukaista cmd.exe. Sitten, kirjoitat cd [ohjelman_kansion_polku] ja sen jälkeen ohjelman nimet ja parametrit. Jos ohjelmassa ei ole parametrejä, niin on nopeampaa vetää vain koko ohjelma komentokehoitteeseen ja painaa enteriä. Jos haluat keskeyttää ohjelman käännösvaiheessa, niin käytä cin.get() oliota.
jannepelaa wrote:Muistaakseni system("cls"); Ja tuolla system-funktiolla voi kutsua ihan komentokehotteen (XP: cmd.exe) komentoja mm. pause ja cls.
System -funktiota ei kannata käyttää ruudun tyhjentämiseen, esimerkiksi jossain ascii -pelissä, koska tämä on hidasta. conio.h tai joku tuollainen sisälsi muistaakseni ruuduntyhjennyksen. Googleta.

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja » Wed Sep 26, 2007 7:55 pm

jabanii wrote:
FuJi wrote:Mutta kun esimerkiksi koittaa tulostaa tektiä niin se ruutu vain välähtää siinä ja lähtee heti pois.
Miten tämän saisi niin, että se ruutu pysyisi siinä?
Et ilmeisesti ole koskaan käyttänyt DOSia tai komentokehoitetta? Ensin sinun pitää aukaista cmd.exe. Sitten, kirjoitat cd [ohjelman_kansion_polku] ja sen jälkeen ohjelman nimet ja parametrit. Jos ohjelmassa ei ole parametrejä, niin on nopeampaa vetää vain koko ohjelma komentokehoitteeseen ja painaa enteriä. Jos haluat keskeyttää ohjelman käännösvaiheessa, niin käytä cin.get() oliota.
Nopeampaa vetää koko ohjelma komentokehotteeseen? Eli se osaa kääntää C++:aa? Jännää, en tuotakaan tiennyt. Lisäksi cin.get() on olion metodi, ei olio, ja ainakin itse olen tottunut käyttämään couttia jonkun turhan muuttujan kanssa, niin purkkaa kuin se onkin. Tai sitten system()iä.

User avatar
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii » Wed Sep 26, 2007 8:04 pm

koodaaja wrote:
jabanii wrote:
FuJi wrote:Mutta kun esimerkiksi koittaa tulostaa tektiä niin se ruutu vain välähtää siinä ja lähtee heti pois.
Miten tämän saisi niin, että se ruutu pysyisi siinä?
Et ilmeisesti ole koskaan käyttänyt DOSia tai komentokehoitetta? Ensin sinun pitää aukaista cmd.exe. Sitten, kirjoitat cd [ohjelman_kansion_polku] ja sen jälkeen ohjelman nimet ja parametrit. Jos ohjelmassa ei ole parametrejä, niin on nopeampaa vetää vain koko ohjelma komentokehoitteeseen ja painaa enteriä. Jos haluat keskeyttää ohjelman käännösvaiheessa, niin käytä cin.get() oliota.
Nopeampaa vetää koko ohjelma komentokehotteeseen? Eli se osaa kääntää C++:aa? Jännää, en tuotakaan tiennyt. Lisäksi cin.get() on olion metodi, ei olio, ja ainakin itse olen tottunut käyttämään couttia jonkun turhan muuttujan kanssa, niin purkkaa kuin se onkin. Tai sitten system()iä.
Tarkoitin valmista exe -tiedostoa. Ja kyllä se osaa sen kääntää, jos käännät sen konsoli -kääntäjän avulla. Ja miten coutilla voi saada ohjelman pysäytettyä, jos se vain tulostaa teksitä? cin.get() pistää ohjelman ottamaan vastaan syötön, mutta sitä ei tallenneta mihinkään muuttujaan.

User avatar
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda » Thu Sep 27, 2007 9:48 am

Lisäksi cin.get() on olion metodi, ei olio
Kyllä, pysytään tarkkana ;) cin.get() on ihan hyvä tapa pysäyttää komentoriviohjelma, ja parempi sitä onkin käyttää kuin systemiä joka on käyttöjärjestemästä riippuvainen toiminto. Eikä sen tulosta tarvitse tallentaa mihinkään.

cout<<"Hello nooblets :D";
cin.get();

Ruudun tyhjennykseen ei ole standarditapaa, sillä standardi C++ ei oleta että laitteessa olisi näyttö jota tyhjentää. Tyhjennys on monissa kääntäjissä hieman erilainen, esimerkiksi joissain borlandeissa oli tuo clrscr-funktio tuolla conio.h:ssa, mutta läheskään kaikissa sitä ei ole. Tässä http://www.devhood.com/messages/message ... d_id=36779 oli muutamia vinkkejä mitä voit tehdä Windows-konsolilla (linux-ohjelmoinnista en tiedä hevon kukkuakaan, voin tunnustaa ;))
OoO

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 » Thu Sep 27, 2007 9:36 pm

Tietäsikö kukaan mitään helppoa pelikirjastoa C++:lle joka mieluusti käyttäisi SDL:ää grafiikkarajapintana? Ja vielä tarvitsisi jotain pientä vinkkiä harjoituspeleiksi ku oma pää on niin tyhjä.

HGE:n oon jo kattonutkin ja se olikin täyttä hepreaa vielä, tosin jos vaan jaksais kai siitäkin selon sais.

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja » Thu Sep 27, 2007 9:52 pm

temu92 wrote:Tietäsikö kukaan mitään helppoa pelikirjastoa C++:lle joka mieluusti käyttäisi SDL:ää grafiikkarajapintana? Ja vielä tarvitsisi jotain pientä vinkkiä harjoituspeleiksi ku oma pää on niin tyhjä.

HGE:n oon jo kattonutkin ja se olikin täyttä hepreaa vielä, tosin jos vaan jaksais kai siitäkin selon sais.
Jos SDL on liian monimutkainen, on se sitten aika pitkälti voi voi. SDL on äärimmäisen yksinkertainen ja helppo rajapinta, lue vaikka Lazy Foo':n tutot ja opit kaiken olennaisen. Näin tein itse, joskaan en kauaa SDL:llä leikkinyt, vaan siirryin OpenGL:ään, joka ei sekään muutaman kuukauden ähellyksen jälkeen ollut hirveän vaikea.

Ja mikä olisikaan parempi harjoituspeli kuin klassinen parallax scrolleri? =D

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 » Fri Sep 28, 2007 2:18 pm

Kyllähän SDL sujuu mutta pelikirjaston kanssa se olisi vielä helpompaa. OpenGL:n kanssa on huonompi homma kun mistään en vielä ole löytänyt itte kirjastoa (tai sit se kuitenki on mulla jo :P)

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja » Sat Sep 29, 2007 12:09 am

temu92 wrote:Kyllähän SDL sujuu mutta pelikirjaston kanssa se olisi vielä helpompaa. OpenGL:n kanssa on huonompi homma kun mistään en vielä ole löytänyt itte kirjastoa (tai sit se kuitenki on mulla jo :P)
Jos käytät Dev-Cpp:tä, olet oikeassa; sinulla on se jo. Ja jos et, googlettamalla löytää. Jos sitä haluaa opetella, on NeHe teh paikka. Siellä selitetään kaikki oleellinen, ja vähemmänkin oleellinen, hyvin tarkasti ja vieläpä melko selkeästi. Ensimmäinen tutoriaali tosin on äärimmäisen sekava, vaan eipä ole asiakaan (windows-ikkunan luonti ja käyttö OGL:n kanssa) kovin helppo.

User avatar
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii » Sun Sep 30, 2007 3:27 pm

Olen alkanut opettelemaan sokettejen käyttöä, mutta WSAStartup ei toimi jostain syystä.

Kääntäjä ei valita mitään, mutta kun laitan seuraavan koodin, niin funktio palauttaa 1.

Code: Select all

	if(WSAStartup(MAKEWORD(2,2), &wsadata)==SOCKET_ERROR)
	{
	  WSACleanup();
	  return 1;
	}
        return 0;
Olen includettanut windows.h:n ja linkannut ws2_32.lib:n, sekä tuo wsadata on alustetta "WSADATA wsadata;". Kääntäjä on Visual C++ 2005 Express Edition.

User avatar
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: C++ -kysymykset

Post by jannepelaa » Fri Oct 05, 2007 7:38 pm

VC++ 2005 EE ei löydä windows.h:ta. Mikä vikana? Outputin teksti:

Code: Select all

------ Build started: Project: SimpleSample, Configuration: Debug Win32 ------
Compiling...
dxstdafx.cpp
c:\program files\microsoft directx sdk (april 2007)\samples\c++\common\dxstdafx.h(45) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
Build log was saved at "file://c:\Program Files\Microsoft DirectX SDK (April 2007)\Samples\C++\Direct3D\SimpleSample\Debug\BuildLog.htm"
SimpleSample - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

User avatar
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii » Fri Oct 05, 2007 9:56 pm

jannepelaa wrote:VC++ 2005 EE ei löydä windows.h:ta. Mikä vikana? Outputin teksti:

Code: Select all

------ Build started: Project: SimpleSample, Configuration: Debug Win32 ------
Compiling...
dxstdafx.cpp
c:\program files\microsoft directx sdk (april 2007)\samples\c++\common\dxstdafx.h(45) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
Build log was saved at "file://c:\Program Files\Microsoft DirectX SDK (April 2007)\Samples\C++\Direct3D\SimpleSample\Debug\BuildLog.htm"
SimpleSample - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Asenna Platform SDK. Lue asennus ohje Visual Studion sivulta.

User avatar
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda » Mon Oct 08, 2007 12:46 pm

jabanii wrote:Olen alkanut opettelemaan sokettejen käyttöä, mutta WSAStartup ei toimi jostain syystä.

Kääntäjä ei valita mitään, mutta kun laitan seuraavan koodin, niin funktio palauttaa 1.

Code: Select all

	if(WSAStartup(MAKEWORD(2,2), &wsadata)==SOCKET_ERROR)
	{
	  WSACleanup();
	  return 1;
	}
        return 0;
Olen includettanut windows.h:n ja linkannut ws2_32.lib:n, sekä tuo wsadata on alustetta "WSADATA wsadata;". Kääntäjä on Visual C++ 2005 Express Edition.
Katso mikä paluuarvo WSAStartupilta tulee: http://msdn2.microsoft.com/en-us/library/ms742213.aspx
Huomaan myös että olet linkannut winsockin versiota 2.32 vasten (ws2_32.lib), mutta pyydät versiota 2.2 (WSAStartup(MAKEWORD(2,2)). Ehkä tuo vaikuttaa asiaan?
OoO

Post Reply