Delphi - зарегистрировать ком-сервер в ROT - PullRequest
1 голос
/ 06 июля 2010

Я создал очень маленький объект автоматизации (используя Delphi 7). Это работает вообще, но у меня есть проблема, чтобы зарегистрировать его в таблице запущенных объектов, чтобы я мог использовать функцию getActiveOleObject для извлечения запущенного экземпляра сервера. Проблема в том, что события Initialize и Destroy не запускаются.

EDIT: Я только что заметил, что initialize срабатывает, когда я создаю приложение через createOleObject в клиентском приложении.

EDIT2: Скачать образец проекта здесь

Вот исходный код:

unit mycomserver;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  ComObj, ActiveX, server_TLB, StdVcl, dialogs;

type
  Tmyserver = class(TAutoObject, Imyserver)
  private
    FROTCookie: Longint;
  public
    procedure Initialize; override;
    destructor Destroy; override;
  protected
    procedure hello; safecall;

  end;

implementation

uses ComServ;

procedure Tmyserver.Initialize;
begin
  inherited;
  //Register object in ROT
  showmessage('Why the init event doesnt fire?');
  OleCheck(RegisterActiveObject(Self, CLASS_myserver, ActiveObject_Weak, FROTCookie))
end;

destructor Tmyserver.Destroy;
begin
  // unegister object in ROT
  showmessage('And destroy event also doesnt fire...');
  OleCheck(RevokeActiveObject(FROTCookie, nil));
  inherited;
end;

procedure Tmyserver.hello;
begin
  showmessage('hello its me the comserver');
end;

initialization
  showmessage('com server init works...');
  TAutoObjectFactory.Create(ComServer, Tmyserver, Class_myserver,
    ciMultiInstance, tmApartment);
end.

1 Ответ

0 голосов
/ 26 августа 2010

Я предполагал, что com-сервер инициализируется автоматически при запуске сервера. Но это не тот случай. Итак, я создал глобальную переменную в comServer, что-то вроде

 GlobalCOMInstance : Tmyserver;

В приложении servcer в событии onShow я просто создал экземпляр объекта com:

  if not assigned(GlobalCOMInstance) then
    mycomserver.Tmyserver.Create;

И это все;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...