ShellExecute problem z kompilacją

Odpowiedz Nowy wątek
2011-07-11 19:06
0

Witam mam oto taki kod którego nie mogę skompilować. Chciałbym wiedzieć dlaczego? A jak ktoś może to niech zamieści ten sam poprawiony kod. Będę bardzo wdzięczny. Dodam, że czytałem podobne tematy na forum i nic mi to nie dało. Proszę o nie dodawać odsyłaczy do innych stron. Jest to kod ze strony Microsoftu.

Problem:
-nie zadeklarowana zmienna handle,

Kompilator DEV C++

#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    HINSTANCE ShellExecute(
                           HWND hwnd,
                           LPCTSTR lpOperation,
                           LPCTSTR lpFile,
                           LPCTSTR lpParameters,
                           LPCTSTR lpDirectory,
                           INT nShowCmd
                           );
 
                           ShellExecute(handle, NULL, "C:\przykladowy_program.exe", NULL, NULL, SW_SHOWNORMAL);
 
    system("PAUSE");
    EXIT_SUCCESS;
}
 
edytowany 3x, ostatnio: kiep123, 2011-07-11 19:10
Do SuperNewbie z tym - _13th_Dragon 2011-07-12 03:27

Pozostało 580 znaków

2011-07-11 20:04
0

Wywal tą deklarację funkcji...
A błąd jak sama nazwa wskazuje jest spowodowany tym, że nie zadeklarowałeś zmiennej handle, która jest typu HWND.
Tu masz dokumentację tej funkcji: http://msdn.microsoft.com/en-[...]ry/bb762153%28v=vs.85%29.aspx , a tam napisane czym jest ten pierwszy paramter:

hwnd [in, optional]

    Type: HWND

    A handle to the parent window used for displaying a UI or error messages. This value can be NULL if the operation is not associated with a window

edytowany 3x, ostatnio: byku_guzio, 2011-07-11 20:05

Pozostało 580 znaków

2011-07-11 20:04
O_o
0

Nie odsyłać Cię do innych stron, tak? Ale ja chętnie bym Cię odesłał do jakiegoś tutoriala z podstawami, w chwili obecnej lekcje "zmienne" oraz "funkcje" ;)
W wywołaniu shellexecute jest przekazana zmienna "handle" która jak widać nie jest nigdzie zadeklarowana, zresztą to samo mówi kompilator. W dodatku masz instrukcję "Typ=metoda" co jakąś ciut krzywą ideą jest.
Przeczytaj sobie co się podaje w tym parametrze.
Na stronie Microsoftu na której brak tej herezji którą pokazałeś

Po drugie, gdyż to wyżej było tym pierwszym, NIE używaj Deva, nie chce mi się tłumaczyć dlaczego więc powiem "Dev to zło", zainstaluj sobie albo Code::Blocks albo Visual Studio.


O̾..͠o

Pozostało 580 znaków

2011-07-11 20:07
0

A po co ci najpierw deklaracja funkcji ShellExecute w main, a potem jej wywołanie?
Poza tym - kompilator ma tu rację - wywołujesz ShellExecute z parametrem "handle", którego nigdzie nie utworzyłeś.

Pozostało 580 znaków

2011-07-12 09:08
#include <windows.h>
int main()
{
  ShellExecute(0, "open", "www.google.pl" , "" , "" , SW_MINIMIZE);
  return 0;
}

Pozostało 580 znaków

2011-07-12 09:31
0

Chłopie wrzuciłeś deklarację funkcji (i to bibliotecznej) w maina i dziwujesz się czemu nie działa? Ucz się podstaw, a nie za WinAPI się bierzesz o_O

Pozostało 580 znaków

2011-07-12 15:10
0
Sarrus napisał(a)

Chłopie wrzuciłeś deklarację funkcji (i to bibliotecznej) w maina i dziwujesz się czemu nie działa? Ucz się podstaw, a nie za WinAPI się bierzesz o_O

