【发布时间】:2023-03-11 02:20:01
【问题描述】:
作为一名程序员,您可能不得不使用或创建某种字符串比较函数。通常,这些都很简单:
function compare(s1, s1) { return s1.toLowerCase() - s2.toLowerCase(); }
这适用于绝大多数情况。但是,Windows (XP 和更高版本) 对文件进行不同的排序——而且更好! -- 比一个糟糕的 ASCII 实现。
如何在自定义程序中创建原生 Windows 自然顺序排序的最小、完整和可验证示例?
我读到的所有内容都指向在shlwapi.dll 中使用StrCmpLogicalW 函数。那太棒了!但是如何在自定义 C/C++ 程序中使用这个函数呢?
我不对重新实现比较功能感兴趣。我已经看过this、this、this、this 和this。这些无疑是非常接近的近似值,但我只想在我的程序中链接或调用 Windows API 函数。
以下是我已经研究并尝试过的其他一些事情:
- 阅读documentation on
shlwapi.dllandStrCmpLogicalWfrom Microsoft - 找到从an earlier Q&A here on StackOverflow 发布的(据称)完整程序
- 为 C++ 和 C# 版本的 Visual Studio 2010 Express 编译几个小代码示例(
fatal error C1190: managed targeted code requires a '/clr' option...真的吗?) - 为 Visual Studio 2012 Express 编译几个小代码示例,因为一些文章说这将消除早先关于
/clr选项的编译错误,但只是得到了一堆不同的编译错误 - 尝试使用 MinGW 为 Eclipse C++ 编译几个小代码示例
当我第一次开始研究这个时,我想,“这只是 Windows API,这很容易!”我还没有想出任何语言的工作程序。
我从事 C/C++ 和 Unix/DOS/Windows shell 脚本编写已有很长时间了,使用 API 从未如此令人厌烦。微软,真丢脸。
另外,我已经阅读了关于 ASCII 排序的咆哮,但谢谢。这些包含一些肥沃的土壤,可以进行一些好的思考。
https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/
http://weblog.masukomi.org/2007/12/10/alphabetical-asciibetical/
【问题讨论】:
标签: c# c++ sorting winapi dllimport