首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

大家帮小弟我看一下这段代码有什么有关问题

2012-03-23 
大家帮我看一下这段代码有什么问题啊Delphi(Pascal) codeunit Unit1interfaceusesWindows, Messages, Sys

大家帮我看一下这段代码有什么问题啊

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;

热点排行