Ale zauważ, że taka deklaracja jest dopuszczalna. Można dzięki temu ustawić domyślne wartości argumentów ważne w określonym bloku kodu


Pozostało 580 znaków

2011-07-12 18:20
kiep123
0

Shalom o to mi właśnie chodziło. Jesteś wielki. I tak wracjąc do poprzedniego posta jakiś koleś mi kazał uczyć się podstaw. To raczej mi nie trzeba ;). Po prostu uczę się sam bo mój nauczyciel od informatyki trochę się nie zna na C++. Przyznaję może wyszystkiego nie wiem, ale dodam od siebie grę kółko i krzyżyk (komputer losuje przypadkowe pola prowizoryczne rozwiązanie bo jestem na wakacjach i leżę na plaży :P). Piszcię co o niej sądzicie. A WinApi uczę się od 2 dni także nie miejcie pretensji, że jestem w tym zielony. Pozdro

Kompilator: Code::Block

 //Radosław Bednarczyk IIc V Liceum Ogolnokształcące im. Haliny Poświatowskiej w Elblągu
//tel: 695 283 272 
 
#include <iostream>
#include <cstdlib> // służy do użycia funkcji rand
#include <time.h>
 
using namespace std;
 
    // deklaracja zmiennych globalnych
 
    int w, k;  // w wiersz k kolumna podaje uzytkownik
    int tab[4][4]; // tablica matemetyczna to na niej sa wszystkie obliczenia
    char plansza[4][4]; // tablica wizualna posłuży nam do wyświetlenia planszy
    int licznik_wolnych_miejsc = 0; // zliczmy do niej wolne miejsca w tablicy matematycznej
    bool wygrana_gracz = false; // wartosc logiczna ustawona wstepnie na flase gry wygramy przyjmuje wartosc true
    bool wygrana_komputer = false; // gry komputer wygra przyjnie wartość true 
 
void wypelniam_plansze(void) // funkcja dzieki której wypelnimy plansze spacjami a tab zerami
{
     for(int w=1;w<=3;++w)
             for(int k=1;k<=3;++k)
             {
                     plansza[w][k] = ' ';
                     tab[w][k] = 0;// nie trzeba wypelniac zerami ponieważ jest to tablica globalna typu integer 
                                   // i sama automatycznie wypełnia się zerami ale to tak dla pewności
             }
} 
 
void rysuje_plansze(void) // funkcja rozrysowująca plansze 
{
     for(int w=1;w<=3;++w)
    {
            for(int k=1;k<=3;++k)
            {  
                      cout<<plansza[w][k];
                      if(k<=2) // chcemy tylko 2 rozdzielenia
                      cout<<" ł"; // ten znak wyswietli kreske
            }        
 
            if(w<=2) // chcemy tylko 2 kreski
            {        
                 cout<<'\n';
                 cout<<"--------";// rozdzielamy poziomy 
                 cout<<'\n';
            }
    }
}
 
void pobieram_wsp_gracz(void)// funkcja ktora pobiera wspolrzędne pola 
{   
    for(;;) // wykonuje się w kołko. Pętla zostanie przerwana gdy zostaną spełnione odpowiednie warunki
    {
        cout<<endl<<endl;   
 
        cout<<"Podaj nr wiersza: ";
        cin>>w; // wiersz
 
        cout<<"Podaj nr kolumny: ";
        cin>>k; // kolumna
 
        if(tab[w][k]==1 || tab[w][k]==2) // pole wstawione przez gracza w tab przyjmuje wart. 1 a przez komp. wart. 2 
        {                                // jezeli podamy wspolrzedne na ktorej znajduje się np 1. tzn, że pole jest zajęte przez 
                cout<<endl<<"  To pole jest zajete !"<<endl<<endl; // gracza itd i wyswietla komunikat
                cin.ignore();
        }
 
        else if(w>3 || k>3) // jeżeli podamy liczby wieksze nic 3 tzn. ,że wyszliśmy poza plansze a tak nie może być
        {
                cout<<endl<<"   Podales bledne pole !"<<endl<<endl;
                cin.ignore();
        }
 
        else if(tab[w][k]!=1 || tab[w][k]!=2 ) // nie wyjdzie z pętli dopuki nie dostanie odpowiednich wspołrzędnych
              break; // wszystko się zgadza więc wychodzimy z pętli
    }
    plansza[w][k] = 'X'; // planszy przypisujemy X i zamiast istniejącej tam spacji 
    tab[w][k] = 1; // oraz wart. 1 (gracz) dla tab mat. w to samo miejsce 
}
 
