448
+ − 1 #include "win32.h"
+ − 2 #include "shlobj.h"
+ − 3
+ − 4 /* This part of the code must be in C because the C++ interface to COM
+ − 5 doesn't work. */
+ − 6
+ − 7 void
+ − 8 make_link_2 (char *exepath, char *args, char *icon, char *lname)
+ − 9 {
+ − 10 IShellLink *sl;
+ − 11 IPersistFile *pf;
+ − 12 WCHAR widepath [_MAX_PATH];
+ − 13
+ − 14 CoCreateInstance (&CLSID_ShellLink, NULL,
+ − 15 CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID *) & sl);
+ − 16 sl->lpVtbl->QueryInterface (sl, &IID_IPersistFile, (void **) &pf);
+ − 17
+ − 18 sl->lpVtbl->SetPath (sl, exepath);
+ − 19 sl->lpVtbl->SetArguments (sl, args);
+ − 20 sl->lpVtbl->SetIconLocation (sl, icon, 0);
+ − 21
+ − 22 MultiByteToWideChar (CP_ACP, 0, lname, -1, widepath, _MAX_PATH);
+ − 23 pf->lpVtbl->Save (pf, widepath, TRUE);
+ − 24
+ − 25 pf->lpVtbl->Release (pf);
+ − 26 sl->lpVtbl->Release (sl);
+ − 27 }