VC++ ShellExecute problem.

0

Hejoo :>

Zacząłem bawić się troszeczke z Visual C++, i chciałem zrobić taki bajer, że po naciśnięciu na obrazek odpali mi się jakaś strona.
Więc stworzyłem sobie coś takiego

 
private: System::Void Logo_Click(System::Object^  sender, System::EventArgs^  e) 
		 {
			 ShellExecute(0, "open", "http://google.pl/", 0, 0, SW_SHOW);	 
		 }

Oraz oczywiście na samej górze mam dodane #include <windows.h> oraz <shellAPI.h> ;)

No... Ale oczywiście nie każdy jest idealny, i czasami sypią się błędy.. :P

 1>TeraLauncherCPP.obj : error LNK2028: unresolved token (0A000011) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) referenced in function "private: void __clrcall TeraLauncherCPP::Form1::Logo_Click(class System::Object ^,class System::EventArgs ^)" (?Logo_Click@Form1@TeraLauncherCPP@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>TeraLauncherCPP.obj : error LNK2019: unresolved external symbol "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z) referenced in function "private: void __clrcall TeraLauncherCPP::Form1::Logo_Click(class System::Object ^,class System::EventArgs ^)" (?Logo_Click@Form1@TeraLauncherCPP@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>C:\....\coś.exe : fatal error LNK1120: 2 unresolved externals

Próbowałem też pobawić się parametrami w funkcji ShellExecute

ShellExecute(handle, "open", "http://google.pl/", 0, 0, SW_SHOW);

No i wydaje się być lepiej, ale jednak nie jest idealnie :P
error C2065: 'handle' : undeclared identifier
Za wszelką pomoc stawiam mentalny browar :D

Pozdrawiam :>

0

Widzę, że ostro bawiłeś się ustawieniami projektu w Visual Studio (brak makra od Unicode, brak domyślnych libów, etc)

Stwórz nowy, nie zmieniaj w nim absolutnie nic i wklej ten sam kod.

0

Zmieniałem tylko gdzieś we właściwościach projektu z Unicode na Multi-Byte, bo gdzieś wyczytałem, że to może pomóc, ale jednak nie bardzo ;P
Teraz mam taki błąd

error C2664: 'ShellExecuteW' : cannot convert parameter 2 from 'const char [5]' to 'LPCWSTR'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
0

Postaw prefiks L przy każdym literale tekstowym. Albo jeszcze lepiej, zawrzyj je w makrze TEXT. W ten sposób, w zależności od ustawienia makra UNICODE odpowiedni prefiks zostanie dodany automatycznie.
ShellExecute(handle, TEXT("open"), TEXT("http://google.pl/"), 0, 0, SW_SHOW);

0

error C2065: 'handle' : undeclared identifier
Ten sam błąd już miałem wcześniej ;P
Btw. sorry że tak nubie, ale każdy kiedyś zaczynał :]

0

Btw. sorry że tak nubie, ale każdy kiedyś zaczynał :]

Niektórzy potrafili korzystać z dokumentacji i wyszukiwarki nawet na początku swojej zabawy z programowaniem. Prawdopodobnie ta nieumiejętność wynika z totalnego zlania na język angielski w szkole i poza nim. Możesz mieć pretensje tylko do siebie.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx
Jak mówi dokumentacja, pierwszy parametr jest opcjonalny i jeżeli nie chcesz, żeby uruchomiony program miał rodzica w postaci innego okna (a uruchamiając przeglądarkę na 99% tego nie chcesz) to przekazujesz NULL.

0

Próbowałem również z NULL,

LauncherCPP.obj : error LNK2028: unresolved token (0A00001F) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z) referenced in function "private: void __clrcall TeraLauncherCPP::Form1::linkRegister_LinkClicked(class System::Object ^,class System::Windows::Forms::LinkLabelLinkClickedEventArgs ^)" (?linkRegister_LinkClicked@Form1@LauncherCPP@@$$FA$AAMXP$AAVObject@System@@P$AAVLinkLabelLinkClickedEventArgs@Forms@Windows@4@@Z)
1>LauncherCPP.obj : error LNK2019: unresolved external symbol "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z) referenced in function "private: void __clrcall LauncherCPP::Form1::linkRegister_LinkClicked(class System::Object ^,class System::Windows::Forms::LinkLabelLinkClickedEventArgs ^)" (?linkRegister_LinkClicked@Form1@LauncherCPP@@$$FA$AAMXP$AAVObject@System@@P$AAVLinkLabelLinkClickedEventArgs@Forms@Windows@4@@Z)
1>C:\...\LauncherCPP.exe : fatal error LNK1120: 2 unresolved externals

Aha, znam angielski, ale jak ktoś początkujący widzi takie pojęcia jak "HWND", "HINSTANCE", "LPCTSTR" etc, to się trochę w głowie miesza ;P

0

Otwórz preferencje projektu i przejdź do Linker -> Input. Upewnij się, że w Additional dependencies jest shell32.lib.

0

Działa!, pięknie otwiera się nowa karta podaną stroną. Dziękuje (:.

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