3

Пишу инсталлятор, который, как принято, должен создавать ярлык на рабочем столе и группу в меню Пуск.

Находил в сети много вариантов одной и той же функции создания ярлыков, которая основывается на Shellapi. MinGW при компиляции кода с этой функцией выводит две ошибки:

  1. undefined reference to `CoCreateInstance@20'

  2. undefined reference to `IID_IPersistFile'

При этом в коде ничего не подчёркивая красным. Простой SHCreateShortcut() он тоже не понимает. Очень критична статическая компиляция!

Собственно вопрос: неужели кроме как через Шелл никак не создать ярлык? Нельзя ли просто WriteFile(..."Link.lnk"...), предварительно записав в переменную-буфер создаваемого файла нужные пути и наименования после определённой последовательности байт, которая отвечает за идентификацию параметров ярлыка? Если так можно, подскажите пожалуйста эти последовательности (маркеры). Или может есть другие пути создания ярлыков?

Arhadthedev
  • 11,528
Iceman
  • 2,303

1 Answers1

1

Видите ли, без Shell..., наверное, можно - как-то же MS это делают :)? только это будет сложно и непереносимо - теоретически формат может и поменяться.

У вас же, похоже, проблема просто в том, что к проекту не подключена нужная библиотека (насколько я помню, Shell32.lib).

Harry
  • 221,325
  • #pragma comment(lib,"Shell32.lib") и инклудами <Shobjidl.h> и <shlobj.h> не помогают. Как её подключить то? – Iceman Oct 23 '16 at 12:54
  • Ну, или параметром командной строки, или где-то в среде - тут вам должно быть виднее. Возможно, надо указать каталог для поиска библиотек, или указать к ней полный путь... – Harry Oct 23 '16 at 12:56
  • может как-то из консоли при помощи system(), или через batch-файл - при установке создать-выполнить-удалить? – Iceman Oct 23 '16 at 13:28