再麻烦GanQuan老兄一次了。(50分)

  • 主题发起人 主题发起人 ChenBoy
  • 开始时间 开始时间
C

ChenBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
          还是关于流   
  上次在你的提供的链接
http://delphi.mychangshu.com/data/%CC%B8Delphi%B1%E0%B3%CC%D6%D0%A1%B0%C1%F7%A1%B1%B5%C4%C0%FB%D3%C3.htm
中,有一问题我还是不知道怎么去做,请教一下:
  Part:实际应用之三:利用流制作自己的OICQ
Question:

  
  OICQ使用的是UDP协议,这是一种无连接协议,即通信双方不用建立连接就可以发送信
息,所以效率比较高。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( FWindowHandle, Msg, WPARAM, LPARAM );
 早期低版本的OICQ也有这个问题,如果不关闭OICQ的话,关闭计算机时屏幕闪了一下又
返回了。

我想问一下,这个bug我怎么去修改,我找不到Psock.pas在那儿,改完还要做些什么
才能真正有自己的编的程序中生效,谢谢!分不多,还有好多问题要问,老兄将就着点吧!
 
如果D5:在这儿:C:/Program Files/Borland/Delphi5/Source/Rtl/Win
winsock.pas
c:/program files/BORLAND.DELPHI.V6.ENTERPRISE-ZENiTH/Install/program files/Borland/Delphi6/Source/Rtl/Win
 
sorry,我也没有找到! :-(
FastNet只有编译后的dcu,没有带源码。
不是Borland自己的,没办法。
 
  To 天真:
winsock.pas中根本没有我要修改的这一条呀!麻烦各位帮帮忙,初来者,免不了让大
家多费心,以后会慢慢减轻大家的负担的!谢谢......
 
我说怎么看的那么眼熟,原来是我以前写的贴子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=390229
 
To Pipi:
  你提供的链接我看到了,我还想问一下,我从陈经韬的网页上弄到Psock.pas,但弄下来
后就不知道怎么编译成.dcu,用brcc32.exe,brc32.exe,dcc32.exe等程序试着编译,就是得
不到pscok.dcu,我不知道这个DCU是不是Delphi compiled unit的意思,基础不好,还得努力
,再问一下上面我提到的那三个exe文件是干什么的。多谢!期盼答复。
 
pas加入你的project就可以了
 
多人接受答案了。
 
To Pipi:
原以为可以成功了,但是编译是到Psock.pas时,其利用的一个单元找不到,所以无法
编译。利用你提供的二进制修改方法将Psock.dcu修改后,再编译我的文件为可执行文件,
效果还是一样,还是不退出无法关闭Windows.
 
先谢谢PIPI大侠:)
编译的时候需要整个FASTNET控件包的.
不过好像偶尔还是有无法关机这个问题.不过频率少了很多.
为什么不改用ICS或者INDY呢?
 
  非常感谢Jingtao兄,让我这个同姓小弟好生羡慕了!
 
后退
顶部