为什么程序连接时报错

dongyi940333 2005-11-04 10:26:37
在学习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 );
}



...全文
219 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongyi940333 2006-02-01
  • 打赏
  • 举报
回复
问题已解决,是因为没有加载shellapi.h这个头文件,Shell_NotifyIcon这个函数的声明在shellapi.h这个头文件,谢谢各位,尤其要谢谢RainWindy(风雨交加)。
jixingzhong 2006-01-07
  • 打赏
  • 举报
回复
#pragma comment(lib,"shell32")
加载 库文件 ....

或者修改 选项 增加这个库 也可以 ~
RainWindy 2006-01-07
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shell_notifyicon.asp
请看这个页面对这个函数的说明。

这个函数的声明在shellapi.h头文件lib库:shell32.lib
xiao78xy 2006-01-07
  • 打赏
  • 举报
回复
没有包含还有Shell_NotifyIcon 的lib
Mr_Yang 2006-01-07
  • 打赏
  • 举报
回复
mark
dongyi940333 2005-11-09
  • 打赏
  • 举报
回复
我在源文件中加上了#pragma comment(lib,"shell32")可是还是找不到Shell_NotifyIcon这个函数,开发环境是VC6。0+WINDOWSXP,是不是我的操作系统或者是V我安装的VC有问题
fiftymetre 2005-11-05
  • 打赏
  • 举报
回复
在连接选项里加入 shell32.dll 就好了
yxw263 2005-11-05
  • 打赏
  • 举报
回复
链接错误应该是没有链接相应的库导致的。
goodluckyxl 2005-11-05
  • 打赏
  • 举报
回复
没有加载相应库文件
JohnTitor 2005-11-05
  • 打赏
  • 举报
回复
在源文件中加上一句
#pragma comment(lib,"shell32")
dongyi940333 2005-11-04
  • 打赏
  • 举报
回复
Shell_NotifyIcon这个函数不是我自已写的,它是一个API函数,我开始没有对这个函数进行声明,可编译时说找不到这个函数,为什么?
逸学堂 2005-11-04
  • 打赏
  • 举报
回复
//函数声明
BOOL CALLBACK DialogProc( HWND hWndDlg, UINT uMsg , WPARAM wParam, LPARAM lParam );
BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid );
函数声明后必须定义!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