Musimy zdać Format _TCHAR * łańcuch i liczbę char * ciągi do funkcji o zmiennej długości args:Jak przekonwertować z _TCHAR * na char * przy użyciu argumentów o zmiennej długości C++?
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
Tak można nazwać tak:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Oczywiście prostą poprawką byłoby użycie _TCHAR zamiast char, ale niestety nie mamy tego luksusu.
Musimy to wykorzystać z va_start itp więc możemy formatować ciąg:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Niestety nie możemy korzystać z tego, ponieważ to daje nam ten błąd:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
myślę musimy przekonwertować nasz znak * na _TCHAR * - ale jak?
jeśli masz luksus użyciu WCHAR * zamiast char *, myślę, że będzie naprawić Ci problemu –
Hmm, niestety nie - obecny system jest miszmasz z char * i _TCHAR * –
to źle ... czy wydajność jest problemem? jeśli nie, spójrz na moją odpowiedź, zadziałało dla mnie –