lUnknown . :
q Querylnterface() ( );
q AddRef() Release() .
. ( ) . 13.17, . Querylnterface (IID). , NULL.
. 13.17. Querylnterface: 1
,
Querylnterface (IID_B); 2 ;
3
Querylnterface. - :
q ;
q , .
. - - -, Querylnterface .
, -. - , -. , Microsoft ( ) - . ? , . () -.
- :
q +1;
q AddRef +1;
q Release -1;
q =0 .
, -:
q - AddRef;
q Release.
-
- . , -. -. . 13.18, :
q (in-process) , , , ;
|
|
q (out-process) , , ;
q DLL , .
, , - , , . , , .
. 13.18. -
COM
.
1. , .
2. .
3. , - .
4. .
-
- , , , . .
-
- . :
q , ;
q -.
. . , CoCreateInstance.
- CoCreateInstance. CLSID IID , . CLSID ( SCM Service Control Manager). (Registry), CLSID . -.
, . -, , . . 13.19.
, - , . - IPersistFile, IPersistStorage IPersistStream.
. 13.19. -: 1 CoCreatelnstance
(CLSID M, IID ); 2 ;
3 ;
4 -
CoCreateInstance, , , (, ).
- . (class factory) -, .
|
|
IClassfactory, . Createlnstance - , , . LockServer .
COM CoGetClassObject:
CoGetClassObject (<CLSID >, < IID IClassFactory>)
.
IClassFactory . . 13.20.
. 13.20. - : 1
IClassFactory:: Createlnstance (IID A); 2 -
; 3
-; 4 -
IClassFactory::CreateInstance , (IID). - . -.
- , , CLSID. - . CLSID. CoTreatAsClass:
CoTreatAsClass (< CLSID>, < CLSID>).