Fonction _T();

Résolu
cs_d4M13N Messages postés 27 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 13 juillet 2009 - 8 mars 2009 à 13:41
cs_d4M13N Messages postés 27 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 13 juillet 2009 - 9 mars 2009 à 00:04
Bonjour,

Je suis en train de faire un petit programme en C++ Application Windows Form sous Microsoft Visual Studio 2005.
Je suis bloqué sur une malheureuse chaîne de caractères, j'utilise la fonction ShellExecute qui admet comme paramètre "explore"
mais si je l'utilise tel quelle : ShellExecute(NULL, "explore", "C:\", NULL, NULL, SW_SHOWNORMAL); le compilateur me jette,
c'est pourquoi j'utilise la fonction _T() ce qui donne : ShellExecute(NULL, _T("explore"), _T("C:\"), NULL, NULL, SW_SHOWNORMAL);.
Mais je ne comprend pas pourquoi dans un programme en Console cela fonctionne contrairement à une application de type fenêtre avec laquelle j'obtiens des erreurs très étranges comme :

Erreur    2    error LNK2001: symbole externe non résolu "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z)    Test.obj

Si quelqu'un comprend cela merci de bien  vouloir m'aider !!

6 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
8 mars 2009 à 23:02
Les mystères de l'interprété....

Essaie de mettre:
#include <shellapi.h>
et de linker avec shell32.lib

ciao...
BruNews, MVP VC++
3
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
8 mars 2009 à 14:22
Yop,

montre nous le code ou tu l'utilises, perso je n'ai jamais eu d'erreur de link avec cette API, as-tu bien inclu ce qu'il fallait ? et aussi si c'est avec une application fenêtre pourquoi laisses-tu le handle à NULL ?

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
8 mars 2009 à 22:02
Surement que tu compiles en UNICODE.

ciao...
BruNews, MVP VC++
0
cs_d4M13N Messages postés 27 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 13 juillet 2009
8 mars 2009 à 22:45
Merci de vos réponses !
Le code ça donne ça :

private: System::Void explorerBaseToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
        {
            HWND hd;
            ShellExecute(hd, _T("explore"), _T("C:\"), NULL, NULL, SW_SHOWNORMAL);
        }

Avec ou sans la variable hd ça ne change rien, j'ai inclue : #include <stdio.h>
                                                                                       #include <stdlib.h>
                                                                                       #include <tchar.h>
                                                                                       #include <windows.h>
                                                                                       #include <shellapi.h>

Et le unicode où Multioctets ne change rien. Peut-être faut il que j'installe Visual Studio 2008 plutôt ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_d4M13N Messages postés 27 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 13 juillet 2009
8 mars 2009 à 23:37
pourrais-tu m'expliquer comment linker shell32.lib? stp
0
cs_d4M13N Messages postés 27 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 13 juillet 2009
9 mars 2009 à 00:04
Merci beaucoup j'ai inclue shell32.lib dans le fichier qui contient le main.

Ce qui donne :
#pragma comment(lib, "shell32.lib");

Et ça fonctionne parfaitement maintenant !!
0