le dernier paramètre est un int donc DWORD non?
De tout façon je n'utilise pas mon DWORD, je fais un sizeof de mon chemin. (il y avait un petite erreur dans le code)
le dernier paramètre est un int donc DWORD non?
De tout façon je n'utilise pas mon DWORD, je fais un sizeof de mon chemin. (il y avait un petite erreur dans le code)
Je parle du SECOND paramètre, ici.
Edit: Ah, tu as corrigé depuis.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Y a un truc que je ne comprend pas.
Le code suivant ne fonctionne pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SHELLEXECUTEINFO lpExecInfo; TCHAR chemin[]=_T("\\Temp\\test.pdf"); memset(&lpExecInfo, 0, sizeof(SHELLEXECUTEINFO)); lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); lpExecInfo.lpFile = chemin; lpExecInfo.lpParameters = _T(""); lpExecInfo.lpDirectory = _T(""); lpExecInfo.lpVerb = _T("open"); lpExecInfo.nShow = SW_SHOWNORMAL; lpExecInfo.fMask = 0; lpExecInfo.hwnd = 0; lpExecInfo.hInstApp = 0; ShellExecuteEx(&lpExecInfo);
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
je pense que oui 3DArchi, mais le problème c'est que je n'ai pas :
Le chemin est contenu dans un CHAR[256] (enfaite c'est envoyer depuis une autre application). Donc je ne peux pas définir une variable contenant le chemin, je dois "convertir" ou rendre utilisable un char[256])"\\Temp\\test.pdf".
Code : Sélectionner tout - Visualiser dans une fenêtre à part TCHAR chemin[]=_T("\\Temp\\test.pdf");
Le problème, c'est que tu ne sais pas si TCHAR correspond à CHAR ou à WCHAR.
Tu devrais passer par un template :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 template<typename SourceT, typename DestinationT> struct convert; template<> struct convert<CHAR,CHAR>{ static bool DoIt( LPSTR pszSource, LPSTR pszDestination, DWORD dwDestSize ) { strncat(pszDestination,pszSource,dwDestSize-1); return true; } }; template<> struct convert<CHAR,WCHAR>{ static bool DoIt( LPSTR pszSource, LPWSTR pszDestination, DWORD dwDestSize ) { int iRet = MultiByteToWideChar( CP_ACP, 0, pszSource, -1, pszDestination, dwDestSize ); return ( 0 != iRet ); } }; // SHELLEXECUTEINFO lpExecInfo; TCHAR chemin[MAX_PATH]; CHAR Entree[255]; convert<CHAR,TCHAR>::DoIt(Entree,chemin,MAX_PATH); memset(&lpExecInfo, 0, sizeof(SHELLEXECUTEINFO)); lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); lpExecInfo.lpFile = chemin; lpExecInfo.lpParameters = _T(""); lpExecInfo.lpDirectory = _T(""); lpExecInfo.lpVerb = _T("open"); lpExecInfo.nShow = SW_SHOWNORMAL; lpExecInfo.fMask = 0; lpExecInfo.hwnd = 0; lpExecInfo.hInstApp = 0; ShellExecuteEx(&lpExecInfo);
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
J'ai tenté ceci également :
Rien ne se passe, la compilation est bonne, mais le pdf ne se lance pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 const char * szAscii="\\Temp\\test.pdf"; wchar_t * szUnicode; int len, i; len = strlen(szAscii); for(i=0;i<len+1;i++) *szUnicode++ = static_cast<wchar_t>(*szAscii++);
Une chaine de caractères ANSI (char *) ne peut pas se transformer en chaine de caractères Unicode (wchar_t *) à l'aide d'un simple cast comme tu le fais. Il faut obligatoirement passer par une fonction de transformation. La réciproque est vraie aussi (passage de Unicode à Ansi), il faut aussi utiliser une autre fonction, pas de cast sauvage, sinon, c'est souvent le crash.
Ceci dit, ton problème commence par le fait que tu ne sais pas le modèle que tu utilises (Unicode ou Ansi) et que tu essayes les fonctions et les paramètres un peu au hazard de ce que l'on déduit du peu d'information que tu donnes.
Donc est ce que tu peux faire une petite synthèse :
- Environnement de développement
- Plateforme de développement
- Plateforme cible (si différent de la plateforme de dev)
- Modèle utilisé (Unicode ou non unicode)
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Partager