C++ 为什么可以';lnk图标是否正确显示?
C++ 为什么可以';lnk图标是否正确显示?,c++,api,shell,com,C++,Api,Shell,Com,我尝试使用IShellLink和IPersistFIle接口创建一个新的快捷链接文件。 通过调用IPersistFIle::save()完成lnk文件的保存后,我想在save函数返回后立即删除用于创建lnk的ico文件。但问题是lnk文件显示在空白页中,而不是我使用的图标。 如果保存后不调用deletefile(),lnk文件看起来是正确的。 我的问题是,保存lnk文件后,何时可以删除图标文件? PS:我试着睡觉,大约在删除文件前2秒,lnk看起来也很正确。 我的部分代码如下: hRes
我尝试使用IShellLink和IPersistFIle接口创建一个新的快捷链接文件。 通过调用IPersistFIle::save()完成lnk文件的保存后,我想在save函数返回后立即删除用于创建lnk的ico文件。但问题是lnk文件显示在空白页中,而不是我使用的图标。
如果保存后不调用deletefile(),lnk文件看起来是正确的。
我的问题是,保存lnk文件后,何时可以删除图标文件?
PS:我试着睡觉,大约在删除文件前2秒,lnk看起来也很正确。
我的部分代码如下:
hRes = pShellLink->QueryInterface(IID_IPersistFile,(LPVOID*)&pPerFile);
if (SUCCEEDED(hRes))
{
WCHAR wszLinkFile[MAX_PATH + 1] = {0};
#ifdef _UNICODE
StringCchCopy(wszLinkFile, sizeof(wszLinkFile) / sizeof(wszLinkFile[0]), lpszLinkFilePath);
#else
MultiByteToWideChar(CP_ACP, 0, lpszLinkFilePath, -1, wszLinkFile, MAX_PATH);
#endif
hRes = pPerFile->Save(wszLinkFile, TRUE);
pPerFile->Release();
}
pShellLink->Release();
::CoUninitialize();
DeleteFile(lpszIconPath);
您没有发布足够的代码,但方法名称为IShellLink::SetIconLocation() 位置 删除图标后,该位置不再有效
样板文件使用嵌入在可执行文件中的图标作为资源。但是,如果使用单独的.ico文件,则需要使其保持有效。您好,我用于创建lnk文件的图标是一个单独的.ico文件,IShellLink::SetIconLocation()中的参数是该ico文件的loaction。在保存lnk文件几秒钟后,我尝试删除ico文件,但没有刷新图标缓存,ico看起来是正确的,但是如果我通过SHChangeNotify(SHCNE_assocchange,SHCNF_FLUSHNOWAIT,0,0)刷新缓存,lnk文件将再次显示在空白页中。所以我认为这可能与图标缓存有关。我认为我非常明确。不要删除.ico文件。我现在知道了,谢谢汉斯。但我对不同的结果感到好奇。为什么我要保留ico文件,并在IShellLink::Save和lnk文件之后几秒钟将其删除,并且链接文件看起来正确?图标缓存不是用来备份已删除的图标的,它只是用来加快资源管理器的速度。它不在你的控制之下,你不能指望任何特定的行为或保证。谢谢你耐心的回答,汉斯