NMUDP控件是不是不能用在DLL中?设自动启动后,关机冲突问题?(20分)

  • 主题发起人 主题发起人 sundayyoung
  • 开始时间 开始时间
S

sundayyoung

Unregistered / Unconfirmed
GUEST, unregistred user!
1.NMUDP控件是不是不能用在DLL中?
2.eg.OpenKey ('SOFTWARE/Microsoft/Windows/CurrentVersion/Run',true);
Reg.WriteString('monitor_server',application.ExeName );
来设置程序自动启动。 关机时却出现消息:0X00426617指令引用的“0X00000000”内存
,该内存不能为"read"。终止程序请“确定”,调试请“取消”。
应该是和我机器上的KW2000有了什么冲突,有没有人知道是什么回事?
 
(湖北 陈经韬):
Delphi本身自带的FastNEt公司的NMUDP控件就是一个UDP协议的用户数据包控件。
不过要注意的是如果你使用了这个控件必须退出程序才能关闭计算机,
因为TNMXXX控件有BUG。所有nm控件的基础 PowerSocket用到的ThreadTimer,
用到一个隐藏的窗口(类为TmrWindowClass)处理有硬伤。出问题的地方:
Psock::TThreadTimer::WndProc(var msg:TMessage)
if msg.message=WM_TIMER then //他自己处理
msg.result:=0
else
msg.result:=DefWindowProc(0,....)
end
问题就出在调用DefWindowProc时,传输的HWND参数居然是常数0,
这样实际上DefWindowProc是不能工作的,对任何输入的消息的调用均返回0,
包括WM-QUERYENDSESSION,所以不能退出windows。由于DefWindowProc的不正常调用,
实际上除WM_TIMER,其他消息由DefWindowProc处理都是无效的。
解决的办法是在PSock.pas在TThreadTimer.Wndproc内
Result:=DefWindowProc(0,Msg,WPARAM,LPARAM);
改为:Result:=DefWindowProc(FWindow Handle,Msg,WPARAM,LPARAM);

http://www.chinaok.com/share/showarticle.php?articleid=1480
可能和这个有关系吧
 
不是这个原因,是和KV2000的启动程序有点冲突!
 
我在Dll中用NMUDP有问题,有谁能给我确认一下,NMUDP有这个BUG吗?
 
独帅说的很对。
不过解决的办法好象不是那么简单就可以的,详情你可见《电脑编程技巧与维护》2001年第十期
 
后退
顶部