void pobieram_wsp_komputer(void) // funkcja odpowidająca za ruchy komputera
{
     srand(time(NULL)); // inicjacja losowania róznych pól
 
     int ruch_w; // zmienna która przyjmie wartość wylosowanego wiersza
     int ruch_k; // -||- kolumny
 
     for(;;) // pętelka nieskończona wyjdziemy z niej kiedy zostaną spełnione poniższe warunki
     {
         const int a = 1; // losujemy pola z
         const int b = 3; // przedziału <1;3>
 
         if(licznik_wolnych_miejsc == 1)// jezeli licznik wonych miejsc jest rowny jeden to wychodzimy z pętli
               break;              // ponieważ ostatni ruch ma komputer no chyba że użytkownik zajmie ostatnie pole
         do
         {
             ruch_w = a + rand() % (b-a+1);
             ruch_k = a + rand() % (b-a+1);
 
         }while(tab[ruch_w][ruch_k]==1 || tab[ruch_w][ruch_k]==2); // losujemy pole dópki będą inne niż te co są zajęte    
 
         break; // i wychodzimy                                     
     }
 
     plansza[ruch_w][ruch_k] = 'O'; // na planszy wstawiomy ZNAK O i podmieniamy go z istaejącą w tym miejscu spacją
     tab[ruch_w][ruch_k] = 2; // i zapisujemy ruch na planszy mat. o wartości 2 w wylosowanycm wolnym miejscu
} // więc jak już pewnie się domyśleliście jest to prowizoryczne rozwiązanie, ale jestem na wakacjach i nie wysilam się za bardzo :P
  // możena inny możejszy sposób zastosować
void sprawdzam(void)// funcja sprawdzająca czy ktoś wygrał
{
     if(tab[1][1]==1 && tab[1][2]==1 && tab[1][3]==1){wygrana_gracz = true;}; // jeżeli jedynka znajduje się na takich polach 
     if(tab[2][1]==1 && tab[2][2]==1 && tab[2][3]==1){wygrana_gracz = true;}; // to znczy że WYGRAŁ
     if(tab[3][1]==1 && tab[3][2]==1 && tab[3][3]==1){wygrana_gracz = true;};
     if(tab[1][1]==1 && tab[2][1]==1 && tab[3][1]==1){wygrana_gracz = true;};
     if(tab[1][2]==1 && tab[2][2]==1 && tab[3][2]==1){wygrana_gracz = true;};
     if(tab[1][3]==1 && tab[2][3]==1 && tab[3][3]==1){wygrana_gracz = true;};
     if(tab[1][1]==1 && tab[2][2]==1 && tab[3][3]==1){wygrana_gracz = true;};
     if(tab[1][3]==1 && tab[2][2]==1 && tab[3][1]==1){wygrana_gracz = true;};    
 
     if(tab[1][1]==2 && tab[1][2]==2 && tab[1][3]==2){wygrana_komputer = true;}; // jeżeli dwójka znajduję się na takich polach 
     if(tab[2][1]==2 && tab[2][2]==2 && tab[2][3]==2){wygrana_komputer = true;}; // tzn. ze komputer wygrał i zmienna wygrana 
     if(tab[3][1]==2 && tab[3][2]==2 && tab[3][3]==2){wygrana_komputer = true;}; // przyjmuje true KOMPUTER WYGRAŁ
     if(tab[1][1]==2 && tab[2][1]==2 && tab[3][1]==2){wygrana_komputer = true;};
     if(tab[1][2]==2 && tab[2][2]==2 && tab[3][2]==2){wygrana_komputer = true;};
     if(tab[1][3]==2 && tab[2][3]==2 && tab[3][3]==2){wygrana_komputer = true;};
     if(tab[1][1]==2 && tab[2][2]==2 && tab[3][3]==2){wygrana_komputer = true;};
     if(tab[1][3]==2 && tab[2][2]==2 && tab[3][1]==2){wygrana_komputer = true;};
 
     if(wygrana_gracz == true) // jeżeli wygrana gracza to wyświetli się kominikat poniżej
     {
                            cout<<endl<<endl<<"    BRAWO WYGRALES :D !"<<'\a'<<endl<<endl;
                            cin.ignore();
     }
 
     if(wygrana_komputer == true) // jeżeli wygrał komputer to wyświetli się kominikat poniżej
     {
                            cout<<endl<<endl<<"    PRZEGRALES 8( !"<<'\a'<<endl<<endl;
                            cin.ignore();
     }
 
     if(licznik_wolnych_miejsc == 0 && wygrana_gracz == false && wygrana_komputer == false) // remis jeżeli brak miejsc i nikt nie trafił 
     {                                                                                      // w odpowiedni ruch
                               cout<<endl<<endl<<"    REMIS !"<<'\a'<<endl<<endl;
                               cin.ignore();
     }
 
} 
 
