     7 

    Java    Visual J++ 

       (Component Object Model  )  
Microsoft      Java.   
,   Microsoft    ,   
 Windows,      Java -. 
 -,    ,     Java-. 
     , DAO API (Data Access Objects)  RDO API (Remote Data 
Objects),   Visual J++,    -.  
         ,     
  Java.      Windows   - 
      Java. 
           -  Java-  
,      Java  -? , 
!    Java          
 Java-  -. , ,  
    Java,       
C++, Visual Basic    ,  -. 
    ,      Java, ,  
   .      
 ,     -   
    - Java-? 
,       
  ,   JRI- Netscape ( 
  -_   Java),  
     ","     . 
      Windows    .     
 ,       
   ,   . ,  
  Java-     
. -,     Java,   
 -  

    211 

( DLL), ,    ,   
^ da^f^Koro'Java:    Java     Java 
 . 
    ,       ,  
- Mathematics, , [Mathematics.    
   Java,   (  
 ,       ) 
  : 

    //    - Mathematics, import math.*; 
    //  - Mathematics     . 
IMathematics math = (IMathematics)new Mathematics(); 
    //    Mathematics. 
    int result = math.someFunction(10, 100, 1000); 
    int product = math.multSomeNumbers(45, 67/8); 

        Java-.  Java  Microsoft  
    Java  .    
Java-     ,   
,   Java       
-.   Java        . 

     Java n  

      Java   .      
  ,       Java. 
 Java-      Jaya, 
        (   
  ).      
  . 7.1. 
            . 
          
 .        
    ,    >.. 

    212	Visual J++:   


         ) 
    
    
    ----->-   1 
    I	*..^....^/.^,,,^,,^:,^/ 
    , 
           __w    2    .. I         {	 
    i i i 
    -->:  3 

    . 7.1.  Java-   

        .    coclass,   
    Component Object Class.  -  
  .    -,   
^]~ .         
 ^'.    ,   
   . ,     -, 
    ,    .  . 7.2 
,   -    -. 

    __ <  ; ^  1  I 
    -    __0  U  2  ; 
    ___  , s  3 j 

    . 7.2.  -   

      ,   . 7.1  7.2,   
,       .^  
. , ^   Java  
-        , 
      . 
         Windojys     
 -  Java-. -    Java-  
 ,       %4 
      -  Java-      
     .   Java   
,        Java,   
-.       .      
-       . 

     7. Java n   Visual J++	213 


        

       ,  ,   Java  -, 
  new,   Windows  -    
       Java,   
   -.   Java-     
  ,       
QuerylnterfaceQ    . 
           Java.  
Java-     -,     
      -.    
