我在一个动态库里放置了一个UdpServer和一个UdpClient,UdpClient可以正常发送数据,但是UdpServer却不能正常收到别的程序发来的数据,有时关闭整个程序的时候UdpServer会有反应。比如我在OnUdpRead事件里写Showmessage(ABinding.PeerIP),当别的程序发数据过来时没有反应,等关闭主程序的时候却会出来一个显示对方IP的对话框,说明它执行了OnUdpRead事件,但不明白为什么在关闭主程序的时候才出现?以上代码如果不写在DLL里能正常执行。请高手帮忙分析一下原因,谢谢了。

解决方案 »

  1.   

    觉得这个问题要看你具体代码才知道
    按你说的,程序本来应该显示message的时候没有显示,而是最后才显示
    说明操作的过程可能有问题
    不然不可能延时那么久的
      

  2.   

    这个问题有点类似于async 在DLL里不能接受串口数据因为async 自己创建了一个窗体进行消息循环,而这个窗口在DLL里工作不正常我想,是不是Indy也类似呀?
      

  3.   

    补充,async在DLL里只能接受到第一条数据
      

  4.   

    这也太郁闷了吧。我发现写DLL有好多毛病的,有的是我自己造成的,有的是怎么也找不着答案的。
      

  5.   

    我在DLL中放了个窗体,组建都是静态放上去的。谢谢大家了,问题已经解决。我把UdpServer的ThreadedEvent属性改为True就可以了。但我听说ThreadedEvent不能随便开的,希望有了解它的人解释一下,也给没有遇到这种情况的人提个醒。
      

  6.   

    不要在OnUdpRead里用showmessage去测试,不是很好吧
    如果UdpServer是动态创建的,记得先把需要的pas加进去
    最好有点代码看