2010-03-29 47 views
1

有一個名爲這是在<shlobj.h>聲明SHCreateShellItem的功能,但它一直#ifdef「立足與否_WIN32_IE大於或等於0x601(如果是D OUT ,那麼聲明就存在了)。但是,即使在包含<shlobj.h>之前定義_WIN32_IE0x601,MSVC++仍然抱怨SHCreateShellItem未聲明。嘗試使用SHCreateShellItem,有問題的#include

例如,我不能得到以下編譯:

#define _WIN32_IE 0x601 
#include <shlobj.h> 

int someFunction (LPITEMIDLIST parent, LPITEMIDLIST child) 
{ 
    HRESULT result; 
    IShellItem *shellObj; 

    result = SHCreateShellItem (parent, NULL, child, &shellObj); 
    if (SUCCEEDED(result)) 
    { 
     // do stuff 
    } 

    return SUCCEEDED(result); 
}

我需要以不同的方式來定義_WIN32_IE

+0

FWIW:這爲我編譯。 – Thomas 2010-03-29 07:57:00

+0

@Thomas:即使乾淨了,我仍然無法使用它。 – dreamlax 2010-03-29 07:58:23

+0

也完全適合我... – 2010-03-29 08:57:51

回答

1

_WIN32_IE通常是在你的stdafx.h文件中定義。你必須在那裏改變它。

+0

預編譯頭文件困境!謝謝你的幫助。 – dreamlax 2010-03-29 21:57:47

0

不要直接定義_WIN32_IE,與_WIN32_WINNT做它含蓄地(設置目標平臺的SDK包括)

#define _WIN32_WINNT 0x0600 
#include <windows.h> 
#include <shlobj.h> 
+0

感謝您的建議,但我仍然是同樣的交易,它沒有宣佈的功能。這個值是否在任何地方被隱式定義? – dreamlax 2010-03-29 09:42:18

+0

可能你的IDE項目設置預定義了這個常量?儘管在這種情況下可以預期代碼定義被覆蓋。 – Elemental 2010-03-29 10:44:19

+0

如果你在頭文件中定義了這些變量,那麼在包含頭文件之前(特別是在使用預編譯頭文件的情況下),總是存在包含windows.h的風險。 – 2010-03-29 14:02:08