Java- - ""  ,    Java.   
   -,   . 7.3. 

    - 
      - 
    """ 
     
    -   
      _^4   - 
    4V 
     ,  , 

    . 7.3.  -  Java- 

        -    AddRefQ   
lUnknown.    (..      
     )   ReleaseQ.  
    -     ,   
   Java:       ,  
      .     ,  
 .  ^ -,     
  ",   ,    .  
     Java   ,     - 
   ,   . 

    214 Visual J++:   


         Java/COM 

       ,      
   .    (   
 Java),   -    
Mathematics,     
2^^?]^^.,.^^^^	 **  -. 
    ^   . .  " 
^__,  .! _ \.    . 
 i _c?eJv^Windows_?eayec ;    
().      ,   
      -. 

       Java/COM 

        Java/COM  -  
 Java Type Library Wizard.       Java 
Type Library Wizard  Tools.       
   Java Type Library Wizard. 

    " Java Type Libiary Wizard 
    Select'items to be conversed: 
    jB.ee.Qe r.lfi.TlrP.6.. ............................................... 
    '.'] H f M L i nline M ultirnedia 
    _llnternet Explorer Scripting Object Model 
    EjlvAuto 1.0 Type Library 
    J Marquee Control Library 
    ..JMarquee OLE Control module 
    ...jMicrosoft .Access 3.0 Object Library 
    '""Microsoft ActiveX Plugin 
    3Microsoft DAO 2.5/3.5 Compatibility Library 
    UMicrosoft DAO 3.5 Object Library 
    "JMicrosoft Excel 8.0 Object Library 
    .,..]Microsoft Forms 2.0 Object Library 
    ]Microsoft HTML Intrinsic Controls 
    jMicrosoft Internet Controls I)Microsoft Office 8.0 Object Library 
TlMicrosoft Remote Data Object 2.0 
    'Location: 
    J 
    ^ 

          -,  
  Windows     . Java Type Library 
Wizard     Java/COM     . 
   VjajaJ_J++    DAO,    
    

     7. Java n   Visual J++ 215 

    "Microsoft DAO 3.0 Object Library".    Java Type Library 
Wizard,   (.  ),    . 
             (   
),   ,     
 ,    . Java Type Library Wizard  
  .   Java Type Library Wizard  Output 
    .     
 ,       DAO. 

    Microsoft (R) Visual J++ Java Typelib Conversion Utility Version 1.01 
7048 Copyright (C) Microsoft Corp 1996  All rights reserved 
    import  dao303?.; 
    C:^?IN95\java\trustlib\dao303?\sumiary   txt(l)   Class summary   
information  crested 

    Tool returned code: 0 

     ,     Jnirjort Java.   
    Jaya-,  --. 
 import  7~   .  
,  import,   ",  
,       dao3032,  
,  . 
    -,   ,     
\Win-dows\Java\Trustlib\<packagename>.     
 DAO   Trustlib   dao3032,   
 -   -~~ DAO.  
 Trustlib    ,      
-,     DAO    
Java-,       import. 

       - 

     OLE Object View  Visual J++    
--  .    ,  
   ,        
-. ,   ,    IBeeper   
BeepQ,   ,   Java-,  ^.  
  ,      .  
    -  OLE Object View. 
       OLE Object View    OLE Object 
View  Tools.  . 7.4 ,    OLE Object View.  
    -,  

    216	Visual J++:   

     . (  typelib   
 , -,    . .)  
    ,   ,  
        . 

    'ffz OLE 2 Object Vie IHin321 
    R!e    Objects    Interfaces   View   Help 
    ^Application Performance Explorer Server Maris_*J ^Application Performance 
Explorer Service (Ver ^Application Performance Explorer Worker (Ver: 
^Application Performance Explorer Worker Provl' I Jf*Application Performance 
Explorer, Standard Ini 
    * Beeper 1.0 Type Library (Ver 1.0) 
    ^'Bitmap Image 
    f* Borland standardVCL type library (Ver 1.0] 
    (fa Calendar Control 3.0 
    (I Chart PX 
    ft ChartFX 2.0 OLE Custom Control fVer 2.0]       ' 
    |* CO M S erver 1.0 Type Library IVer 1.0) 
     Crystal R eport Control	?4i 
    f* Crystal R eport Control IVer 1.0)	'.:  
    f*Crystal Report Control 4.6 [Ver 4.6]	; 
    ^* Data Access Form Designer Add-In fen VB4 IV i, ,;: 
    I* D ata Access Form D esigner Add-l n for VB 4 (Vf|jjj 
    f^DBGrid Control	| 
     Delaware Animated Button Control (Ver 1.0) 
    i* D esaware Animated  utton Control IVer 1.01   JJ 
    Ready 
    OtS2 Beeper 1.0 Type Library (Ver 1.0) 
    ^e   {6364D582-OFDB-11 CF-e700-OQiA0053006D. 
    This is a Type Libraiy Registration Database Entries: 
    \TypeLib46384D582-OFDB-11CF-8700-OOAA0053C 1.0 = Beeper 1.0 Type Library 0 = 
    Win32 = D:VJAVA6EEPU>eeper.dll FUGS = 0 HELPDIR-D;VIAVABEEP 
    J 

    . 7.4.  OLE Object View,     Beeper 
     

            
ITypelib Viewer.  . 7.5      
 IBeeper  Beeper 1.0.      
 ,    ,     
  Java-. 
     ,    Java Type Library Wizard  
            
.   "    ,    - 
(  \Windows\Java\Trustlib).      
 jc :_^ummary.txt". ,    
 DAO 3.0   Java Type Library Wizard   
\Windows\Java\Trustlib\dao3032   summary.txt.    
       ,   
 -. ,      
  

     7. Java n COM  Visual J++ 217 

    OLE Object View,    ,     
       . 


    1   * Hvpelib (Beepef 1.0 Type Library (V 1.0))                          
                                                           0 1 
    Browsing a lypeLibrary.                    Name DocSi Number of Typelnfos: 
  2                  Help  lypelnfo:                                      
HelpF		= IBeeper                                                               
           *j , : ing = IBeeper Interface                                      
              3 ontext ID = 0X00000000                                        
       ^,,'i le = n/a                                                          
             '.'.ii :.'', itainingTypeLib returned valid pTypelib (0X001 91 
2AC, 1 ) -^ id = disointerface                                                
      jf|  i: Variables/Data Members:                                ,  . 
    F '.. 1  '	U'Deki Functions          
    MewEnum                                
AddR.eL...............................................__!giJl Count            
                           ill i|| GellDsdfNames                          
GetTypelnfo                                 I GetTypelnfoCount              
       IV j | Invoke                                             \     ' Itom  
                                                                    ]    ! 
-unction Prototype:                                  F	To File.    | UNCDESC 
for Beep:   ,,,,;,:;5!.:> 
    VOID Beeplj                                _J  : f  1     !	'Jarne = Beep 
                                                                    * 
DocString = Play the current sound H elp Content ID = 0X00000000               
                           & Help File = n/a                                  
                                fi  rnemid = 0X60020000                       
                                4i B; unckind = DISPATCH       '               
                             i nvkind = FUN                                  
                           * :' ::allconv = STDCALL                            
                         '''J cParams = 0                                      
                          ? i :PararnsOpt = 0                                  
                              il|l:i /ft = 28                                 
                                         SB; A'FuncFlags = 0                   
                                             gfe sUmH-; -Fi in ,- Me--,- ./! 
  . .. ,,._._......,......... 

    A/c. 7.5.  ITypelib  - IBeeper 


     -  Java 

    ?  ^  -    
     Java.   -  
    ,     
   . 
      -    new   
-.       import,   
    -.       
 -  : " '""" 

    IMyCOMObj m = new thepackage.MeCOMObj(); 

    14 -    .  
  ,   new,    
