Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';lnk图标是否正确显示?_C++_Api_Shell_Com - Fatal编程技术网

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文件之后几秒钟将其删除,并且链接文件看起来正确?图标缓存不是用来备份已删除的图标的,它只是用来加快资源管理器的速度。它不在你的控制之下,你不能指望任何特定的行为或保证。谢谢你耐心的回答,汉斯