大家帮我看一下这段代码有什么问题啊
- Delphi(Pascal) code
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ShellApi;const WM_BARICON = WM_USER + 200;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private function createNotifyIcon:PNotifyIconData; //创建托盘图标 procedure deleteNotifyIcon(lpData:PNotifyIconData); //删除托盘 { Private declarations } public { Public declarations } end;var Form1: TForm1; AppniData:PNotifyIconData = nil; //应用程序图标implementation{$R *.dfm}function Tform1.createNotifyIcon:PNotifyIconData;var lpData:PNotifyIconData;begin lpData := new(PNotifyIconDataA); lpData.cbSize := 88; lpData.Wnd := Form1.Handle; lpData.hIcon := Form1.Icon.Handle; lpData.uCallbackMessage := WM_BARICON; lpData.uID := 0; lpData.szTip := '点击恢复窗口'; lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; Shell_NotifyIcon(NIM_ADD, lpData); dispose(lpData); result := lpData;end;procedure TForm1.deleteNotifyIcon(lpData:PNotifyIconData);begin Shell_NotifyIcon(NIM_DELETE,@lpData); dispose(lpData);end;procedure TForm1.FormCreate(Sender: TObject);begin AppniData := createNotifyIcon();end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin deleteNotifyIcon(AppniData);end;end.就是窗口创建的时候创建一个托盘
关闭的时候关闭托盘
运行的时候报错了 大家帮我分析一下 哪里有问题啊 谢谢了
[解决办法]
dispose(lpData);这句话去掉,你这里释放了,那AppniData也就成了野指针
[解决办法]
Shell_NotifyIcon(NIM_ADD, lpData);
dispose(lpData); ////////// 这里释放了,还返回什么呢?????
result := lpData;