home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / inole2 / chap18 / cosmo1.0 / olevtbl.c < prev    next >
C/C++ Source or Header  |  1995-05-03  |  9KB  |  320 lines

  1. /*
  2.  * OLEVTBL.C
  3.  *
  4.  * Creates or frees the procedure instances for the server, document,
  5.  * and object VTBLs.  There are two functions for each table:  one
  6.  * to initialize the table, the other to free the instances in the table.
  7.  *
  8.  * Copyright(c) Microsoft Corp. 1992-1994 All Rights Reserved
  9.  * Win32 version, January 1994
  10.  */
  11.  
  12.  
  13. #ifdef MAKEOLESERVER
  14.  
  15.  
  16. #include <windows.h>
  17. #include <ole.h>
  18. #include "cosmo.h"
  19. #include "oleglobl.h"
  20.  
  21. #ifdef MSC
  22. /*
  23.  * This disables Microsoft VC++ 1.x warnings we get from assigning
  24.  * functions with our app-specific prototypes to the fixed prototypes
  25.  * in the VTBL structures.  The functionality of this application was
  26.  * verified before adding this pragma.
  27.  */
  28. #pragma warning(disable:4028)
  29. #ifndef WIN32
  30. #pragma warning(disable:4113)
  31. #endif
  32. #endif
  33.  
  34.  
  35. /*
  36.  * FOLEVtblInitServer
  37.  *
  38.  * Purpose:
  39.  *  Creates procedure instances for all the OLE methods required
  40.  *  by the server library for standard server methods.
  41.  *
  42.  * Parameters:
  43.  *  hInst           HINSTANCE of the application instance.
  44.  *  pvt             LPOLESERVERVTBL to the VTBL to initialize.
  45.  *
  46.  * Return Value:
  47.  *  None
  48.  *
  49.  * Customization:
  50.  *  None required.
  51.  */
  52.  
  53. BOOL WINAPI FOLEVtblInitServer(HINSTANCE hInst, LPOLESERVERVTBL pvt)
  54.     {
  55.     BOOL        fRet=TRUE;
  56.  
  57.    #ifdef WIN32
  58.     pvt->Create            =ServerCreate;
  59.     pvt->CreateFromTemplate=ServerCreateFromTemplate;
  60.     pvt->Edit              =ServerEdit;
  61.     pvt->Execute           =ServerExecute;
  62.     pvt->Exit              =ServerExit;
  63.     pvt->Open              =ServerOpen;
  64.     pvt->Release           =ServerRelease;
  65.    #else
  66.     pvt->Create            =(LPVOID)MakeProcInstance(ServerCreate,             hInst);
  67.     pvt->CreateFromTemplate=(LPVOID)MakeProcInstance(ServerCreateFromTemplate, hInst);
  68.     pvt->Edit              =(LPVOID)MakeProcInstance(ServerEdit,               hInst);
  69.     pvt->Execute           =(LPVOID)MakeProcInstance(ServerExecute,            hInst);
  70.     pvt->Exit              =(LPVOID)MakeProcInstance(ServerExit,               hInst);
  71.     pvt->Open              =(LPVOID)MakeProcInstance(ServerOpen,               hInst);
  72.     pvt->Release           =(LPVOID)MakeProcInstance(ServerRelease,            hInst);
  73.  
  74.     fRet =(NULL!=pvt->Create);
  75.     fRet&=(NULL!=pvt->CreateFromTemplate);
  76.     fRet&=(NULL!=pvt->Edit);
  77.     fRet&=(NULL!=pvt->Execute);
  78.     fRet&=(NULL!=pvt->Exit);
  79.     fRet&=(NULL!=pvt->Open);
  80.     fRet&=(NULL!=pvt->Release);
  81.    #endif
  82.  
  83.     return fRet;
  84.     }
  85.  
  86.  
  87. /*
  88.  * OLEVtblFreeServer
  89.  *
  90.  * Purpose:
  91.  *  Frees all procedure instances in the server VTBL.
  92.  *
  93.  * Parameters:
  94.  *  pvt             LPOLESERVERVTBL to the VTBL to free.
  95.  *
  96.  * Return Value:
  97.  *  none
  98.  *
  99.  * Customization:
  100.  *  None required.
  101.  */
  102.  
  103. void WINAPI OLEVtblFreeServer(LPOLESERVERVTBL pvt)
  104.     {
  105.    #ifndef WIN32
  106.     FreeProcInstance(pvt->Create);
  107.     FreeProcInstance(pvt->CreateFromTemplate);
  108.     FreeProcInstance(pvt->Edit);
  109.     FreeProcInstance(pvt->Exit);
  110.     FreeProcInstance(pvt->Open);
  111.     FreeProcInstance(pvt->Release);
  112.    #endif
  113.  
  114.     return;
  115.     }
  116.  
  117.  
  118.  
  119.  
  120.  
  121. /*
  122.  * FOLEVtblInitDocument
  123.  *
  124.  * Purpose:
  125.  *  Creates procedure instances for all the OLE methods required
  126.  *  for document methods.
  127.  *
  128.  * Parameters:
  129.  *  hInst           HINSTANCE of the application instance.
  130.  *  pvt             LPOLESERVERDOCVTBL to the VTBL to initialize.
  131.  * 
  132.  * Return Value:
  133.  *  None
  134.  *
  135.  * Customization:
  136.  *  None required.
  137.  */
  138.  
  139. BOOL WINAPI FOLEVtblInitDocument(HINSTANCE hInst, LPOLESERVERDOCVTBL pvt)
  140.     {
  141.     BOOL        fRet=TRUE;
  142.  
  143.    #ifdef WIN32
  144.     pvt->Close           =DocClose;
  145.     pvt->GetObject       =DocGetObject;
  146.     pvt->Execute         =DocExecute;
  147.     pvt->Release         =DocRelease;
  148.     pvt->Save            =DocSave;
  149.     pvt->SetColorScheme  =DocSetColorScheme;
  150.     pvt->SetDocDimensions=DocSetDocDimensions;
  151.     pvt->SetHostNames    =DocSetHostNames;
  152.    #else
  153.     pvt->Close           =(LPVOID)MakeProcInstance(DocClose,            hInst);
  154.     pvt->GetObject       =(LPVOID)MakeProcInstance(DocGetObject,        hInst);
  155.     pvt->Execute         =(LPVOID)MakeProcInstance(DocExecute,          hInst);
  156.     pvt->Release         =(LPVOID)MakeProcInstance(DocRelease,          hInst);
  157.     pvt->Save            =(LPVOID)MakeProcInstance(DocSave,             hInst);
  158.     pvt->SetColorScheme  =(LPVOID)MakeProcInstance(DocSetColorScheme,   hInst);
  159.     pvt->SetDocDimensions=(LPVOID)MakeProcInstance(DocSetDocDimensions, hInst);
  160.     pvt->SetHostNames    =(LPVOID)MakeProcInstance(DocSetHostNames,     hInst);
  161.  
  162.     fRet =(NULL!=pvt->Close);
  163.     fRet&=(NULL!=pvt->GetObject);
  164.     fRet&=(NULL!=pvt->Execute);
  165.     fRet&=(NULL!=pvt->Release);
  166.     fRet&=(NULL!=pvt->Save);
  167.     fRet&=(NULL!=pvt->SetColorScheme);
  168.     fRet&=(NULL!=pvt->SetDocDimensions);
  169.     fRet&=(NULL!=pvt->SetHostNames);
  170.    #endif
  171.  
  172.     return fRet;
  173.     }
  174.  
  175.  
  176.  
  177.  
  178. /*
  179.  * OLEVtblFreeDocument
  180.  *
  181.  * Purpose:
  182.  *  Frees all procedure instances in the document VTBL.
  183.  *
  184.  * Parameters:
  185.  *  pvt             LPOLESERVERDOCVTBL to the VTBL to free.
  186.  *
  187.  * Return Value:
  188.  *  none
  189.  *
  190.  * Customization:
  191.  *  None required.
  192.  */
  193.  
  194. void WINAPI OLEVtblFreeDocument(LPOLESERVERDOCVTBL pvt)
  195.     {
  196.    #ifndef WIN32
  197.     FreeProcInstance(pvt->Close);
  198.     FreeProcInstance(pvt->GetObject);
  199.     FreeProcInstance(pvt->Release);
  200.     FreeProcInstance(pvt->Save);
  201.     FreeProcInstance(pvt->SetColorScheme);
  202.     FreeProcInstance(pvt->SetDocDimensions);
  203.     FreeProcInstance(pvt->SetHostNames);
  204.    #endif
  205.  
  206.     return;
  207.     }
  208.  
  209.  
  210.  
  211.  
  212.  
  213. /*
  214.  * FOLEVtblInitObject
  215.  *
  216.  * Purpose:
  217.  *  Creates procedure instances for all the OLE methods required
  218.  *  for object methods.
  219.  *
  220.  * Parameters:
  221.  *  hInst           HINSTANCE of the application instance.
  222.  *  pvt             LPOLEOBJECTVTBL to free.
  223.  * 
  224.  * Return Value:
  225.  *  None
  226.  *
  227.  * Customization:
  228.  *  Your application might not use global variables for srvrvtbl,
  229.  *  docvtbl, and objvtbl.
  230.  */
  231.  
  232. BOOL WINAPI FOLEVtblInitObject(HINSTANCE hInst, LPOLEOBJECTVTBL pvt)
  233.     {
  234.     BOOL        fRet=TRUE;
  235.  
  236.     /*
  237.      * Local variables are used here just to make this one assignment
  238.      * more readable since it requires some typecasting to compile clean
  239.      * at warning level 3.
  240.      */
  241.    #ifdef WIN32
  242.     pvt->QueryProtocol  =ObjQueryProtocol;
  243.     pvt->DoVerb         =ObjDoVerb;
  244.     pvt->EnumFormats    =ObjEnumFormats;
  245.     pvt->GetData        =ObjGetData;
  246.     pvt->Release        =ObjRelease;
  247.     pvt->SetBounds      =ObjSetBounds;
  248.     pvt->SetColorScheme =ObjSetColorScheme;
  249.     pvt->SetData        =ObjSetData;
  250.     pvt->SetTargetDevice=ObjSetTargetDevice;
  251.     pvt->Show           =ObjShow;
  252.    #else
  253.     pvt->QueryProtocol  =(LPVOID)MakeProcInstance((FARPROC)ObjQueryProtocol, hInst);;
  254.     pvt->DoVerb         =(LPVOID)MakeProcInstance(ObjDoVerb, hInst);
  255.     pvt->EnumFormats    =(LPVOID)MakeProcInstance(ObjEnumFormats, hInst);
  256.     pvt->GetData        =(LPVOID)MakeProcInstance(ObjGetData, hInst);
  257.     pvt->Release        =(LPVOID)MakeProcInstance(ObjRelease, hInst);
  258.     pvt->SetBounds      =(LPVOID)MakeProcInstance(ObjSetBounds, hInst);
  259.     pvt->SetColorScheme =(LPVOID)MakeProcInstance(ObjSetColorScheme, hInst);
  260.     pvt->SetData        =(LPVOID)MakeProcInstance(ObjSetData, hInst);
  261.     pvt->SetTargetDevice=(LPVOID)MakeProcInstance(ObjSetTargetDevice, hInst);
  262.     pvt->Show           =(LPVOID)MakeProcInstance(ObjShow, hInst);
  263.  
  264.     fRet =(NULL!=pvt->QueryProtocol);
  265.     fRet&=(NULL!=pvt->DoVerb);
  266.     fRet&=(NULL!=pvt->EnumFormats);
  267.     fRet&=(NULL!=pvt->GetData);
  268.     fRet&=(NULL!=pvt->Release);
  269.     fRet&=(NULL!=pvt->SetBounds);
  270.     fRet =(NULL!=pvt->SetColorScheme);
  271.     fRet&=(NULL!=pvt->SetData);
  272.     fRet&=(NULL!=pvt->SetTargetDevice);
  273.     fRet&=(NULL!=pvt->Show);
  274.    #endif
  275.  
  276.     return fRet;    //TRUE by default in Win32
  277.     }
  278.  
  279.  
  280.  
  281.  
  282.  
  283. /*
  284.  * OLEVtblFreeObject
  285.  *
  286.  * Purpose:
  287.  *  Frees all procedure instances in the object VTBL.
  288.  *
  289.  * Parameters:
  290.  *  pvt             LPOLEOBJECTVTBL to the VTBL to free.
  291.  *
  292.  * Return Value:
  293.  *  none
  294.  *
  295.  * Customization:
  296.  *  None required.
  297.  */
  298.  
  299. void WINAPI OLEVtblFreeObject(LPOLEOBJECTVTBL pvt)
  300.     {
  301.    #ifndef WIN32
  302.     FreeProcInstance(pvt->DoVerb);
  303.     FreeProcInstance(pvt->EnumFormats);
  304.     FreeProcInstance(pvt->GetData);
  305.     FreeProcInstance((FARPROC)pvt->QueryProtocol);
  306.     FreeProcInstance(pvt->Release);
  307.     FreeProcInstance(pvt->SetBounds);
  308.     FreeProcInstance(pvt->SetColorScheme);
  309.     FreeProcInstance(pvt->SetData);
  310.     FreeProcInstance(pvt->SetTargetDevice);
  311.     FreeProcInstance(pvt->Show);
  312.    #endif
  313.  
  314.     return;
  315.     }
  316.  
  317.  
  318.  
  319. #endif //MAKEOLESERVER
  320.