- -.    ,    
    .       : 

    MyCOMObj = new MyCOMObj(); 


    218 Visual J++:   

       ,   MyCOMObj    
    IMyCOMObj ( ). 
      Java-    -,    
    .   -   
javabeep,   Visual J++.    - 
    mouseDown(), , , 
   . 

    public boolean mouseDown(Event evt, int x, int y) { 
    String BeeperString = new StringO; 
    //    Beeper ,  // ,  
, if(m_Beeper==null) 
    m_Beeper = (IBeeper) new Beeper(); 
    //      Beeper. 
    //        
    //   OLE,    Java. 
    //     ,  Beeper 
    // ,    Beeper, 
    //   . 
    try 
    { 
    m_Beeper. ; } 
    catch(com.ms.com.ComException e) { 
    //   Beeper   
    // m_Beeper=null. 
    m_Beeper=null ; 
    //    Beeper. 
    m_Beeper = (IBeeper) new Beeper 0; 
    m_Beeper. Beep 0 ; } 
    //   getCount  getltemO  Beeper. 
    for (int i=l; i<=m_Beeper.getCount(); i + + ) 
    { 
    //     , 
    //   getltem(). 
    BeeperS t r ing+=m__Beeper .getltem(i) +" "; } 
    //  . 
    m_Graphics.drawstring(BeeperString,x, ); 
    return true; } 


     7. Java n COM  Visual J++	219 

          ,    Beeper  
        .    
 Beeper  ,       
 IBeeper ( -,    Beeper). 
  ,      IBeeper,   
     -: 

    m__ Beeper = (IBeeper) new Beeper(); //	m_Beeper  
    //	   
    //	 IBeeper. 
    m_Beeper.();                   //	  
    //	 IBeeper. 


     - 

       Microsoft    ,   
,   -.  com.ms.com.-tion 
 -,    -  - . 
     -   ,  - 
  HRESULT,  ,     
 . , -     -  
-    .       
    try/catch,     com.ms.com.COMException. 
      javabeep   try/catch    () 
 Beeper. 

     - 

      javacallingcom,   Visual J++,   
-,    " ".   
''^ " (-,      
~576" ) -     .  
,  -         
 ,        
    .        
     .   javacallingcom  
-   :     ,      . 
    -  -,      Beeper 
? javabeep. -    ,   
Beeper ( ,        
 ).  javacallingcom   
 ,      WWW-. 

    22	Visual J++:   

       javacal/ingcom     
   -   ,   
,    .      
^~'-'^  comserver.dll.    
      -,  
   RegSrv~32  Windows.  
