Tenemos que pasar una cadena de formato * _TCHAR, y una serie de char * cadenas en una función con argumentos de longitud variable:¿Cómo convierto de _TCHAR * a char * cuando utilizo args de longitud variable C++?
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
lo tanto se le puede llamar así:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Obviamente, una solución simple sería usar _TCHAR en lugar de char, pero desafortunadamente no tenemos ese lujo.
tenemos que utilizar esto con va_start, etc por lo que podemos dar formato a una cadena:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Desafortunadamente, no podemos utilizar esto porque nos da este error:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
estoy pensando necesitamos convertir nuestro char * a _TCHAR * - pero ¿cómo?
si usted tiene el lujo de usar un wchar * en lugar de un char *, creo que sería arreglar el problema –
Hmm, por desgracia, no - el sistema actual es una mezcla de lo char * y _TCHAR * –
Eso es muy malo ... ¿es la eficiencia un problema? si no, échale un vistazo a mi respuesta, funcionó para mí –