书中三层例子,在WINDOWS98下正常,而在WINDOWS2000下出现SOCKET连接时死机,unit SocketUnit2;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, socketProject1_TLB, StdVcl, Provider, DB, DBTables;type
TMyDataServer = class(TRemoteDataModule, IMyDataServer)
Query1: TQuery;
DataSetProvider1: TDataSetProvider;
Database1: TDatabase;
procedure RemoteDataModuleCreate(Sender: TObject);
procedure RemoteDataModuleDestroy(Sender: TObject);
procedure Query1AfterOpen(DataSet: TDataSet);
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
public
{ Public declarations }
end;implementation
uses SocketUnit1;
{$R *.DFM}class procedure TMyDataServer.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;procedure TMyDataServer.RemoteDataModuleCreate(Sender: TObject);
begin
SvrMainForm.Updatenc(1);
end;procedure TMyDataServer.RemoteDataModuleDestroy(Sender: TObject);
begin
SvrMainForm.Updatenc(-1);
end;procedure TMyDataServer.Query1AfterOpen(DataSet: TDataSet);
begin
SvrMainForm.Updatenq;
end;initialization
TComponentFactory.Create(ComServer, TMyDataServer,
Class_MyDataServer, ciMultiInstance, tmApartment);
end.
发现只要不用uses SocketUnit1;不调用SocketUnit1中的过程,在WIN2000
下就可运行,只要调用就死机,而在WIN98下一切正常,不知何故?
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, socketProject1_TLB, StdVcl, Provider, DB, DBTables;type
TMyDataServer = class(TRemoteDataModule, IMyDataServer)
Query1: TQuery;
DataSetProvider1: TDataSetProvider;
Database1: TDatabase;
procedure RemoteDataModuleCreate(Sender: TObject);
procedure RemoteDataModuleDestroy(Sender: TObject);
procedure Query1AfterOpen(DataSet: TDataSet);
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
public
{ Public declarations }
end;implementation
uses SocketUnit1;
{$R *.DFM}class procedure TMyDataServer.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;procedure TMyDataServer.RemoteDataModuleCreate(Sender: TObject);
begin
SvrMainForm.Updatenc(1);
end;procedure TMyDataServer.RemoteDataModuleDestroy(Sender: TObject);
begin
SvrMainForm.Updatenc(-1);
end;procedure TMyDataServer.Query1AfterOpen(DataSet: TDataSet);
begin
SvrMainForm.Updatenq;
end;initialization
TComponentFactory.Create(ComServer, TMyDataServer,
Class_MyDataServer, ciMultiInstance, tmApartment);
end.
发现只要不用uses SocketUnit1;不调用SocketUnit1中的过程,在WIN2000
下就可运行,只要调用就死机,而在WIN98下一切正常,不知何故?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货