Nous avons besoin de passer un format _TCHAR chaîne *, et un certain nombre de char * les chaînes en fonction avec args longueur variable:Comment puis-je convertir de _TCHAR * en char * lors de l'utilisation d'arguments C++ de longueur variable?
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
Ainsi, il peut être appelé comme ceci:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Évidemment, une solution simple serait d'utiliser _TCHAR au lieu de char, mais nous n'avons malheureusement pas ce luxe.
Nous devons utiliser avec va_start, etc afin que nous puissions mettre en forme une chaîne:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Malheureusement nous ne pouvons pas utiliser parce qu'il nous donne cette erreur:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
Je pense nous devons convertir notre char * en _TCHAR * - mais comment?
si vous avez le luxe d'utiliser un wchar * au lieu d'un char *, je pense que cela vous résoudre problème –
Hmm, malheureusement pas - le système actuel est un méli-mélo de char * et _TCHAR * –
c'est trop mauvais ... l'efficacité est-elle un problème? si non, jetez un oeil à ma réponse, cela a fonctionné pour moi –