RegSrv32    \Windows\System     
,     Win32.     
 comserver.dll,    javacalling-com  
^^^ : 

    \windows\system\regsrv32 comserver.dll 

      DLL        
- . 
          .    
,  Java Type Library Tool  Tools    
.       Java Type Library Wizard 
  COM Server 1.0.       
  comserver.dll,       . 
     . 7.6   OLE Object View     
 COM Server 1.0.    (  , 
   )   :    
 SoundQ   SoundNameQ.  Sound   , 
         PlayQ.  
   SoundQ   ,   
  ,       
.  SoundName   ,   
,    .      . 
     Java  -   getXXXQ  selXXXQ,  
        . , 
    Java   getSoundQ, setSoundQ  
getSoundName(). ( setSoundName()  ,   
SoundName    .)  getSoundQ  setSoundQ 
      Sound ^ .  
getSoundNameQ    ,   
 . 
      * OLE Object View   ,  
,       ,   Java   
%        
 getXXXQ  selXXXQ.      "get"  "set"  
  . ,     , 
   getSoundQ,    ,  
  setSoundQ.       
    getSound-NameQ. 

     7. Java n COM  Visual J++	221 


    |,^^^^K-"snI.ibCCOMSefVell.eiLib<a<y(We.1.0H                           
   : .  ~                            ,.              ':H 
    yFile    Object   g jiiil e N 
    owsmg a 1 .                   Name = ICOMBeeper                    
                                          -*j DocStiing = ICOMBeeper Interface 
                                         umber of Typelnfoi:   4              
    Help Context ID =  
    ^ Application    X .^Application    | ^Application $1 Application ' 
;	jipelnfo:                                        HelpF	ile = n/a 
ntainingTypeLib returned valid pTypelib (01 91 2AC. 3)    , id = 
disointerface ...                                                 Zj 
Variabl*s/t)ataMeriiberi:            -..... y_  
    COMB^pHlJi                      jj    [Hoei-i FuriCtiOt15                 
                                            : 
    ^Application    \	GetTypelnfoCount                       *!     -	:  I 
.mi . i   ill 
       1.0 > rj=^ Bitmap ImaC- '	Invoke                                
      """"  ! : Play                                           ' '   [ 1 
Querylnterface                                  \ 	:     To File... [ 
    Release                                           I i 
    (p Calendar Cc":	Sound                                      . .     ! 1 
    ||| Chart FX     	.Sound _____________     -|:;| 
    J j^ChaitFX2.0 
    | Crystal Rep. i #* Crystal Rep.' 4?* Crystal Rep.   ! 
    String SoundNarrieQ                    ^ j i	Jams = SoundName             
                                        :>,: )ocString = Get the description 
of the output sound         ^ Help Context ID = 0X00000000                    
                 :. ,:? 
    I^DataAcces   		Help File = n/'a                                          
                    f
    I^DataAcce? (HjDBGrid Cor		mernid = 0X60020002                             
                      :S   ' unckind = DISPATCH                                
                  iM nvkind = PROPERTYGET                                      
      S' 
    ^Desaware.^   		callconv = STDCA,LL             '                         
              'E 
    ^Desaware A'   ;		cParams = 0                                              
                    . . 
    ^ Delaware .^   i		cPararnsOpt - 0                                         
                   .', .:'-' 
    oVft-36                                                                    
  ''"' 
    Ready	Jj	wFuncFlags = 0                                                    
            i: p|prnHc.^rF.jnr ^^ vt = '^Irin.T                              
                                    ! 
    v^^ 

    . 7.6.   OLE Object View,  COM- ICOMBeeper 


     -  Java 

    - ^       
 .     ~~)  
,    enum  .      
     -. ,   
javacallingcom    ,  
   Sound   -. 
         javacallingcom     
OLE Object View.  . 7.7   OLE Object View   
BeeperConstants  COM Server 1.0.   Vari-ables/Oata Members  
       Sound  
.    , ^   
 . ,  Beeper-Constants.Asterisk    
 64. 


    *V 
    222 Visual J++:   


    RypeLib (COMSeiuei 10 * Lib<iy (Vei 1.0J) 
    Wrowsing a,TjipeLibiaty. 
    NumBer of Typelnfos:   <! JjipeWo: 
    3 
    rfunctions
    Name - BeeperConstants DocStiing = MessageBeep Sound Constants Help 
Context ID = 0X00000000 Help File = n/a 
    G etContainingTypeLib returned valid pTypelib (0X001912AC, 1) , typekind = 
enurn	JLJ Yanables/Data Members: 
    ''"""'    "''"''   "     ' '    dote 
    d 
    Asterisk (int) = 64 Ixclamation (int) 48 Hand (int) = 16 Question (int) 
32 StandaidBeep (int) = -1 
    jVaigES 
    Narne = Default 
    DocStnng = n/a 
    Help Context ID = 0X00000000 
    Help File = n/a 
    memid - 0X40000000 
    VarFlags = NOT READONLY 
    varkind = CONST 
    elerndescVar.tdesc.vt = int 
    elemdescVar.idldesc.wlDLFIags = 
    elemdescVar idldesc.dwResetved  0X00000000 
    IpvarValue = Long = 0 

    Puc. 7.7.  Beeper Constants   OLE Object View 

      javacallingcom      
       .  
   : 

    m__beeper.putSound(Constants.Asterisk); 
       ,   
    m_beeper.putSound(64) ; 

     Java        Java, 
    .     
BeeperConstants  Java,   .   
    : 

    public interface BeeperConstants { 
    public fin"al int Default = 0; 
    public final int Asterisk = 64; 
    publi%,final int Exclamation = 48; 
    public I^nal int Hand = 16; 
    public final int Question = 32; 
    public final int StandardBeep = -1; ) 


     7. Java n COM  Visual J++ 223 


     Java-   

        -  Java-,  , 
,  Java  .   Java   Windows  
 ,  MSJAVA.DLL,    
    Java.  . 7.8 ,    , 
Java  MSJAVA.DLL
             
Java  DCOM.  JavaReg (  Visual J++)  
  proxy- DCOM,      
    Java  Internet (  , 
 Remote Method Invocation (RMI),    12.    
     Java.  RMI   
  Java 1.1.) 

     Java 
         Java 
           
    - MSJAVA DLL  
     
     Java,   Java 
    1  

    . 7.8.   Java    MSJAVA.DLL 

         Java   ,    
 .   ""    Java   
 Windows. 
      Java       DCOM,   
 : 
    1.          Object Description 
Katiguage (ODL)       . 
    2.     Java. 
    3.     Java   Windows  -. ( 
    -.) 

    224 Visual J++:   

    ? 4.     Java    Windows  
DCOM-. (     DCOM-.) 
             
Java-  ,   -  DCOM-.  
Observable         
Observable/Observer,      ja^j5OTnf6Topbra 
   11. 

      Java     

    	 -   -.    Java, 
    . -  , 
   -    . 
      Java     ,   
 Java ,. .-  "" .    
    (ODL).      
   ,      .  
 ODL     ,    , 
    C++, Java, Visual Basic, Pascal. 
            
 Java  ODL,      Java.     
ODL,  ^   ,    
  Java  .   ,     
Java/COM   Java Type Library Wizard   , 
 -    Java.      
  ,     Java  . 
       ODL,   
MkTygLib,    \MSDEV\BIN,    
ODL-    (   TLB).	"""* " ....... 
       ODL-,   Observable,   
    Observable  java.util,    11. 
(  ODL    Info Viewer    
Visual J++.       .) 

    * 
    //Observable.adl 
    [   uuid   (27E955O)-13C6-lldO-AE38-444553540000)    ] 
    library LObservable 
    { 
    impor*KUb("stdole32.tlb") ; 
    [ odl, uuid(27E955C2-13C6-lldO-AE38-444553540000) ] 
    interface lObserver 
    { 


     7. Java n COM  Visual J++	225 


    HRESULT update(); 
    [uuid (27E955Cl-13C6-lldO-AE38-444553540000) ] 
    interface lObservable 
    { 
    HRESULT addObserver([in] lObserver* obs)); 
    HRESULT addObservers([out, retval] long* 1) ; 
    HRESULT countObserver ( [in] lObserver* obs); 
    HRESULT deleteObservers(); 
    HRESULT hasChangedf[out, retval] boolean* b); 
    HRESULT notifyObservers(); 
    [ uuid (27E955C3-13C6-lldO-AE38-444553540000) ] 
    coclass Observable 
    { 
    interface lObservable; 
    } 

            : lObserver  lObservable 
  , a Observable  .       
  .      
     .  Observable  
  lObservable.   lObservable   : 
addObserverQ, countObserverQ, deleteObserverQ, deleteObser-versQ  
hasChangedQ.   Observable   ,    
 ""  ,      . 
,    Observable,     
 ,   .    
,  Observable    "". 
      lObserver    ,   
   Observer: updateQ.     
Observable,     .   
lObserver  Java-   -,    
     Observable.  Observable  
 ,   lObserver. ,   
     Java.      lObserver, 
  ODL-,   Observable    updateQ 
 ,    . 
    ^  Java-   lObserver  
-servaBte.       ,  ,  
    Java,   ODL-.    
  Visual J++   JavaTLB  -. 

    226	Visual J++:   


    //  lObserver   Observable.odl. package observable; 
    import com.ms.com.lUnknown; 
    public interface lObserver extends lUnknown { 
    public abstract void update(); } 
    //  lObservable   Observable.odl. package observable; 
    import com.ms.com.lUnknown; 
    public interface lObservable extends lUnknown { 
    public abstract int countObservers(); 
    public abstract void deleteObservers(); 
    public abstract void notifyObservers() ; 
    public abstract void addObserver(lObserver iObserver); 
    public abstract boolean hasChanged(); 
    public abstract void deleteObserver(lObserver iObserver); ) 

          Java/COM,     
Observable.odl,    MkTypLib,   
 \MSDEV\BIN.   ,   ODL-,    
  : 

    C:>\msdev\bin\mktyplib /nocpp Observable.odl 

            Observable.tlb.  
  TLB       , 
  ODL-.  ,   /    
 ,        Visual C++. 
  ,  /   . 
            Java Type 
Library Wizard (   )    Java/COM  
 -.  ,     
  MkTypLib,       ,  
   Windows.  Java Type Library Wizard    
   Java/  Observable     
. (  Java Type Library Wizard   
    JavaTLB.) Java Type Library 
Wizard       ,   
   Windows.   JavaTLB   
 . 

     7. Java    Visual J++	227 

        Java/COM    Observable  
  JavaTLB,     TLB-    
  : 

    :>\msdev\bin\javatlb Observable.tlb 

          ,   JavaTLB  
   Java/COM        
 \Windows\Java\Trustlib\Observable.    
-: Observable.class, TObservable.class  TObserver.class. 
       Observable    

    import  observable.*; 

     ,          
observable.         
,       . 
     observable      ,   
    Java/COM. (He    ,  
  .) 

       (ODL) 

        Observable/Observer, ODL  , 
       ,  
    .   , 
  ,   ,     .  
   : ,    , 
       
 ,         
.   ++"  ,    
-,      Java,   
   , ,    . 
     ,      
 . 
       -    ,    
.  ,      .   , 
^   -  Internet     
,      Java    .   
   . ,   
 -  ,    . 
,     -,   , 
   .   Java-  ,  
 -,  ,   . 
         ODL.    
Java,    ,   ,    
 Java,    ,   

    228	Visual J++:   

  .  ,     ODL:  
   ,      .  
      ,   
    Java  .   , 
 ,      ,    
      Java   -. 
J3 ^ ,   Visual J++,   
       
 ,        
.   Java   -    
    . 

      

       Java,    ""  , 
, ,      .  
       
(UUID). (,    , GUID, 
IID        UUID.) 
    UUID  128 .  UUID   , 
 , ,   -  . 
   UUID,      .  
 lObserver  UUID {27E955C2-13C6-11DO-38-444553 540000},  
     .  UUID ,  
          
   . 
      UUID  Java     
.         Java. ,  
  UUID,   .      
. , ,    : 

    //  Foo.java package Moa; public class Foo ( public Foo() (} 
    } 
     
    //  Bar.Java package Moa; '* public class Bar { private Foo foo; 
    
    
    public Bar() { 
    foo = new Foo(}; } } 


     7. Java n COM  Visual J++	229 

     -       Foo,   
  private: 


    //  Foo.java ( 2) package Moa; public class Foo { private Foo() {) 
    } 

     Foo.java  ,     Bar.class 
.     ,     
SecurityException.  Bar.class    ,   
     Foo,    , 
  public.   ,    
,     . 
           ,   UUID 
       .  
  ,     .    
  (,         
 ),         
 UUID,    ,   ,  
   . 
       UUID      . 
,   [Observer   Observer.odl   : 

    [ odl, uuid(27E955C2-13C6-lldO-AE38-444553540000) ] interface lObserver 
    UUID ,       . 

     Visual J++  ,      
  UUID.       
     .     
    UUID      
  ,   ,   - UUID , 
   .  ,     UUID, 
 , ,       . 
        UUID    Tools   
 Create GUID.       .  
  GUID    New GUID,   UUID  
 ,    .   GUID Format  
   UUID.  ODL-    
 ,     ,    
Visual C++. 

    23	Visual J++:   


     ODL 

     ODL       . 
,   Observer.odl   : 

    [ uuid(27E955CO-13C6-lldO-AE38-444553540000) ] library LObservable { 
    } 

        UUID.   LObservable 
 "Library Observable". ,      
   L. 
      ODL   ,     
  Java. ,   Java/COM  ODL- 
Observable      observable. 
          : 

    importlib("stdole32.tlb"); 

     ,     ,     
StdOLE32,    ODL-.     
 lUnknown, IDispatch    ^  
 OLE.       . 
             
   . 

     7. Java    Visual J++ 231 


     ODL 

           .    
,   UUID.     
  Observable,    Observable.odl: 

    [ uuid(27E955C3-13C6-lldO-AE38-444553540000) ] 
    coclass Observable 
    { 
    interface lObservable; 
    } 

      coclass      
. (   "coclass"     "Component 
Object ^   ,  
 .  ,  Observable   
lObservable,     . , ,  ,  
   :    . 

     ODL 

    ,     Java,   -, 
  ODL-.   ,     
          , 
  ODL-.  ,      
  Java  -,     Java-  
 .    JavaTLB    -. 
       : 

    [ odl, uuid(27E955Cl-13C6-lldO-AE38-444553540000) ] interface lObservable { 
    ... //   lObservable. } 

         ,     
  UUID.      odl,   
 : "[ odl, uuid(...) ]".     
    "odl",  "uuid". 
           .   
   .      , 
   .   -,   . 
     ODL           
("in")   ("out") .    
 ,    ,   . 
       addObserverQ  lObservable: 

    HRESULT addObserver([in] lObserver* obs); 


    232	Visual J++:   

          lObserver.   
  -,    Java,   lObserver. 
         . 
        Java   .  C++ 
       ("  
").          
 ("  ").  Java   .  
JL-S2JklM?Io?^x,Jce 5..   . 
, ,     MinMax  --, 
,   ,   :   .  ODL 
     : 

    HRESULT MinMax([in] int a, [in] int b, [out] int* lowest, [out] int* highest); 

       -   Java/COM    : 

    public void MinMax(int  a,   int  b,   int  ashLowest[],   int  
ashHighest[]) throws   com.ms.com.ComException; 

         Java     
.    Java        
  .      ,   
        -  
.      Java  MinMax: 

    import MinMax.*; //    , import com.ms.com.*; 
    public class Mathematics implements MinMaxInterface ( public Mathematics() {} 
    //  MinMax()  MinMax. 
    public void MinMax(short a, short b, short ashLowest[], short 
ashHighest[]) throws com.ms.com.ComException { if(a < b) { 
    ashLowest[0] = a; ashHighest[0] = b; } else ( 
    ashLowest[0] = b; ashHighest[0] = a; i 
    } I 

     7. Java n COM  Visual i++	233 

       ( ,   )  
      . 
  ,   Java       ODL-. 
      ODL- long,  
  int  Java (32- ). 
           
  "out"  "retval".     
countObserversQ  lObservabie,    , 
  ,    : 

    HRESULT countObservers([out, retval] long* 1); 

         Java: 

    public int countObservers(}; 

    ,   retval,    , 
  Java. ,        
 retval,      
     . ,      .  

      Java 

      Java   ,   ODL-  
    Java.      
   Java.     
 Java-  Java-,   ,    
 . 
      ODL-      Java, 
    ,        
HRESULT,        deleteObserversQ: 

    HRESULT deleteObserversO ; 

       ,      
 Java  -.    Java,   -, 
 ,        : 
com.ms.com.ComFailedException  com.ms.comComSuccessException.  
Java/COM (  MSJAVA.DLL)    
      -.  
    HRESULT.     Java, 
 -,    ,  MS JAVA. DLL 
     HRESULT.  ,   
-   S_OK.   -   
,     
com.ms.com.ComFailedException  

    234	Visual J++:   

    com.ms.comComSuccessException.  ComFailedException  
   _  HRESULT,   ComSuc-cessException  
 S_XXXX  HRESULT. 
       - ^ ,   HRESULT.  
      "    
     .    
       ,   
. ,     -     
    -    
    _ HRESULT (..    HRESULT 
), ,   -      
.     ,      
S_XXXX  HRESULT (..    HRESULT  ), 
,      . 
        Observable,    
Observable.odl.  "import observable.*"   
-servable  lObserver,   JavaTLB. 

    import Java.util.* ; import com.ms.com.*; import observable.*; 
    public class Observable implements lObservable ( private boolean 
m_fChanged = false; private Vector m_vectObservers; 
    public synchronized void addObserver(lObserver obs) 
    throws ComException { try { 
    if (m_vectObservers ==null) 
    m_vectObservers = new Vector(); 
    if (!m_vectObservers.contains(obs)) 
    m_vectObservers.addElement(obs); } catch (OutOfMemoryError me) { 
    throw new ComFailException(Ox8007000E); // E_OUTOFMEMORY. 
    ) 
    i 
    public synchronized void deleteObserver(lObserver obs) 
    throws ComException { m_vectObservers.removeElement(obs); ) 
    public void notifyObservers() throws ComException { if (!hasChanged() || 
(null == m_vectObservers)) 
    return; 
    int ii = m vectObservers.size(); 


     7. Java  COM  Visual J++	235 


    while (ii >= 0) { 
    lObserver obs = (Iobserver)m_vectObservers.elementAt(ii); obs.update () ; 
    } 
    clearChanged(); 
    public synchronized void deleteObservers () ( 
    m_vectObservers = null; } 
    protected synchronized void setChangedO { m_fChanged = true; 
    } 
    protected synchronized void clearChanged() ( 
    m_fChanged = false; } 
    public synchronized boolean hasChangedO 
    throws ComException { return m_fChanged; 
    public synchronized int countObservers() 
    throws ComException if(m_vectObservers != null) 
    ' return m__vectObservers . size () ; else 
    return 0; 


      Java   - 

    ,     ,   Java    
  -,   .   Windows 
  -.  ,    , 
  UUID -,   DLL-  - 
     .    Java 
      DLL-   MSJAVA.DLL, 
  - Visual J++. 
          Java   Windows, 
     RegEdit (   Win32) 
          : 

    236	Visual J++:   


    HKEY_CLASSES_ROOT CLSID 
    (uuid   Java,    ,      ODL-} InprocServer32  = msjava.dll 
    Javaclass  =  -    ODL- 

     ,    Observable,    
Observable, odl,  : 

    HKEY_CLASSES_ROOT CLSID 
    {27E955C3-13C6-lldO-AE38-444553540000} InprocServer32 = msjava.dll 
Javaclass = Observable 

       Visual J++   ,  
  .  JavaReg,    \MSDEV\BIN, 
     Windows. 
        JavaReg    ,  
     . ,  
   (   ,     
Observable.java)   Observable,    Observable.odl: 

    \msdev\bin\javareg  /register  /class:Observable 
    /clsid:{27E955C3-13C6-lldO-AE38-444553540000} 


      Java   DCOM- 

       DCOM (Distributed COM)   
 Window NT 4.0,  DCOM-,     
,   -  ,   Internet.   
  Java,     -  DCOM- 
  . 
       -,     
Java  .   ,     Java,   
   DCOM,       
 -. 
      Java     ,    
  .   Java     
 - MSJAVA.DLL.  ,  DCOM-   
^  .    (  
). ,       DCOM,  "   
  ,      . 
      ""   MSJAVA.DLL  
   JavaReg.   "" 
 JavaReg   MSJAVA.DLL      
    DCOM.     , 

     7. Java n   Visual J++	237 

    -.      
DCOM-  JavaReg   DCOM-. 
        JavaReg    
DCOM-  Java,        
  Java   -.    
   : 

    javareg /register /class:MyPerformer 
    /clsid:{<J2E5AFC6-DBAA-llcf-BAFD-OOAA0057B223} 
    /surrogate 

     surrogate      JavaReg 
   ,     Observable   
 : 

    HKEY_CLASSES_ROOT CLSID 
    {27E955C3-13C6-lldO-AE38-444553540000} InprocServer32 = msjava.dll 
    Javaclass = Observable LocalServer32 = javareg 
    "-""/clsid:{42E5AFC6-DBAA-llcf-BAFD-OOAA0057B223} 
    /surrogate 

