windows

en saa käännettyä tätä ohjelmaa,ja kääntäjäni sanoo:

--------------------Configuration: ikkuna - Win32 Debug--------------------
Compiling...
ikkuna.cpp
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(10) : error C2731: 'WinMain' : function cannot be overloaded
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(9) : see declaration of 'WinMain'
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(17) : error C2065: 'szOhjelmanNimi' : undeclared identifier
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(17) : error C2440: '=' : cannot convert from 'int' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(18) : error C2440: '=' : cannot convert from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(23) : error C2065: 'GetStockPbject' : undeclared identifier
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(23) : error C2440: '=' : cannot convert from 'int' to 'struct HBRUSH__ *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(39) : error C2660: 'GetMessageA' : function does not take 3 parameters
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(39) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.

ikkuna.obj - 8 error(s), 0 warning(s)

*********************************************
Tässä on itse ohjelma:



#include

//CALLBACK-funktion esittely
LONG CALLBACK IkkunaOhjelma(HWND, UINT, WPARAM, LPARAM) ;

char lpszOhjelmanNimi[] = "OmaOhjelma";

//Pääfunktio
int WINAPI WinMain(HANDLE hInst,HANDLE hPreInst,LPSTR lpszCmdLine,int nCmdShow)
{
   HWND hwnd;            //Ikkunan handle
   MSG msg;            //Viesti kenttä
   WNDCLASS omaluokka;      //Ikkunaluokka

   if (!hPreInst)
   {
      omaluokka.lpszClassName = szOhjelmanNimi;
      omaluokka.hInstance = hInst;
      omaluokka.lpfnWndProc = (WNDPROC) IkkunaOhjelma;
      omaluokka.hCursor = LoadCursor(NULL, IDC_ARROW);
      omaluokka.hIcon = NULL;
      omaluokka.lpszMenuName = NULL;
      omaluokka.hbrBackground = GetStockPbject (WHITE_BRUSH);
      omaluokka.style = CS_HREDRAW | CS_VREDRAW;
      omaluokka.cbClsExtra = 0;
      omaluokka.cbWndExtra = 0;
      if (RegisterClass (&omaluokka) == 0)
         return FALSE;
         }
      //Luo ikkuna
      hwnd =   CreateWindow ( szOhjelmanNimi,"Ikkuna",
            WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,
            hInst, NULL) ;
         
      ShowWindow (hwnd, nCmdShow);
      UpdateWindow (hwnd);

      while (GetMessage (&msg, NULL, 0 ))
      {
         TranslateMessage (&msg);
         DispatchMessage (&msg);
      }
      return TRUE;
   }

   //callback.funktio alkaa tästä
   LONG APIENTRY IkkunaOhjelma(HWND hwnd, UINT messg,
      WPARAM wParam, LPARAM lParam)
   {
      switch (messg)
      {
         case WM:CREATE:            //ikkuna luotu
          break;

         case WM_DESTROY:         //ikkuna tuhotaan
          PostQuitMessage (0);
          break;

         default:
          return (DetWindowProc (hwnd, messg, wParam, lParam));
      }
   return 0L;
}

         
81097
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

Ootko edes yrittänyt ekana tutkia tuota kirjoitusvirheiden osalta?

Äänestä
  • olen yrittänyt ja korjasinkin yhden virheen, mutta näitä en osanut

    Äänestä

  • aWW kirjoitti:

    olen yrittänyt ja korjasinkin yhden virheen, mutta näitä en osanut

    En jaksa tuosta alkaa etsimään kaikkia mahdollisia vikoja:)

    Mureakuhassa on ihan ok windows ohjelmointi tutoriaali. Ota valmis pohja täältä sen tiedän ainakin toimivan kun olen joskus kokeillut ;)
    http://cpp.mureakuha.com/

    Äänestä

  • minä kirjoitti:

    En jaksa tuosta alkaa etsimään kaikkia mahdollisia vikoja:)

    Mureakuhassa on ihan ok windows ohjelmointi tutoriaali. Ota valmis pohja täältä sen tiedän ainakin toimivan kun olen joskus kokeillut ;)
    http://cpp.mureakuha.com/

    täytyy hankkia BORLAND, mulla on nimittäin visual c 6. ja se käyttää eri callback.kutsua

    Äänestä

