Fonction _T();

[Résolu]
Signaler
Messages postés
27
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
13 juillet 2009
-
Messages postés
27
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
13 juillet 2009
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Les mystères de l'interprété....

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

ciao...
BruNews, MVP VC++
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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]
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Surement que tu compiles en UNICODE.

ciao...
BruNews, MVP VC++
Messages postés
27
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
13 juillet 2009

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 ?
Messages postés
27
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
13 juillet 2009

pourrais-tu m'expliquer comment linker shell32.lib? stp
Messages postés
27
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
13 juillet 2009

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 !!