From: earnie_boyd AT yahoo DOT com (Earnie Boyd) Subject: Re: How to create shortcut? 11 May 1998 23:54:18 -0700 Message-ID: <19980511142741.35.rocketmail.cygnus.gnu-win32@send1b.yahoomail.com> Reply-To: earnie_boyd AT yahoo DOT com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii To: ai26 AT a400 DOT sternwarte DOT uni-erlangen DOT de, gnu-win32 AT cygnus DOT com Cc: michael AT sternwarte DOT uni-erlangen DOT de Did you build with the -lole32 library? IShell should be declared here; although as you have mentioned it doesn't exist in the import library. It is also not defined in the Structures.h file. You will need to find the defintions for IShell*. You will need to recreate the libole32.a import library with the IShell definitions. You will need to define the IShell in the Structures.h file. - \\||// ---o0O0--Earnie--0O0o---- --earnie_boyd AT yahoo DOT com-- ------ooo0O--O0ooo------- ---Michael Lemke wrote: > > This is not purely a gnuwin question but related: > > How do I create a shortcut for a file? I found the attached program > in one of the WIN32 API helpfiles but gcc doesn't like it. I also > could not find which library exports the IShell stuff. > > Is this the only way to make a shortcut? Looks extremely cumbersome to > me. Just to make it clear: I don't want a symbolic link but a real ..LNK > file. > > Anyway, here goes: > > #include > // CreateLink - uses the shell's IShellLink and IPersistFile interfaces > // to create and store a shortcut to the specified object. > // Returns the result of calling the member functions of the interfaces. > // lpszPathObj - address of a buffer containing the path of the object > // lpszPathLink - address of a buffer containing the path where the > // shell link is to be stored > // lpszDesc - address of a buffer containing the description of the > // shell link > > > HRESULT CreateLink(LPCSTR lpszPathObj, > LPSTR lpszPathLink, LPSTR lpszDesc) > { > HRESULT hres; > IShellLink* psl; > > // Get a pointer to the IShellLink interface. > hres = CoCreateInstance(&CLSID_ShellLink, NULL, > CLSCTX_INPROC_SERVER, &IID_IShellLink, &psl); > if (SUCCEEDED(hres)) { > IPersistFile* ppf; > > // Set the path to the shortcut target, and add the > // description. > psl->lpVtbl->SetPath(psl, lpszPathObj); > > psl->lpVtbl->SetDescription(psl, lpszDesc); > > // Query IShellLink for the IPersistFile interface for saving the > // shortcut in persistent storage. > hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, > &ppf); > > if (SUCCEEDED(hres)) { > WORD wsz[MAX_PATH]; > > // Ensure that the string is ANSI. > MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, > wsz, MAX_PATH); > > > // Save the link by calling IPersistFile::Save. > hres = ppf->lpVtbl->Save(ppf, wsz, TRUE); > ppf->lpVtbl->Release(ppf); > } > psl->lpVtbl->Release(psl); > } > return hres; > } > > > And that is what I get: > > BASH.EXE-2.01$ gcc shortc.c > shortc.c: In function `CreateLink': > shortc.c:16: `IShellLink' undeclared (first use this function) > shortc.c:16: (Each undeclared identifier is reported only once > shortc.c:16: for each function it appears in.) > shortc.c:16: `psl' undeclared (first use this function) > shortc.c:19: `CLSID_ShellLink' undeclared (first use this function) > shortc.c:20: `CLSCTX_INPROC_SERVER' undeclared (first use this function) > shortc.c:20: `IID_IShellLink' undeclared (first use this function) > shortc.c:22: `IPersistFile' undeclared (first use this function) > shortc.c:22: `ppf' undeclared (first use this function) > shortc.c:32: `IID_IPersistFile' undeclared (first use this function) > BASH.EXE-2.01$ > > > Thanks for ideas, > Michael > > -- > Michael Lemke > Sternwarte Bamberg, University of Erlangen-Nürnberg, Germany > (michael AT astro DOT as DOT utexas DOT edu or ai26 AT a400 DOT sternwarte DOT uni-erlangen DOT de) > - > For help on using this list (especially unsubscribing), send a message to > "gnu-win32-request AT cygnus DOT com" with one line of text: "help". > _________________________________________________________ DO YOU YAHOO!? Get your free @yahoo.com address at http://mail.yahoo.com - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".