c++ - ResolveIt produces linker error
- "Heinz-Peter Nuettgens" <hnuettgens t-online.de> May 22 2001
- Jan Knepper <jan smartsoft.cc> May 22 2001
- "Walter" <walter digitalmars.com> May 22 2001
Hello, the following code sample, included in a larger project, produces the following linker result: sc main.c -cpp -Aa -r -J -mn -C -WA -ff -5 -a1 -c -g -gg -DHLDRIVER -D_DEBUG=1 -Ie:\prozess\iatinclu -Ie:\prozess\tasklib -Ie:\include -oe:\prozess\obj.tsk \main.obj link /CO /NOI /DE /PACKF /XN /NT /ENTRY:WinMainCRTStartup /BAS:4194304 /A:512 /RC :e:\prozess\obj.tsk\IATPROZ.RES PROCTRL.LNK Error: e:\prozess\obj.tsk\main.OBJ(main) (21233664): Symbol Undefined _IID_IPersistFile Warning: c:\sc\LIB\SHELL32.LIB(shguid) (21233664): MS Precompiled TYPES not supported Warning: c:\sc\LIB\SHELL32.LIB(shguid) (25636263): Unknown CV version, ignored Lines Processed: 141786 Errors: 1 Warnings: 2 Build failed Has someone (Jan or Walter :-)) ) an idea, what's going wrong here. I don't have the right conclusion. Thanks a lot Heinz-Peter Code sample: #include <shlobj.h> #include <shlguid.h> HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPSTR lpszPath) { HRESULT hres; IShellLink* psl; char szGotPath[MAX_PATH]; char szDescription[MAX_PATH]; WIN32_FIND_DATA wfd; *lpszPath = 0; // assume failure // Get a pointer to the IShellLink interface. hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *) &psl); if (SUCCEEDED(hres)) { IPersistFile* ppf; // Get a pointer to the IPersistFile interface. hres = psl->QueryInterface( IID_IPersistFile, (VOID **)&ppf); if (SUCCEEDED(hres)) { WCHAR wsz[MAX_PATH]; // Ensure that the string is Unicode. MultiByteToWideChar(CP_ACP, 0, lpszLinkFile, -1, wsz, MAX_PATH); // Load the shortcut. hres = ppf->Load(wsz, STGM_READ); if (SUCCEEDED(hres)) { // Resolve the link. hres = psl->Resolve(hwnd, 0); if (SUCCEEDED(hres)) { // Get the path to the link target. hres = psl->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH ); if( FAILED(hres) ) { } // Get the description of the target. hres = psl->GetDescription(szDescription, MAX_PATH); if( FAILED(hres) ) { } lstrcpy(lpszPath, szGotPath); } } // Release the pointer to the IPersistFile interface. ppf->Release(); } // Release the pointer to the IShellLink interface. psl->Release(); } return hres; }
May 22 2001
Heinz-Peter Nuettgens wrote:Hello, the following code sample, included in a larger project, produces the following linker result: sc main.c -cpp -Aa -r -J -mn -C -WA -ff -5 -a1 -c -g -gg -DHLDRIVER -D_DEBUG=1 -Ie:\prozess\iatinclu -Ie:\prozess\tasklib -Ie:\include -oe:\prozess\obj.tsk \main.obj link /CO /NOI /DE /PACKF /XN /NT /ENTRY:WinMainCRTStartup /BAS:4194304 /A:512 /RC :e:\prozess\obj.tsk\IATPROZ.RES PROCTRL.LNK Error: e:\prozess\obj.tsk\main.OBJ(main) (21233664): Symbol Undefined _IID_IPersistFile
I am not sure, but I think this one resides in UUID.LIB. So, include UUID.LIB into your project.Warning: c:\sc\LIB\SHELL32.LIB(shguid) (21233664): MS Precompiled TYPES not supported
This is weird.Warning: c:\sc\LIB\SHELL32.LIB(shguid) (25636263): Unknown CV version, ignored
And so is this. Are you sure you didn't overwrite these files? Don't worry, be Kneppie! Jan
May 22 2001
I tried it, and it compiles and links without error. I suggest that perhaps your library files have been corrupted or the wrong ones are being linked in. -Walter P.S. I compiled with the following command: sc test.cpp -cpp -Aa -r -J -mn -C -WA -ff -5 -a1 -c -g -gg -DHLDRIVER -D_DEBUG= 1 Heinz-Peter Nuettgens wrote in message <9edk1n$nq0$1 digitaldaemon.com>...Hello, the following code sample, included in a larger project, produces the following linker result: sc main.c -cpp -Aa -r -J -mn -C -WA -ff -5 -a1 -c -g -gg -DHLDRIVER -D_DEBUG=1 -Ie:\prozess\iatinclu -Ie:\prozess\tasklib -Ie:\include -oe:\prozess\obj.ts
\main.obj link /CO /NOI /DE /PACKF /XN /NT /ENTRY:WinMainCRTStartup /BAS:4194304 /A:512 /RC :e:\prozess\obj.tsk\IATPROZ.RES PROCTRL.LNK Error: e:\prozess\obj.tsk\main.OBJ(main) (21233664): Symbol Undefined _IID_IPersistFile Warning: c:\sc\LIB\SHELL32.LIB(shguid) (21233664): MS Precompiled TYPES
supported Warning: c:\sc\LIB\SHELL32.LIB(shguid) (25636263): Unknown CV version, ignored Lines Processed: 141786 Errors: 1 Warnings: 2 Build failed Has someone (Jan or Walter :-)) ) an idea, what's going wrong here. I don't have the right conclusion. Thanks a lot Heinz-Peter Code sample: #include <shlobj.h> #include <shlguid.h> HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPSTR lpszPath) { HRESULT hres; IShellLink* psl; char szGotPath[MAX_PATH]; char szDescription[MAX_PATH]; WIN32_FIND_DATA wfd; *lpszPath = 0; // assume failure // Get a pointer to the IShellLink interface. hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *) &psl); if (SUCCEEDED(hres)) { IPersistFile* ppf; // Get a pointer to the IPersistFile interface. hres = psl->QueryInterface( IID_IPersistFile, (VOID **)&ppf); if (SUCCEEDED(hres)) { WCHAR wsz[MAX_PATH]; // Ensure that the string is Unicode. MultiByteToWideChar(CP_ACP, 0, lpszLinkFile, -1, wsz,
// Load the shortcut. hres = ppf->Load(wsz, STGM_READ); if (SUCCEEDED(hres)) { // Resolve the link. hres = psl->Resolve(hwnd, 0); if (SUCCEEDED(hres)) { // Get the path to the link target. hres = psl->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH ); if( FAILED(hres) ) { } // Get the description of the target. hres = psl->GetDescription(szDescription, MAX_PATH); if( FAILED(hres) ) { } lstrcpy(lpszPath, szGotPath); } } // Release the pointer to the IPersistFile interface. ppf->Release(); } // Release the pointer to the IShellLink interface. psl->Release(); } return hres; }
May 22 2001