Tuossapa näin muutaman virheen (eikä edes kääntää nyt käytössä ;) )

// 1)
// WinMain funktion parametrina pitää antaa HINSTANCE ei (HANDLE), veikkaus!

// 2)
omaluokka.lpszClassName = szOhjelmanNimi;
// Pitäs olla: omaluokka.lpszClassName = lpszOhjelmanNimi;

// 4)
GetStockPbject
// pitäis kirjoittaa varmaanki (HBRUSH)GetStockObject(WHITE_BRUSH);

// 5) GetMessage funktiolle menee 4 parametria
// while (GetMessage (&msg, NULL, 0, 0 ))

Muista virheistä vaikee sanoa, koska en näe rivinumeroita.

Tätä virheenmetsästystä kannattas harjoitella, sillä sitä ohjelmoinnissa piisaa &)

Äänestä
  • Uudempien kääntäjien mukana on muuttunut tuo windows määrittely, joten joutuu muuttamaan noita vanhoja malleja...toisaalta haluatko oikeasti lähteä rakentamaan puhtaan win apin päälle ilman luokkakirjastoja ?

    Mikäli niin otappa pezoltin paksu oopus käyttöön, löytyy myös suomenkielisenä ja kopsaa sieltä malli miten winmain toteutetaan. http://www.charlespetzold.com/ esim: Programming Windows ja sen käännökset.

    ja tietysti netti on täynnä mallisuorituksia winmainin osalta, esim tässä:
    http://www.cprogramming.com/tutorial/gl4.html

    Äänestä

En ole koodannut C:tä valovuosiin, mutta tässä ois pari arvausta nyt ihan noiden virheiden perusteella.

"C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(10) : error C2731: 'WinMain' : function cannot be overloaded "

WinMain-funktiota ei voi ylikuormittaa. Yrität siis käyttää sitä niin, että jokin parametri puuttuu tai sulla on niitä liikaa/väärän tyyppisiä.

Jos funktio on tyyppiä:

void blaaBlaa(int i, String str, char a)

niin ei sitä voi käyttää näin

int keke = blaaBlaa("JIPPII")

"C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(17) : error C2065: 'szOhjelmanNimi' : undeclared identifier "

Sulla ei oo tuon nimistä muuttujaa esiteltynä. Kirjoitusvirhe siis.

Sitte nämä cannot convert from blaablaa to blaablaa.

Yrität castata tietotyypistä toiseksi niin, että se ei ole mahdollista. Osassa näyttää olevan vielä kirjoitusvirheitäkin.

intistä yrität castata voidiksi tai pointeriksi tai const charriksi.

Johtuu varmaan noista omaluokka.jotain = jotainMuuta

Eli omaluokka.jotain on vaikka tyyppiä int ja yrität siihen laittaa jollain funktiolla jotain muuta päälle.

Esmes jos omaluokka.lpszClassName on tyyppiä const char (ei siis voi muuttaa), niin ei siihen päälle voi viedä mitään uutta nimeä. Const == ei saa muuttaa

"'GetStockPbject' : undeclared identifier "

Oisko ehkä GetStockObject?

"cannot convert from 'int' to 'struct HBRUSH__ *' "

Taas sama tilanne ku aikaisemmissa. Sulla on joku muuttuja tyyppiä int ja yrität laittaa siihen structia päälle tms. Sun pitää kattoa mitä noi funktiot oikeen palauttaa.

"C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(39) : error C2660: 'GetMessageA' : function does not take 3 parameters "

No mitä siinä lukee? Funktio ei ota kolmea parametriä. Kuitenki käytät sitä kolmella parametrilla.

GetMessage (&msg, NULL, 0 ))

Noista ika moni ratkee nyt sillä, että eka katot miten tuolla omaluokassa on muuttujat määritelty.

