Оказывается, библиотеки DLL можно легко вызывать с помощью AutoIt или AutoHotKey.
Я перевел этот пост с форумов AutoIt в минимальный рабочий пример:
Func _StrCmpLogicalW($s1, $s2)
Return DllCall('shlwapi.dll', 'int', 'StrCmpLogicalW', 'wstr', $s1, 'wstr', $s2)[0]
EndFunc
А вот минимальный пример, извлеченный из этого архивного сообщения на форумах AutoHotkey :
_StrCmpLogicalW(s1, s2)
{
VarSetCapacity(ws1, StrLen(s1)*2+1,0), DllCall("MultiByteToWideChar", "UInt",0, "UInt",0, "UInt",&s1, "Int",-1, "UInt",&ws1, "Int",StrLen(s1)+1)
VarSetCapacity(ws2, StrLen(s2)*2+1,0), DllCall("MultiByteToWideChar", "UInt",0, "UInt",0, "UInt",&s2, "Int",-1, "UInt",&ws2, "Int",StrLen(s2)+1)
return DllCall("Shlwapi.dll\StrCmpLogicalW","UInt",&ws1,"UInt",&ws2)
}
Вот и все!Функция принимает два строки и возвращает -1/0/+1
, как и любая другая функция сравнения в мире.
Объедините это с алгоритмом сортировки (например, _ArrayMultiColSort()
, _ArrayCustomSort()
для AutoIt) и теперь вы можете Быстрая сортировка полных списков.
(Пожалуйста, не используйте Bubble Sort . Подумайте о детях.)