回 帖 发 新 帖 刷新版面

主题:<shlobj.h>使用出现问题,请教高手达淫

偶在使用<shlobj.h>头文件,编译时出现下列错误。。请高手帮助解决一下:)能解释一下原因就更好了

[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Error] shlobj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE'


偶的原代码如下:)
原码:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <shlobj.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
      LPITEMIDLIST pidl;
      LPMALLOC pShellMalloc;
      char szDir[MAX_PATH];

      if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
      {
             if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOPDIRECTORY,&pidl)))
             {
                 //如果成功返回TRUE

                 if(SHGetPathFromIDList(pidl,szDir))
                 {
                    Label1->Caption=szDir;
                 }
                 pShellMalloc->Free(pidl);
             }
             pShellMalloc->Release();
      }
}
//---------------------------------------------------------------------------

回复列表 (共1个回复)

沙发

多重定义了多个结构,可能在VCL.H中已经定义过了。你注释掉#include <shlobj.h>应该就过了

我来回复

您尚未登录,请登录后再回复。点此登录或注册