2009-01-06 8 views
0

J'ai une classe qui attend un LPCTSTR.CFileImageLoader (LPCTSTR lpszFileName);

Quand j'appelle: nouvelle CFileImageLoader (_T ("Splash02.png")) OU nouvelle CFileImageLoader ("Splash02.png")

les deux ne fonctionnent pas. Pourquoi? Je suis nouveau à cpp ... Merci Jonathan d.

+0

En quoi ne fonctionnent-ils pas? Quel message d'erreur obtenez-vous? – ChrisN

+0

La question doit être clarifiée: cherchez-vous un moyen de convertir CString en LPCTSTR? – rec

+0

ne fonctionne pas ou ne compile pas? – Benny

Répondre

0

"les deux ne fonctionnent pas" - pourriez-vous être un minuscule, un petit peu plus spécifique?

Si vous compilez avec _UNICODE défini, alors le second ne devrait même pas compiler.

Vous transmettez simplement un nom de fichier, pas un chemin complet. Peut-être votre classe de chargeur d'image ne peut pas trouver le fichier car il utilise un chemin CWD différent comme vous le souhaitez. Essayez de passer le chemin complet à la place.

0
  1. Peut-être que votre bibliothèque d'images ne supporte pas l'ouverture de fichier de format PNG.
  2. Essayez plutôt de passer le chemin complet.
  3. Peut-être que vous avez besoin d'appeler des fonctions d'initialisation qui fournissent par votre bibliothèque d'images
1

Cette question est une combinaison des questions et des problèmes spécifiques de Windows C +. C++ définit deux types de chaînes, régulières et larges. C++ définit

Une chaîne régulière ressemble:

const char *str = "regular string"; 

alors qu'une grande chaîne ressemble:

const wchar_t *wstr = L"wide string"; 

Avec juste C++ standard, vous devez décider quand vous écrivez votre bibliothèque si vous souhaitez utiliser des chaînes régulières ou larges.

Windows a défini un pseudo-type appelé tchar. Avec TCHAR vous écrivez quelque chose comme:

LPCTSTR tstr = _T("regular or wide string"); 

Que ce soit en fait un régulier (char *) ou une chaîne large (wchar_t *) dépend si vous compilez votre code pour Unicode ou non.

Étant donné que la fonction est spécifiée en tant que LPCTSTR, elle doit être appelée avec le type approprié pour la façon dont vous compilez.

Si vous savez que vous ne construisez qu'avec ou sans support Unicode, vous pouvez ignorer tous les éléments TCHAR et utiliser directement wchar_t ou char. Comme CFileImageLoader("Splash02.png") ne fonctionne pas, vous devez compiler avec le support Unicode activé. Vous pouvez changer cela en CFileImageLoader(L"Splash02.png") et vous engager à toujours utiliser Unicode ou vous pouvez le changer en CFileImageLoader(_T("Splash02.png")) et laisser la magie des macros faire le travail.

Questions connexes