我有一些c ++代码需要集成到iOS应用程序中。 windows c ++代码使用tchar.h处理unicode。我为iOS做了以下定义:
#include <wchar.h>
#define _T(x) x
#define TCHAR char
#define _tremove unlink
#define _stprintf sprintf
#define _sntprintf vsnprintf
#define _tcsncpy wcsncpy
#define _tcscpy wcscpy
#define _tcscmp wcscmp
#define _tcsrchr wcsrchr
#define _tfopen fopen
当尝试构建应用程序时,其中许多要么丢失(例如wcscpy),要么有错误的参数。负责c ++代码的编码器说我应该使用char而不是wchar,所以我将TCHAR定义为char。有没有人知道如何做到这一点?
答案 0 :(得分:2)
TCHAR
(和FYI,在C运行时为_TCHAR
,TCHAR
用于Win32 API)的目的是允许代码在{{1}之间切换在编译时,或char
API,但您的定义是将它们混合在一起。 wchar_t
函数适用于wcs
,因此您需要将这些定义更改为wchar_t
对应项,以匹配您的其他基于char
的定义:
char
此外,您正在将#define _tcsncpy strncpy
#define _tcscpy strcpy
#define _tcscmp strcmp
#define _tcsrchr strrchr
映射到错误的C函数。它需要映射到_sntprintf
而不是snprintf()
:
vsnprintf()
#define _sntprintf snprintf
和snprintf()
的宣告方式截然不同:
vsnprintf()
这可能是你为什么会得到错误的论据&#34;错误。