Задать вопрос
Pjeroo
@Pjeroo
Веб-разработчик

Как создать ярлык средствами winapi на C++?

Не выходит создать ярлык средствами winapi на C++. Код и ошибку привожу ниже. Подскажите пожалуйста что делать?
#pragma comment(lib, "Ole32.lib")
#include <iostream>
#include <shlobj.h>
#include <objidl.h>
#include <objbase.h>
#include <windows.h>
 
using namespace std;
 
int main()
{
 
    HRESULT hres;
    IShellLink *psl = NULL;
    IPersistFile *pPf = NULL;
 
    CoInitialize(NULL);
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink,reinterpret_cast<void**>(&psl));
    if (SUCCEEDED(hres))
    {
        psl->SetPath("C:\\test\\SmcServer.exe");
        psl->SetWorkingDirectory("C:\\test");
        psl->SetDescription("desc ololo");
        psl->SetArguments("");
        psl->SetShowCmd(SW_SHOWNORMAL);
 
        psl->QueryInterface(IID_IPersistFile, (void**)&pPf);
        pPf->Save(reinterpret_cast<LPCOLESTR>("C:\\test.ink"), true);
    }
 
    CoUninitialize();
    return 0;
}


14bf39b3a2ca452abfc552ab59df1b2f.PNG
  • Вопрос задан
  • 4375 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
я конечно в С не силен, но если бегло глянуть, что ругается также на 28 строку, в которой путь к ярлыку. ярлыки в форточках имеют расширение lnk, а не ink. попробуйте, может тут собака зарыта)
Ответ написан
Комментировать
peleron
@peleron
Веду кружки по робототехнике
Линковщик не находит реализаций указанных процедур - CoInitialize, CoCreateInstance и т.д.
1. Вариант: Вам надо в опции компилятора добавить пути к библиотеке Ole32.lib
Но насколько я понимаю, в случае с mingw компилятором статически вы не сможете прилинковать эту библиотеку, поэтому вариант 2 либо собирайте в Visual Studio
2. Сделайте динамическую компиляцию и во время запуска приложения подсуньте ему библиотеку Ole32.dll
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы