Я создал очень маленький объект автоматизации (используя 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.