Interface: Такую dll вы можете сделать только для своего какого-то конкретного продукта и распространять вместе с ним. Но другие разработчики не смогут воспользоваться вашей dll в своих продуктах, пока они не купят соответствующую лицензию на Delphi. Т.е. работает схема "Разработчик с лицензией -> Пользователь ПО", но не "Разработчик с лицензией -> Разработчик без лицензии -> Пользователь".
uvelichitel: Имеет - fail2rest написан на go и в зависимостях там ещё пара либ этого же автора, в том числе и fail2go, которая как раз и зависит от sqlite3.
SquareWheel: Могу посоветовать вам попросить у автора этой штуки готовый бинарник для linux.
abcd0x00: Да, но это же не тех-задание и я не не подписывался сделать топикстартеру "хорошо". Просто подсказал, в каком направлении нужно двигаться - проблема-то не в больших/маленьких буквах, а в том, как строку в бинарь закодировать. Плюс, в реальной задаче ему может и lowercase сгодится.
abcd0x00: Ну, понятие красивости - относительное. Мне, например, такие функциональные однострочники не очень нравятся, а для топикстартера, подозреваю, так там вообще чёрная магия творится :)
Yippee-ki-yay: Вы ищете язык чтобы решить проблему или научиться программировать? На Delphi решить проблему проще всего. Но учить его чтобы потом найти работу, тут да, это не лучший вариант. Тут вперёд вырывается java, но для вашей задачи, наверное не лучшее решение - десктопный гуй + портативность, это не совсем про неё. А вот для Андроида, она в самый раз. Тут C# и рядом не стоял.
KashurinS: Это же консольное приложение и мы просто перенаправляем его вывод в PIPE, ну и читаем этот PIPE по мере поступления информации. Дальше вам остаётся только распарсить полученный текст.
Хотя, гораздо лучше, взять какой-нибудь компонент для работы с архивами, типа Abbrevia и читать cab без этих извращений с консольными утилитами.
starkdm: Берите дебагер и смотрите, что происходит в коде при выполнении каждой строчки. Какие переменные изменяются и т.д. Потом читайте хелп по ВСЕМ функциям, которые вызываются в коде, чтобы было полное понимание зачем и почему.
> что делает Offset.QuadPart = ClusterSize * Clusters[r]; ?
Вычисляет смещение конкретного кластера.
> lstrcat(Name, "\\config\\SAM"); ?
Совместно с функцией GetSystemDirectory() генерируется имя входного файла. Что делает функция lstrcat понятно? Если нет - гуглите, там про такое пишут.
> free(Clusters); ?
Освобождает память, выделенную в функции GetFileClusters(). Только у вас зачем-то закомментировано выделение памяти и соответственно всё плохо.