Eli jos omaluokka.luku on tyyppiä int, niin ei voi käyttää jotain

omaluokka.luku = palautaString("ekeke");

jos tuo metodi palauttaa stringin tms.

Eikä välttämättä toimi edes suorat castaukset

omaluokka.luku = (int)palautaString("keke");

jos kääntäjä ei tollasta castausta osaa tehdä.

Pari virhettä lähtee heti, kun tarkistat oikeinkirjoituksen.

Kannattaa käyttää jotain sovelluskehitintä, joka huutaa heti jostain kirjoitusvirheistä.

Äänestä

Kommentoi aloitusta


tuntematon kirjoitti:

en saa käännettyä tätä ohjelmaa,ja kääntäjäni sanoo:

--------------------Configuration: ikkuna - Win32 Debug--------------------
Compiling...
ikkuna.cpp
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(10) : error C2731: 'WinMain' : function cannot be overloaded
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(9) : see declaration of 'WinMain'
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(17) : error C2065: 'szOhjelmanNimi' : undeclared identifier
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(17) : error C2440: '=' : cannot convert from 'int' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(18) : error C2440: '=' : cannot convert from 'void *' to 'struct HINSTANCE__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(23) : error C2065: 'GetStockPbject' : undeclared identifier
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(23) : error C2440: '=' : cannot convert from 'int' to 'struct HBRUSH__ *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(39) : error C2660: 'GetMessageA' : function does not take 3 parameters
C:\Documents and Settings\Aleksander.ALLUNKONE\Työpöytä\c \ohjelmat\WINDOWS\ikkuna2\ikkuna.cpp(39) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.

ikkuna.obj - 8 error(s), 0 warning(s)

*********************************************
Tässä on itse ohjelma:



#include

//CALLBACK-funktion esittely
LONG CALLBACK IkkunaOhjelma(HWND, UINT, WPARAM, LPARAM) ;

char lpszOhjelmanNimi[] = "OmaOhjelma";

//Pääfunktio
int WINAPI WinMain(HANDLE hInst,HANDLE hPreInst,LPSTR lpszCmdLine,int nCmdShow)
{
   HWND hwnd;            //Ikkunan handle
   MSG msg;            //Viesti kenttä
   WNDCLASS omaluokka;      //Ikkunaluokka

   if (!hPreInst)
   {
      omaluokka.lpszClassName = szOhjelmanNimi;
      omaluokka.hInstance = hInst;
      omaluokka.lpfnWndProc = (WNDPROC) IkkunaOhjelma;
      omaluokka.hCursor = LoadCursor(NULL, IDC_ARROW);
      omaluokka.hIcon = NULL;
      omaluokka.lpszMenuName = NULL;
      omaluokka.hbrBackground = GetStockPbject (WHITE_BRUSH);
      omaluokka.style = CS_HREDRAW | CS_VREDRAW;
      omaluokka.cbClsExtra = 0;
      omaluokka.cbWndExtra = 0;
      if (RegisterClass (&omaluokka) == 0)
         return FALSE;
         }
      //Luo ikkuna
      hwnd =   CreateWindow ( szOhjelmanNimi,"Ikkuna",
            WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,
            hInst, NULL) ;
         
      ShowWindow (hwnd, nCmdShow);
      UpdateWindow (hwnd);

      while (GetMessage (&msg, NULL, 0 ))
      {
         TranslateMessage (&msg);
         DispatchMessage (&msg);
      }
      return TRUE;
   }

   //callback.funktio alkaa tästä
   LONG APIENTRY IkkunaOhjelma(HWND hwnd, UINT messg,
      WPARAM wParam, LPARAM lParam)
   {
      switch (messg)
      {
         case WM:CREATE:            //ikkuna luotu
          break;

         case WM_DESTROY:         //ikkuna tuhotaan
          PostQuitMessage (0);
          break;

         default:
          return (DetWindowProc (hwnd, messg, wParam, lParam));
      }
   return 0L;
}

         

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu