J'ai créé un très petit objet automation (en utilisant delphi 7). Cela fonctionne, mais j'ai un problème pour l'enregistrer dans la table des objets en cours d'exécution afin que je puisse utiliser la fonction getActiveOleObject pour récupérer une instance en cours d'exécution du serveur. Le problème est que les événements Initialize et Destroy ne se déclenchent pas.Delphi - enregistrer un serveur COM dans le ROT
EDIT: Je viens de noter que le initialize est déclenché lorsque je crée l'application via CreateOleObject dans une application cliente.
EDIT2: Télécharger l'échantillon Projekt here
Voici le code source:
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.
Vérifiez qu'il montre le code sur comment faire cela. http://www.blong.com/Conferences/IConUK2000/DelphiMoreAutomation/More%20Automation%20In%20Delphi.htm Vous avez peut-être déjà. –
Ouais c'est exactement ce que j'ai déjà lu ... – ben