⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdiiserver_tlb.pas

📁 就是这本书的随书代码。包括《实战Delphi 5.x-分布式多层应用系统篇》
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  end;

procedure Register;

implementation

uses ComObj;

{ TCORBADIIServerStub }

function TCORBADIIServerStub.Employees: OleVariant;
var
  OutBuf: IMarshalOutBuffer;
  InBuf: IMarshalInBuffer;
begin
  FStub.CreateRequest('Employees', True, OutBuf);
  FStub.Invoke(OutBuf, InBuf);
  Result := UnmarshalAny(InBuf);
end;

{ TCORBADIIServerSkeleton }

constructor TCORBADIIServerSkeleton.Create(const InstanceName: string; const Impl: IUnknown);
begin
  inherited;
  inherited InitSkeleton('CORBADIIServer', InstanceName, 'IDL:PDIIServer/ICORBADIIServer:1.0', tmMultiThreaded, True);
  FIntf := Impl as ICORBADIIServer;
end;

procedure TCORBADIIServerSkeleton.GetImplementation(out Impl: IUnknown);
begin
  Impl := FIntf;
end;

procedure TCORBADIIServerSkeleton.Employees(const InBuf: IMarshalInBuffer; Cookie: Pointer);
var
  OutBuf: IMarshalOutBuffer;
  Retval: OleVariant;
begin
  Retval := FIntf.Employees;
  FSkeleton.GetReplyBuffer(Cookie, OutBuf);
  MarshalAny(OutBuf, Retval);
end;

class function CoCORBADIIServer.Create: ICORBADIIServer;
begin
  Result := CreateComObject(CLASS_CORBADIIServer) as ICORBADIIServer;
end;

class function CoCORBADIIServer.CreateRemote(const MachineName: string): ICORBADIIServer;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_CORBADIIServer) as ICORBADIIServer;
end;

procedure TCORBADIIServer.InitServerData;
const
  CServerData: TServerData = (
    ClassID:   '{2E842E23-89A5-11D3-8DB9-0080C8518D0A}';
    IntfIID:   '{2E842E21-89A5-11D3-8DB9-0080C8518D0A}';
    EventIID:  '';
    LicenseKey: nil;
    Version: 500);
begin
  ServerData := @CServerData;
end;

procedure TCORBADIIServer.Connect;
var
  punk: IUnknown;
begin
  if FIntf = nil then
  begin
    punk := GetServer;
    Fintf:= punk as ICORBADIIServer;
  end;
end;

procedure TCORBADIIServer.ConnectTo(svrIntf: ICORBADIIServer);
begin
  Disconnect;
  FIntf := svrIntf;
end;

procedure TCORBADIIServer.DisConnect;
begin
  if Fintf <> nil then
  begin
    FIntf := nil;
  end;
end;

function TCORBADIIServer.GetDefaultInterface: ICORBADIIServer;
begin
  if FIntf = nil then
    Connect;
  Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation');
  Result := FIntf;
end;

constructor TCORBADIIServer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  FProps := TCORBADIIServerProperties.Create(Self);
{$ENDIF}
end;

destructor TCORBADIIServer.Destroy;
begin
{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
  FProps.Free;
{$ENDIF}
  inherited Destroy;
end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
function TCORBADIIServer.GetServerProperties: TCORBADIIServerProperties;
begin
  Result := FProps;
end;
{$ENDIF}

function  TCORBADIIServer.AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant; 
                                          MaxErrors: Integer; out ErrorCount: Integer; 
                                          var OwnerData: OleVariant): OleVariant;
begin
  Result := DefaultInterface.AS_ApplyUpdates(ProviderName, Delta, MaxErrors, ErrorCount, OwnerData);
end;

function  TCORBADIIServer.AS_GetRecords(const ProviderName: WideString; Count: Integer; 
                                        out RecsOut: Integer; Options: Integer; 
                                        const CommandText: WideString; var Params: OleVariant; 
                                        var OwnerData: OleVariant): OleVariant;
begin
  Result := DefaultInterface.AS_GetRecords(ProviderName, Count, RecsOut, Options, CommandText, 
                                           Params, OwnerData);
end;

function  TCORBADIIServer.AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant;
begin
  Result := DefaultInterface.AS_DataRequest(ProviderName, Data);
end;

function  TCORBADIIServer.AS_GetProviderNames: OleVariant;
begin
  Result := DefaultInterface.AS_GetProviderNames;
end;

function  TCORBADIIServer.AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant;
begin
  Result := DefaultInterface.AS_GetParams(ProviderName, OwnerData);
end;

function  TCORBADIIServer.AS_RowRequest(const ProviderName: WideString; Row: OleVariant; 
                                        RequestType: Integer; var OwnerData: OleVariant): OleVariant;
begin
  Result := DefaultInterface.AS_RowRequest(ProviderName, Row, RequestType, OwnerData);
end;

procedure TCORBADIIServer.AS_Execute(const ProviderName: WideString; const CommandText: WideString; 
                                     var Params: OleVariant; var OwnerData: OleVariant);
begin
  DefaultInterface.AS_Execute(ProviderName, CommandText, Params, OwnerData);
end;

function  TCORBADIIServer.Employees: OleVariant;
begin
  Result := DefaultInterface.Employees;
end;

{$IFDEF LIVE_SERVER_AT_DESIGN_TIME}
constructor TCORBADIIServerProperties.Create(AServer: TCORBADIIServer);
begin
  inherited Create;
  FServer := AServer;
end;

function TCORBADIIServerProperties.GetDefaultInterface: ICORBADIIServer;
begin
  Result := FServer.DefaultInterface;
end;

{$ENDIF}

class function TCORBADIIServerCorbaFactory.CreateInstance(const InstanceName: string): ICORBADIIServer;
begin
  Result := CorbaFactoryCreateStub('IDL:PDIIServer/CORBADIIServerFactory:1.0', 'CORBADIIServer',
    InstanceName, '', ICORBADIIServer) as ICORBADIIServer;
end;

procedure Register;
begin
  RegisterComponents('Servers',[TCORBADIIServer]);
end;

initialization
  CorbaStubManager.RegisterStub(ICORBADIIServer, TCORBADIIServerStub);
  CorbaInterfaceIDManager.RegisterInterface(ICORBADIIServer, 'IDL:PDIIServer/ICORBADIIServer:1.0');
  CorbaSkeletonManager.RegisterSkeleton(ICORBADIIServer, TCORBADIIServerSkeleton);

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -