C++ -kysymykset

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

C++ -kysymykset

Post by koodaaja »

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 »

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
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

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 »

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?
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii »

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 »

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ä?
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja »

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?
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: C++ -kysymykset

Post by jannepelaa »

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.
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii »

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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja »

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ä.
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii »

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.
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

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
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 »

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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja »

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
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 »

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)
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja »

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.
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii »

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.
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: C++ -kysymykset

Post by jannepelaa »

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 ==========
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: C++ -kysymykset

Post by jabanii »

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.
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

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