做了一个简单的IdUDPSever方面的东西,源程序如下,为什么不能工作当它在EXE中加载时是正常的,可是我想把它封装进DLL,可是封进DLL后确不能工作了,这是为什么,难道不能封进DLL?应该不会吧,是不是有什么别的办法解决?
unit uUDPServer;interfaceuses IdUDPServer, IdSocketHandle, Classes;type
  TUDPServer = Class(TObject)
  private
    udpServer: TIdUDPServer;
  public
    procedure StartServer;
    Procedure StopServer;
    procedure UDPReadEvent(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
  end;const Vers = '1.0.0.100';
var udps: TUDPServer;implementation{ TUDPServer }procedure TUDPServer.StartServer;
begin
  udpServer := TIdUDPServer.Create(nil);
  try
    udpServer.DefaultPort := 2020;
    udpServer.OnUDPRead := UDPReadEvent;
    udpServer.Active := true;
  finally
  end;
end;procedure TUDPServer.StopServer;
begin
  try
    udpServer.Active := false;
  finally
    udpServer.Free;
  end;
end;procedure TUDPServer.UDPReadEvent(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  DataStringStream: TStringStream;
  s: string;
begin
  DataStringStream := TStringStream.Create('');
  try
    DataStringStream.CopyFrom(AData, AData.Size);
    s := vers;
    ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
  finally
    DataStringStream.Free;
  end;
end;initialization
  udps := TUDPServer.Create;
  udps.StartServer;
finalization
  udps.StopServer;
  udps.Free;end.

解决方案 »

  1.   

    也真是奇怪哦http://lysoft.7u7.net
      

  2.   

    到indy的官方网站下载例子,网址:http://www.nevrona.com/indy
      

  3.   

    TO:zhangheaaa(竹) 
    上面没有讲封进DLL的例题
      

  4.   

    可能是這樣沒有建立起消息循環, 所以有問題, 你先在 dll 中加個form, 在Form上創建實例, 測試下再說
      

  5.   

    finalization
      udps.StopServer;
      udps.Free;问题出在这里吧
    是不是退出时报错?
      

  6.   

    重要的一点是
    应该将主进程的APPLICATION出入DLL
      

  7.   

    为什么还是不行呢,为什么要把主程序的HANDLE传进去可是我想把DLL注入到explorer中那该怎么办