第一次将非unicode应用程序装入windows ce仿真器时,你会发现,许多正在使用的函数它都不支持,例如美国国家标准协会(ansi)定义的字符函数strcpy().这也许引诱你去链接windows nt 运行时间库,以便能解决所有问题.
2. 不要混淆tchars与bytes 【程序编程相关:浅析php中实现多线程~ 】
如果你是刚开始用windows ce编程,可能你能用的包含文件与库文件是明显的.答案就是,你不要采用那些在写普通win32或非windows ce程序时使用的包含文件与库文件. 【推荐阅读:关于PHP--session的问题集锦解】
tchar是定义为wchar_t还是char,取决于预处理器的符号unicode是否定义.同样,所有有关字符串处理函数的宏,如_tcsncpy宏,它是定义为unicode函数wcsncpy还是定义为ansi函数strncpy,取决于unicode是否定义. 【扩展信息:Linux下C语言编程[转载]】
如果你正在windows ce上写非unicode应用程序,你或许要将所有的字符串从单个字符(chars)转换为宽字符(widechars)(例如,c变量类型whcar_t).几乎所有windows ce支持的win32与运行时间库函数都要求宽字符变量.windows 95不支持unicode,然而,为了使程序代码具有可移植性,你要尽可能采用tchar.h中定义的tchar类型,不要直接使用wchar_t.
在现存的windows应用程序中,有些代码也许暗示字符长为单字节.这在给字符串分配内存时经常用到,例如:
int myfunc(char *p)
{ char *pszfilename;pszfilename = malloc(maxfilelen);
if(pszfilename) strncpy(pszfilename, p, maxfilelen); /*etc*/在这段代码中,分配的内存块应该写作(maxfilelen * sizeof(char)),但是大多数程序员喜欢将它简化为maxfilelen,因为对于所有的平台来说sizeof(char)的值等于1.然而,当你用tchars代替多个字符时,很容易忘记这种固有的概念,于是将代码编写成下面的形式:
int myfunc(tchar *p)
{ tchar *pszfilename;pszfilename = (tchar*)malloc(maxfilelen);
if (pszfilename) tcsncpy(pszfilename, p, maxfilelen); /*etc*/这是不行的.它马上会导致出错.这里的错误在于malloc函数中指定变量大小为bytes,然而_tcsncpy函数中使用的第三个变量却指定为tchars而不是bytes.当unicode被定义时,一个tchar等于两个字节数(bytes).
上述代码段应该改写为:
int myfunc(tchar *p)
{ tchar *pszfilename;... 下一页