int main(int argc, char *argv[])
{
   SHFILEINFO sfi;
   memset(&sfi, 0, sizeof(sfi));
    
   SHGetFileInfo("a.txt",
   FILE_ATTRIBUTE_DIRECTORY,
   &sfi,
   sizeof(sfi),
   SHGFI_SMALLICON | SHGFI_SYSICONINDEX  | SHGFI_USEFILEATTRIBUTES
   );
   //if (sfi.hIcon) DestroyIcon(sfi.hIcon);
   printf("GetLastError()\t%d\n", GetLastError());
   
   SHGetFileInfo("a.txt",
   FILE_ATTRIBUTE_DIRECTORY,
   &sfi,
   sizeof(sfi),
   SHGFI_SMALLICON | SHGFI_SYSICONINDEX  | SHGFI_USEFILEATTRIBUTES
   );
   //if (sfi.hIcon) DestroyIcon(sfi.hIcon);
   printf("GetLastError()\t%d\n", GetLastError());   
              
   system("PAUSE");
   return EXIT_SUCCESS;
}第二次GetLastError()产生1008错误,2次都是调用同一个函数,为什么第二次调用
会产生错误????

解决方案 »

  1.   

      memset(&sfi, 0, sizeof(sfi));
    第二次再来一遍试试。
      

  2.   

    两次操作前sfi的值相同吗,感觉只有这里有可能了
    建议设断点查看比对调用函数前的值是否相同
      

  3.   

    SHGFI_USEFILEATTRIBUTES  表明可以不使用绝对路径 只要文件名合法就可以
      

  4.   

    memset后还是一样 即使另外声明一个SHFILEINFO变量
      

  5.   


    即使另外声明一个SHFILEINFO变量  还是会产生同样的错误
      

  6.   

    使用此函数前记得初始化COM库!