PDA

View Full Version : LNK2001 - Unresolved external (for Windows 7 Taskbar API)



naturalpsychic
2nd August 2011, 18:53
I am trying to implement Windows 7 Taskbar API into my Qt Application, compiling using Visual Studio 2008 - Qt Build 4.7.3

Following is my header file:

#ifndef WINAPI_H
#define WINAPI_H
#include <ShObjIdl.h>

#define DEFINE_GUID_(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}

typedef enum STPFLAG
{
STPF_NONE = 0,
STPF_USEAPPTHUMBNAILALWAYS = 0x1,
STPF_USEAPPTHUMBNAILWHENACTIVE = 0x2,
STPF_USEAPPPEEKALWAYS = 0x4,
STPF_USEAPPPEEKWHENACTIVE = 0x8
} STPFLAG;

typedef enum THUMBBUTTONMASK
{
THB_BITMAP = 0x1,
THB_ICON = 0x2,
THB_TOOLTIP = 0x4,
THB_FLAGS = 0x8
} THUMBBUTTONMASK;

typedef enum THUMBBUTTONFLAGS
{
THBF_ENABLED = 0,
THBF_DISABLED = 0x1,
THBF_DISMISSONCLICK = 0x2,
THBF_NOBACKGROUND = 0x4,
THBF_HIDDEN = 0x8,
THBF_NONINTERACTIVE = 0x10
} THUMBBUTTONFLAGS;

typedef struct THUMBBUTTON
{
THUMBBUTTONMASK dwMask;
UINT iId;
UINT iBitmap;
HICON hIcon;
WCHAR szTip[260];
THUMBBUTTONFLAGS dwFlags;
} THUMBBUTTON;
typedef struct THUMBBUTTON *LPTHUMBBUTTON;

typedef enum TBPFLAG
{
TBPF_NOPROGRESS = 0,
TBPF_INDETERMINATE = 0x1,
TBPF_NORMAL = 0x2,
TBPF_ERROR = 0x4,
TBPF_PAUSED = 0x8
} TBPFLAG;

DECLARE_INTERFACE_(ITaskbarList3, ITaskbarList2)
{
STDMETHOD (SetProgressValue) (THIS_ HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
STDMETHOD (SetProgressState) (THIS_ HWND hwnd, TBPFLAG tbpFlags) PURE;
STDMETHOD (RegisterTab) (THIS_ HWND hwndTab,HWND hwndMDI) PURE;
STDMETHOD (UnregisterTab) (THIS_ HWND hwndTab) PURE;
STDMETHOD (SetTabOrder) (THIS_ HWND hwndTab, HWND hwndInsertBefore) PURE;
STDMETHOD (SetTabActive) (THIS_ HWND hwndTab, HWND hwndMDI, DWORD dwReserved) PURE;
STDMETHOD (ThumbBarAddButtons) (THIS_ HWND hwnd, UINT cButtons, LPTHUMBBUTTON pButton) PURE;
STDMETHOD (ThumbBarUpdateButtons) (THIS_ HWND hwnd, UINT cButtons, LPTHUMBBUTTON pButton) PURE;
STDMETHOD (ThumbBarSetImageList) (THIS_ HWND hwnd, HIMAGELIST himl) PURE;
STDMETHOD (SetOverlayIcon) (THIS_ HWND hwnd, HICON hIcon, LPCWSTR pszDescription) PURE;
STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE;
STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE;
};
typedef ITaskbarList3 *LPITaskbarList3;

DECLARE_INTERFACE_(ITaskbarList4, ITaskbarList3)
{
STDMETHOD (SetTabProperties) (HWND hwndTab, STPFLAG stpFlags) PURE;
};
typedef ITaskbarList4 *LPITaskbarList4;
// {C9974F71-A8B2-4330-BCBE-1E8FD424E0B0}
DEFINE_GUID(CLSID_TaskbarList,
0xc9974f71, 0xa8b2, 0x4330, 0xbc, 0xbe, 0x1e, 0x8f, 0xd4, 0x24, 0xe0, 0xb0);
// {D47A0C40-8C32-4A51-9AAD-27C84C2A79FC}
DEFINE_GUID(IID_ITaskbarList3,
0xd47a0c40, 0x8c32, 0x4a51, 0x9a, 0xad, 0x27, 0xc8, 0x4c, 0x2a, 0x79, 0xfc);


#endif // WINAPI_H

But when I try to use this IDD_ITaskbarList3 macro in CoCreateInstance, instead of looking for IDD_ITaskbarList3 it looks for _IDD_ITaskbarList3 and gives me LNK2001 error,

I have even tried to write _IID_ITaskbarList3 after IID_ITaskbarList3 with different GUID but same issue


HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, (void**)&m_taskbarInterface);


above code is used for CoCreateInstance()

Any idea what is going on?