Impossible de convertir l'argument 1 de 'const char [5]" à "LPCTSTR'
Je suis en utilisant ce codeproject: http://www.codeproject.com/Articles/10138/Voice-Recording-Playing-back-using-simple-classes
void CFisterDlg::OnRecord()
{
CString string;
m_RecButton.GetWindowText(string);
if(string == "Record")
{
StartRecordingToFile();
m_RecButton.SetWindowText("Stop");
}
else
{
StopRecordingToFile();
m_RecButton.SetWindowText("Record");
}
}
Mais j'ai cette erreur dans de nombreux endroits:
error C2664: 'void CWnd::SetWindowTextW(LPCTSTR)' : cannot convert argument 1 from 'const char [5]' to 'LPCTSTR'
Je pense qu'il a quelque chose à voir avec moi à l'aide de la dernière version de visual studio (2013).
C'est StackOverflow, pas de Grand Theft Auto: il n'y a pas de voler.
Il y a, et il est très mal vu. Voir La Méta.
Voir similar question. A la même solution que j'ai posté, mais j'ai reçu 3 downvotes. A obtenu d'aimer stackoverflow.
Vous avez accepté un très endommager réponse. Veuillez envisager de le changer.
Regardez Remy, troisième alinéa/bloc de code. Qui permettra de clarifier la raison.
Il y a, et il est très mal vu. Voir La Méta.
Voir similar question. A la même solution que j'ai posté, mais j'ai reçu 3 downvotes. A obtenu d'aimer stackoverflow.
Vous avez accepté un très endommager réponse. Veuillez envisager de le changer.
Regardez Remy, troisième alinéa/bloc de code. Qui permettra de clarifier la raison.
OriginalL'auteur Taurian | 2015-04-22
Vous devez vous connecter pour publier un commentaire.
SetWindowTextW()
prend un pointeur de caractère de la chaîne de données où votre chaîne de données se compose de caractères réguliers, mais votre fonction la plus probable s'attend à un chaîne unicode, de sorte que vous ne pouvez pas entrer types de chaînes directement. Vous avez besoin d'utiliserL"thisismystring"
C'est intéressant parce que j'ai reçu cette erreur plusieurs fois dans mon travail, et ont résolu en utilisant la solution, que j'ai fourni. Peut-être que c'est de la plate-forme, le mien Wec7 RTOS. Néanmoins, j'ai une solution que j'ai utilisé moi-même et ont vu dans d'autres œuvres. De même, vous pouvez référencer ceci qui va dans le détail le
SetWindowText
fonction et vous pouvez lire à ce sujet les détails de ce paramètre. je suis à l'aide de VS2008 et ont reçu cette erreur. Il n'est pas lié à VS version.Ce que je voulais dire, c'est un pointeur de caractère de la chaîne de données. I" réviser ma grammaire.
La deuxième édition réparé la réponse. Il confond toujours " unicode* avec caractère, mais cette confusion est près de mandat sur windows. -1 supprimé, +1 ajouté.
La réponse elle-même n'est pas mauvais, l'explication était cependant (et encore).
OriginalL'auteur Javia1492
Il existe deux types de chaînes brutes qui MSVC2013 interagit avec. Raw
char
chaînes de ressembler à"Hello"
.wchar_t
chaînes de ressembler àL"World"
.En outre, il y a un paramètre pour si votre projet est à l'aide de
wchar_t
ouchar
cordes. La macroTCHAR
élargit soitchar
ouwchar_t
, et la macro_T("some text")
étendra soit"some text"
ouL"some text"
en fonction de si votre projet est compilé pour utiliserchar
ouwchar_t
.Presque tous les API de windows prend une chaîne de caractère a une macro en l'enveloppant, la cartographie à un
char
version ou unewchar_t
version.Le but de tout cela était de rendre possible l'écriture d'une seule application, et de grand caractère conscient ou non.
La convention sur windows, c'est que étroit caractère
char
interfaces utiliser une page de code basé sur le système, et le caractère largewchar_t
interfaces utiliser l'UTF-16 caractères (le sous-ensemble de l'UCS-2 OS de l'avant W2K, et aucun système de police XP prend en charge les caractères en dehors de l'UCS-2 si j'ai lu l'article de wikipedia à droite).La fin de tout cela? Votre projet a été en quelque sorte mis à l'aide de l'échelle des chaînes de caractères. C'est une bonne chose, parce que ses caractères applications sont incapables de gérer quoi que ce soit d'autre que l'un de page de codes de caractères.
Donc votre étroite constantes de caractère générant des erreurs, comme les Api s'attend maintenant à l'échelle des constantes de caractère.
La solution facile est d'envelopper tous vos
"raw strings"
s dans_T("raw string")
la_T
macro. Lorsque vous utilisezchar const*
ou dans votre code, utilisez plutôtTCHAR const*
.Comprendre un système de faire de même avec
std::string
etstd::cout
et d'autreschar
en fonctionstd
et autres bibliothèques, ou lors de l'utilisation de ceux-ci ne sont pas interagir avec l'utilisateur et lorsque l'on parle de windows, utilisez leA
résilié interfaces pourchar
ouW
résilié fonctions de l'interface pourwchar_t
en fonction des chaînes.Il est rare de nos jours à jamais "aller retour" à
char
les interfaces basées sur windows, donc une approche serait de faire disparaître les macros et seulement d'interagir avec leW
interfaces directement. Vos chaînes sont tous devenus desL"wide character"
, votrestd
les trucs de tous lesstd::wstring
etc, et votre personnage variables sont touteswchar_t
. Ce n'est probablement pas considérées comme des bonnes pratiques.Enfin, il est à noter que la
char
etwchar_t
étroite et large en fonction des interfaces peut avoir plus d'unchar
ouwchar_t
par "caractère". Ce n'était pas vrai pour une étroite fenêtre lorsque toutes les fenêtres pris en charge a été uniquewchar_t
éléments de l'UTF-16, et multi-wchar_t
personnages sont relativement rares, donc beaucoup de code ne parvient pas à gérer cette possibilité._T()
etL""
fixer des OP solution, qui est qu'il a besoin. La Conversion de l'ordinaire char à wchar_t. Je ne vois pas comment c'est toute différente, que mon "nuisibles" réponse.OriginalL'auteur Yakk - Adam Nevraumont
Pour convertir un
const char *
à unLPCTSTR
type, ajouterL
avant laconst char *
, comme en soi:Vous pouvez aussi inexplicablement en fonte avec
_T
, comme suit:La
_T
macro vient de la " tchar de la bibliothèque, par conséquent, vous aurez besoin de#include <tchar.h>
si vous ne l'avez pas déjà fait.OriginalL'auteur AStopher
LPCTSTR
est un cstring opérateur. Je préconise de le faire dans tous vos appels verssetWindowTExt
_T()
va appeler le cast implicite directement si la fonction est connue du compilateur (ce Qui est le cas ici). Vous pouvez utiliserL""
ainsi, grâce à @Mgetzfor point._T()
plus, il suffit d'utiliserL""
En France il y a encore waaay plus windows 9X qu'alors, vous en pensez ! C'est pourquoi je préfère le point de sortir _T() de toute façon. Mais ouais, j'aurais mis les deux styles.
À l'aide de
_T
est bon pour la compatibilité, mais il est dépassé par les nouvellesL
.La façon dont ses dépassé en termes de compatibilité @cybermonkey ?
OriginalL'auteur Mekap
Essayez d'utiliser des Multi-octets codage des caractères dans les Paramètres de Projet à la place de l'Unicode.
En cas de VS2013, VS2015 vous devez télécharger et installer le MBCS library pour visual studio à partir de ce lien https://www.microsoft.com/en-us/download/confirmation.aspx?id=40770
OriginalL'auteur Aak
Essayer quelque chose comme cela:
OriginalL'auteur wshcdr