рдбреЗрд▓реНрдлреА рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдбреЗрд▓реНрдлреА рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрдм COM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛, рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╡реЗ рднрд╛рд╖рд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдПред

рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ COM рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░, рдореБрдЭреЗ рд╢рдХ рд╣реИ рдХрд┐ рдореИрдВ рд╣реА рдирд╣реАрдВред рдбреЗрд▓реНрдлреА рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ рдиреЗ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЙрдкрдпреЛрдЧ рдкрд╛рдпрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ:
  1. рдЬрдм рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
  2. рдЬрдм рдПрдЖрд░рд╕реА (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА) рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред

рдбреЗрд▓реНрдлреА рдореЗрдВ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рд░реВрдк рдореЗрдВ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░рдерд╛рдЧрдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C ++)ред рдФрд░ рд╡рд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдбреЗрд▓реНрдлреА рдореЗрдВ, рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рдЖрднрд╛рд╕реА рдФрд░ рд╕рд╛рд░ рд╣реИрдВред ( рдЧрдирд╕рдорд░ )

рдФрд░ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ! рдЗрдВрдЯрд░рдлреЗрд╕ рдмрд╣реБрдд рдХреБрдЫ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рд╡реЗ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрд╣реБрдд рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдЖрд░рд╕реА рдирдП рд╕рдВрдХрд▓рдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдбреЗрд▓реНрдлреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЬреАрд╡рди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдирдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирдП "рдкрд╡рд┐рддреНрд░ рдпреБрджреНрдзреЛрдВ" рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЬрд╛рдПрдЧреАред рдореИрдВ рдЕрднреА рдПрдХ рдкрдХреНрд╖ рдпрд╛ рджреВрд╕рд░реЗ рдХреЛ рдЕрдЪрд╛рдирдХ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЬреАрд╡рди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП "рд╢рд╛рд╕реНрддреНрд░реАрдп" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ "рд▓рд┐рдВрдХ" рддрдВрддреНрд░ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдореМрдЬреВрджрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдлрд┐рд░ рднреА, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрд╕ рдЙрдореНрдореАрдж рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдирдП рд╕рдВрдХрд▓рдХ рдореЗрдВ рдПрдЖрд░рд╕реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХреЗрд╡рд▓ рд╕рд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред рдпрджреНрдпрдкрд┐ рдореИрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдРрд╕реЗ рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реВрдВред

рдЕрдХреНрд╕рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП "рдЗрдВрдЯрд░рдлреЗрд╕ рдПрдордлрд┐рдХреНрд╕" рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдореГрддрд┐ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рдореБрджреНрджреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╖рдп рдХреЗ рдорд╣рддреНрд╡ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдорд┐рд╢реНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд┐рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рджреЛрд╖ рджреЗрдирд╛ рд╣реИред рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╡реНрдпрд╛рдпрд╛рдо рдХрд░реЗрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ-рдмрдЯрди рдХрд╛ рдПрдХ рд░реВрдк рд╣реИред рдПрдХ рд╢реБрджреНрдз рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгред рдЗрд╕реЗ рдШрд░ рдкрд░ рди рджреЛрд╣рд░рд╛рдПрдВред

unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type IMyIntf = interface procedure TestMessage; end; TMyClass = class(TInterfacedObject, IMyIntf) public procedure TestMessage; destructor Destroy; override; end; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); public procedure Kill(Intf: IMyIntf); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var MyClass: TMyClass; begin Memo1.Clear; try MyClass := TMyClass.Create; try Kill(MyClass); finally MyClass.Free; end; except on E: Exception do Memo1.Lines.Add(E.Message); end; end; procedure TForm1.Kill(Intf: IMyIntf); begin Intf.TestMessage; end; { TMyClass } destructor TMyClass.Destroy; begin Form1.Memo1.Lines.Add('TMyClass.Destroy'); inherited; end; procedure TMyClass.TestMessage; begin Form1.Memo1.Lines.Add('TMyClass.TestMessage'); end; end. 

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдмрдЯрди рджрдмрд╛рдПрдВ рдФрд░ рдирд┐рдореНрди рдкрд╛рда рдореЗрдореЛ 1 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:
  TMyClass.TestMessage
 TMyClass.Destroy
 TMyClass.Destroy
 рдЕрдорд╛рдиреНрдп рдкреЙрдЗрдВрдЯрд░ рдСрдкрд░реЗрд╢рди 

