做了一个简单的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.
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.
上面没有讲封进DLL的例题
udps.StopServer;
udps.Free;问题出在这里吧
是不是退出时报错?
应该将主进程的APPLICATION出入DLL