_In_ DWORD dwCmpFlags,
_In_NLS_string_(cchCount1) PCNZWCH lpString1,
_In_ int cchCount1,
_In_NLS_string_(cchCount2) PCNZWCH lpString2,
_In_ int cchCount2
);
这个函数对两个字符串进行比较。CompareString的第一个参数指定一个区域设置ID(locale ID, LCID),这是一个32位值,用来标识一种语言。CompareString使用这个LCID来比较两个字符串,具体做法是检查字符在一种语言中的含义。以符合当地语言习惯的方式来比较,得到的结果对最终用户来说更有意义。不过,这种比较要比基于序数的比较(ordinal comparison)慢。可以调用Windows函数GetThreadLocale来得到主调线程的LCID:
LCID GetThreadLocale();
CompareString的第二个参数是一组标志,这些标志用于修改函数在比较字符串时采用的方法NORM_IGNORECASE
LINGUISTIC_IGNORECASE
忽略大小写
NORM_IGNOREKANATYPE
不区分平假名和片假名字符
NORM_IGNORENONSPACE
LINGUISTIC_IGNOREDIACRITIC
忽略non-spacing字符(译者注:non-spacing字符通常是一些读音符号)
NORM_IGNORESYMBOLS
忽略符号
NORM_IGNOREWIDTH
不区分同一个字符的单字节和双字节形式
SORT_STRINGSORT
标点符号当成符号来处理
CompareString
2、CompareStringOrdinal(为了比较编程类的字符串(如路径名、注册表项/值、XML元素/属性等等),应该使用这
例:
LCID id = GetThreadLocale();
const TCHAR* coma = _T("测试good");
const TCHAR* comb = _T("测试good");
int nRet = CompareString(id, NORM_IGNORECASE, coma, -1, comb, -1);
int nRet1 = CompareStringOrdinal(coma, -1, comb, -1, TRUE);
CompareString和CompareStringOrdinal函数的返回值有别于C运行库的*cmp字符串比较函数的返回值。CompareString(Ordinal)返回0表明函数调用失败,返回CSTR_LESS_THAN(定义为1)表明pString1小于pString2,返回CSTR_EQUAL(定义为2)表明pString1等于pString2,返回CSTR_GREATER_THAN(定义为3)表明pString1大于pString2。为方便起见,如果函数成功,你可以从返回值中减去2,使结果值与C运行库函数的结果值(-1,0和+1)保持一致。