рдирд╖реНрдЯ рджреЛ рдмрд╛рд░ рдФрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "рдЕрдорд╛рдиреНрдп рдкреЙрдЗрдВрдЯрд░ рдСрдкрд░реЗрд╢рди"ред рдХреНрдпреЛрдВ?

рдПрдХ рдмрд╛рд░ - рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред Button1Click рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, MyClass.Free рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдмрд╛рд░ рдХрд╣рд╛рдБ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░ рдХрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

 //  Intf.RefCount = 0,     TInterfacedObject //  Intf      Kill //  Intf._AddRef,  RefCount = 1 procedure TForm1.Kill(Intf: IMyIntf); begin Intf.TestMessage; //     ,  Intf._Release // ,   RefCount   ,  : TMyClass.Destroy //     ,      ,  . //      . end; 

рдпрд╣реА рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ TInterfacedObject рдФрд░ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ рд╢реВрдиреНрдп рдХреА рдПрдХ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рдиреНрди рдФрд░ рдЖрд╕рдиреНрди рдореМрдд рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред

рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рджреЛрд╖ рдирд╣реАрдВ рджреЗрдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ _AddRef рдФрд░ _Release рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред

рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ - рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╢реБрд░реВ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдФрд░ рднреА рднреНрд░рдо рдкреИрджрд╛ рд╣реЛ рдЬрд╛рддрд╛ред

рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗрд╡рд▓ рдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдбреЗрд▓реНрдлреА рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ, рддреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ? рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреА рддрд▓рд╛рд╢ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЧрд╣ рд╣реИред

рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ _AddRef рдФрд░ _Release рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдирд╛ (рддрд╛рдХрд┐ рдХрдХреНрд╖рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗ рд╕рдХреЗ, рдЙрд╕реЗ рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: _AddRef, _Release рдФрд░ QueryInterface):

  TMyClass = class(TObject, IMyIntf) protected function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; public procedure TestMessage; destructor Destroy; override; end; function TMyClass.QueryInterface(const IID: TGUID; out Obj): HResult; begin if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE; end; function TMyClass._AddRef: Integer; begin Result := -1; end; function TMyClass._Release: Integer; begin Result := -1; end; 

рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрджрдо рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдореЗрдВ рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рднреНрд░рдорд┐рдд рд╣реЛрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реАрд╕реАрдПрд▓ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред TComponent рд╡рдВрд╢рдЬ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

 function TComponent._AddRef: Integer; begin if FVCLComObject = nil then Result := -1 // -1 indicates no reference counting is taking place else Result := IVCLComObject(FVCLComObject)._AddRef; end; function TComponent._Release: Integer; begin if FVCLComObject = nil then Result := -1 // -1 indicates no reference counting is taking place else Result := IVCLComObject(FVCLComObject)._Release; end; 

рдЖрдк рджреВрд╕рд░реА рдУрд░ рд╕реНрдерд┐рддрд┐ рдкрд░ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рд╕реНрдЯ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 procedure TForm1.Kill(const Intf: IMyIntf); begin Intf.TestMessage; end; 

рдЕрдм рдирддреАрдЬрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛, рдпрд╛рдиреА рдкреВрд░реА рдЙрдореНрдореАрдж рд╣реИ:
  TMyClass.TestMessage
 TMyClass.Destroy 

рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЖрдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдХреЗрд╡рд▓ рдЙрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдЬрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛред рдФрд░ рд╣рд░ рддрд░рд╣ рд╕реЗ рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрдЪреЗрдВред

рдФрд░ рдЕрдЧрд░ рдкрд╣рд▓реЗ рд╡реАрд╕реАрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рдХреЛ рдХрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдирдИ рдлрд╛рдпрд░рдореЙрдиреНрдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдЬреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, "рд╡реИрдЪрд╛рд░рд┐рдХ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдкрддрд▓рд╛рдкрди тАЭрднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдПрдордмрд╛рд░рдХрдбреЗрд░реЛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИрдВред

Source: https://habr.com/ru/post/In181107/


All Articles