int main()
{              cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
               cout<<'\t'<<"                     TIC TAC TOE"<<endl<<endl;
               cout<<'\t'<<"                 Push ENTER, to START "<<endl<<endl;
               cout<<'\t'<<"             Autor: Radek Bednarczyk (DYDOL)";
 
               cin.ignore();
 
               wypelniam_plansze();
 
    for(;;) // gramy dopuki nie padnie wygrana, przegrana lub remis
    {          
               system("CLS");// czyszczenie planszy
 
               licznik_wolnych_miejsc=0; // po każdym obiegu wstępnie przujmuje wartość zero, żeby się nie sumowały
 
               for(int w=1;w<=3;++w)
                 for(int k=1;k<=3;++k)
                   if(tab[w][k]==0)
                     ++licznik_wolnych_miejsc; // zliczamy ile jest jest wolnych miejsc w tab matematycznej
 
               rysuje_plansze(); // rysuje plansze
               sprawdzam(); // odrazu sprawdzamy czy ktos nie wygrał
 
               cout<<endl;
 
               if(wygrana_gracz==true || wygrana_komputer==true || licznik_wolnych_miejsc == 0 ){break;}; // i wychodzmy
 
               pobieram_wsp_gracz(); // pobieramy współrzędne gracza
               pobieram_wsp_komputer(); // -||- od kompiutera
    }
 
    cout<<endl;
 
    system("PAUSE"); // koniec
    EXIT_SUCCESS; 
}
 
Jeżeli działa to jak na samouka to brawo :) Dobrze że przesiadłeś się na CB bo teraz jak coś nie będzie działać to wina będzie Twoja a nie kompilatora ;p Ciut brzydko kod jest sformatowany, gdzieś na 4P jest chyba artykuł o ładnym formatowaniu kodu, zaglądnij i popraw ;) - O_o 2011-07-13 00:36
dlaczego dodałeś swoje dane? Jeszcze dostaniesz smsa z ofertą sprzedaży czyjegoś dziewictwa :x - O_o 2011-07-13 00:38
ta gra jest napisana przeze mnie i mi nie ubliżaj - kiep123 2011-07-13 01:16

Pozostało 580 znaków

2011-07-13 11:36
0

Problem rozwiązany proponuje usunąć temat ;)

W newbie same znikają po jakimś tam czasie nieaktywności ( a przynajmniej keidyś tak było ) - O_o 2011-07-13 11:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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