2010-01-14 7 views
1

besoin de se connecter le contenu de BUF à l'aide du Journalisation() ci-dessous le problème est que LogMethos accepte seulement "Const CString &"Comment créer un CString à partir d'un tableau de caractères?

char buf[1024]; 
strcpy(buf, cErrorMsg); 

// need to pass to LogMethod "buf" how do i do that? 
log.LogMethod(const CString &); 

Thans Rev

Reversed

+1

qu'est-ce que 'CString'? vous référez-vous à ATL/MFC? En C++, la chaîne standard est 'std :: string'. CString peut être n'importe quoi, par exemple une classe codée par un collègue dans votre base de code. –

+0

//log.LogDebug(CString(buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); Aucun des codes ci-dessus n'a fonctionné ... – Reversed

+0

Ensuite, le problème est ailleurs. Montrez-nous le code de 'LogMethod'. – avakar

Répondre

1

Si vous parlez de MFC CString, pour autant que je sache, il devrait avoir un constructeur non-explicite prenant TCHAR const *. En d'autres termes, ce qui suit devrait fonctionner.

log.LogMethod(buf); 

Si ce n'est pas le cas, veuillez poster le message d'erreur.

+0

aucune erreur ..... juste ne se connecte pas – Reversed

0
CString cs; 
cs = buf; 

log.LogMethod(cs) 
+0

aucune erreur ..... juste ne se connecte pas – Reversed

1
log.LogMethod(CString(buf)); 

Cela évitera le problème où le compilateur ne crée pas automatiquement l'objet CString à l'aide du constructeur approprié puisque l'argument est une référence (Il aurait si l'argument était un CString « simple »).

+0

Cela ne fait aucune différence si le paramètre est 'CString' ou' CString const & ', dans les deux cas, la conversion sera effectuée. Dans ce dernier cas, un temporaire sera créé et lié à la référence. – avakar

+0

Cela est vrai dans le cas général de conversion, cependant pour CString ce n'est pas vrai car le constructeur (qui accepte un char *) a été déclaré explicite, ce qui, sauf erreur, empêche le compilateur de choisir automatiquement pour de telles conversions. Cela dit, il fonctionne dans VS6 (où il n'est pas marqué explicitement) lorsque le CString & est const, mais il ne fonctionne pas dans VS2005 Motif: ne peut pas convertir « const char [5] » à « const CString » Constructeur pour la classe 'ATL :: CStringT ' est déclaré 'explicite' – Ruddy

+0

Je doute vraiment que Microsoft change l'explicite entre les versions, car il casserait beaucoup de code existant. En outre, la documentation (http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx) montre clairement que le constructeur n'est pas explicite. Etes-vous sûr de ne pas avoir essayé de compiler en Unicode en passant toujours 'char const *' en paramètre (ce qui déclencherait en effet le constructeur non-TCHAR explicite)? – avakar

Questions connexes