为什么程序连接时报错
在学习SDK编程,此程序想实现托架功能,还没有写完.
问题:
1:编译没有错,可是连接时报错:
CreateTray.obj : error LNK2001: unresolved external symbol "int __stdcall Shell_NotifyIcon(unsigned long,struct _NOTIFYICONDATA *)" (?Shell_NotifyIcon@@YGHKPAU_NOTIFYICONDATA@@@Z)
这是什么原因?
2:为什么要对Shell_NotifyIcon这个函数进行声明?否则编译时说这个函数未定义。
#include "stdafx.h"
#include <windows.h>
#include "resource.h"
//NOTIFYICONDATA结构声明
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
//函数声明
BOOL CALLBACK DialogProc( HWND hWndDlg, UINT uMsg , WPARAM wParam, LPARAM lParam );
BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid );
DWORD NIM_ADD = 0;
UINT NIF_ICON = 2;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//产生一个对话框
DialogBox( hInstance, (LPCTSTR)"TrayDlalog", NULL, (DLGPROC)DialogProc );
return 0;
}
//回调函数
BOOL CALLBACK DialogProc( HWND hWndDlg, UINT uMsg , WPARAM wParam, LPARAM lParam )
{
PNOTIFYICONDATA NOTI;
switch( uMsg )
{
case WM_DESTROY:
{
PostQuitMessage( 0 );
break;
}
case WM_COMMAND:
{
switch( LOWORD(wParam) )
{
case IDCANCEL:
{
EndDialog( hWndDlg, TRUE );
return ( TRUE );
}
case IDC_TrayButton:
{
NOTI->cbSize = sizeof( NOTI );
//用这个函数得到图标的句柄
NOTI->hIcon = ( HICON )GetClassLong(
hWndDlg, GCL_HICON );
NOTI->hWnd = hWndDlg;
NOTI->uCallbackMessage = 1401; NOTI->uFlags = NIF_ICON;
NOTI->uID = 0;
Shell_NotifyIcon( 0, NOTI );
return ( TRUE );
}
}
break;
}
}
return ( FALSE );
}