FindStringOrdinal 函数 (libloaderapi.h)

在另一个 Unicode 字符串中查找 (宽字符) Unicode 字符串,以便进行非语言比较。

语法

int FindStringOrdinal(
  [in] DWORD   dwFindStringOrdinalFlags,
  [in] LPCWSTR lpStringSource,
  [in] int     cchSource,
  [in] LPCWSTR lpStringValue,
  [in] int     cchValue,
  [in] BOOL    bIgnoreCase
);

参数

[in] dwFindStringOrdinalFlags

指定查找操作详细信息的标志。 这些标志互斥,FIND_FROMSTART为默认值。 应用程序只能指定其中一个查找标志。

含义
FIND_FROMSTART
搜索字符串,从字符串的第一个字符开始。
FIND_FROMEND
从字符串的最后一个字符开始,在反向方向搜索字符串。
FIND_STARTSWITH
测试以确定 lpStringValue 指定的值是否是 lpStringSource 指示的源字符串中的第一个值。
FIND_ENDSWITH
测试以确定 lpStringValue 指定的值是否是 lpStringSource 指示的源字符串中的最后一个值。

[in] lpStringSource

指向源字符串的指针,函数在其中搜索 lpStringValue 指定的字符串。

[in] cchSource

lpStringSource 指示的字符串的大小(以字符为单位,不包括终止 null 字符)。 应用程序通常必须指定正数或 0。 如果源字符串以 null 结尾,并且函数应自动计算大小,则应用程序可以指定 -1。

[in] lpStringValue

指向函数在源字符串中搜索的搜索字符串的指针。

[in] cchValue

lpStringValue 指示的字符串的大小(以字符为单位,不包括终止 null 字符)。 应用程序通常必须指定正数或 0。 如果字符串以 null 结尾,并且函数应自动计算大小,则应用程序可以指定 -1。

[in] bIgnoreCase

如果函数要执行不区分大小写的比较,则为 TRUE;否则为 FALSE。 比较不是语言运算,并不适合所有区域设置和语言。 它的行为类似于英语。

返回值

如果成功,则返回 lpStringSource 指示的源字符串中的从 0 开始的索引。 如果函数成功,则找到的字符串的大小与 lpStringValue 的值相同。 返回值为 0 表示函数在源字符串的开头找到匹配项。

如果函数不成功或找不到搜索字符串,则函数将返回 -1。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:

  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。
  • ERROR_SUCCESS。 操作已成功完成,但未产生任何结果。

注解

由于 FindStringOrdinal 提供二进制比较,因此它不会返回语言上适当的结果。 序号比较可能被误认为是英语排序行为。 但是,当字符因语言上微不足道的量而变化时,它找不到匹配项。 有关选择适当的 排序 函数的信息,请参阅排序。

与失败返回 0 的 NLS 函数不同,如果失败,此函数返回 -1。 成功后,它将返回从 0 开始的索引。 使用此索引有助于函数避免逐个错误和单字符缓冲区溢出。

此函数是为数不多的调用 SetLastError 的 NLS 函数之一,即使它成功也是如此。 它进行此调用,以在线程无法匹配搜索字符串时清除该线程中的最后一个错误。 这会清除 GetLastError 返回的值。

从 Windows 8 开始:FindStringOrdinal 在 Libloaderapi.h 中声明。 在Windows 8之前,它在 Winnls.h 中声明。

要求

要求
最低受支持的客户端 Windows 7 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 R2 [桌面应用 |UWP 应用]
目标平台 Windows
标头 libloaderapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

FindNLSString

FindNLSStringEx

处理应用程序中的排序

国家语言支持

国家语言支持函数