Home | History | Annotate | Download | only in include
      1 /**
      2  * This file is part of the mingw-w64 runtime package.
      3  * No warranty is given; refer to the file DISCLAIMER within this package.
      4  */
      5 #include <winapifamily.h>
      6 
      7 #ifndef _INC_OLE
      8 #define _INC_OLE
      9 
     10 #ifdef __cplusplus
     11 extern "C" {
     12 #endif
     13 
     14 #ifndef WINAPI
     15 #define WINAPI PASCAL
     16 #define CALLBACK PASCAL
     17 #define LPCSTR LPSTR
     18 #define LRESULT LONG_PTR
     19 #define HGLOBAL HANDLE
     20 #endif
     21 
     22 #ifdef STRICT
     23 #define OLE_LPCSTR LPCSTR
     24 #define OLE_CONST const
     25 #else
     26 #define OLE_LPCSTR LPSTR
     27 #define OLE_CONST
     28 #endif
     29 
     30 #define LRESULT LONG_PTR
     31 #define HGLOBAL HANDLE
     32 
     33 #define OT_LINK __MSABI_LONG(1)
     34 #define OT_EMBEDDED __MSABI_LONG(2)
     35 #define OT_STATIC __MSABI_LONG(3)
     36 
     37 #define OLEVERB_PRIMARY 0
     38 
     39   typedef struct _OLETARGETDEVICE {
     40     USHORT otdDeviceNameOffset;
     41     USHORT otdDriverNameOffset;
     42     USHORT otdPortNameOffset;
     43     USHORT otdExtDevmodeOffset;
     44     USHORT otdExtDevmodeSize;
     45     USHORT otdEnvironmentOffset;
     46     USHORT otdEnvironmentSize;
     47     BYTE otdData[1];
     48   } OLETARGETDEVICE;
     49   typedef OLETARGETDEVICE *LPOLETARGETDEVICE;
     50 
     51 #define OF_SET 0x1
     52 #define OF_GET 0x2
     53 #define OF_HANDLER 0x4
     54 
     55   typedef enum {
     56     OLE_OK,
     57     OLE_WAIT_FOR_RELEASE,
     58     OLE_BUSY,
     59     OLE_ERROR_PROTECT_ONLY,
     60     OLE_ERROR_MEMORY,
     61     OLE_ERROR_STREAM,
     62     OLE_ERROR_STATIC,
     63     OLE_ERROR_BLANK,
     64     OLE_ERROR_DRAW,
     65     OLE_ERROR_METAFILE,
     66     OLE_ERROR_ABORT,
     67     OLE_ERROR_CLIPBOARD,
     68     OLE_ERROR_FORMAT,
     69     OLE_ERROR_OBJECT,
     70     OLE_ERROR_OPTION,
     71     OLE_ERROR_PROTOCOL,
     72     OLE_ERROR_ADDRESS,
     73     OLE_ERROR_NOT_EQUAL,
     74     OLE_ERROR_HANDLE,
     75     OLE_ERROR_GENERIC,
     76     OLE_ERROR_CLASS,
     77     OLE_ERROR_SYNTAX,
     78     OLE_ERROR_DATATYPE,
     79     OLE_ERROR_PALETTE,
     80     OLE_ERROR_NOT_LINK,
     81     OLE_ERROR_NOT_EMPTY,
     82     OLE_ERROR_SIZE,
     83     OLE_ERROR_DRIVE,
     84     OLE_ERROR_NETWORK,
     85     OLE_ERROR_NAME,
     86     OLE_ERROR_TEMPLATE,
     87     OLE_ERROR_NEW,
     88     OLE_ERROR_EDIT,
     89     OLE_ERROR_OPEN,
     90     OLE_ERROR_NOT_OPEN,
     91     OLE_ERROR_LAUNCH,
     92     OLE_ERROR_COMM,
     93     OLE_ERROR_TERMINATE,
     94     OLE_ERROR_COMMAND,
     95     OLE_ERROR_SHOW,
     96     OLE_ERROR_DOVERB,
     97     OLE_ERROR_ADVISE_NATIVE,
     98     OLE_ERROR_ADVISE_PICT,
     99     OLE_ERROR_ADVISE_RENAME,
    100     OLE_ERROR_POKE_NATIVE,
    101     OLE_ERROR_REQUEST_NATIVE,
    102     OLE_ERROR_REQUEST_PICT,
    103     OLE_ERROR_SERVER_BLOCKED,
    104     OLE_ERROR_REGISTRATION,
    105     OLE_ERROR_ALREADY_REGISTERED,
    106     OLE_ERROR_TASK,
    107     OLE_ERROR_OUTOFDATE,
    108     OLE_ERROR_CANT_UPDATE_CLIENT,
    109     OLE_ERROR_UPDATE,
    110     OLE_ERROR_SETDATA_FORMAT,
    111     OLE_ERROR_STATIC_FROM_OTHER_OS,
    112     OLE_ERROR_FILE_VER,
    113     OLE_WARN_DELETE_DATA = 1000
    114   } OLESTATUS;
    115 
    116   typedef enum {
    117     OLE_CHANGED,
    118     OLE_SAVED,
    119     OLE_CLOSED,
    120     OLE_RENAMED,
    121     OLE_QUERY_PAINT,
    122     OLE_RELEASE,
    123     OLE_QUERY_RETRY
    124   } OLE_NOTIFICATION;
    125 
    126   typedef enum {
    127     OLE_NONE,
    128     OLE_DELETE,
    129     OLE_LNKPASTE,
    130     OLE_EMBPASTE,
    131     OLE_SHOW,
    132     OLE_RUN,
    133     OLE_ACTIVATE,
    134     OLE_UPDATE,
    135     OLE_CLOSE,
    136     OLE_RECONNECT,
    137     OLE_SETUPDATEOPTIONS,
    138     OLE_SERVERUNLAUNCH,
    139     OLE_LOADFROMSTREAM,
    140     OLE_SETDATA,
    141     OLE_REQUESTDATA,
    142     OLE_OTHER,
    143     OLE_CREATE,
    144     OLE_CREATEFROMTEMPLATE,
    145     OLE_CREATELINKFROMFILE,
    146     OLE_COPYFROMLNK,
    147     OLE_CREATEFROMFILE,
    148     OLE_CREATEINVISIBLE
    149   } OLE_RELEASE_METHOD;
    150 
    151   typedef enum {
    152     olerender_none,
    153     olerender_draw,
    154     olerender_format
    155   } OLEOPT_RENDER;
    156 
    157   typedef WORD OLECLIPFORMAT;
    158 
    159   typedef enum {
    160     oleupdate_always,
    161     oleupdate_onsave,
    162 #ifdef OLE_INTERNAL
    163     oleupdate_oncall,
    164     oleupdate_onclose
    165 #else
    166     oleupdate_oncall
    167 #endif
    168   } OLEOPT_UPDATE;
    169 
    170   typedef HANDLE HOBJECT;
    171   typedef LONG_PTR LHSERVER;
    172   typedef LONG_PTR LHCLIENTDOC;
    173   typedef LONG_PTR LHSERVERDOC;
    174   typedef struct _OLEOBJECT *LPOLEOBJECT;
    175   typedef struct _OLESTREAM *LPOLESTREAM;
    176   typedef struct _OLECLIENT *LPOLECLIENT;
    177   typedef struct _OLEOBJECTVTBL {
    178     void *(CALLBACK *QueryProtocol) (LPOLEOBJECT, OLE_LPCSTR);
    179     OLESTATUS (CALLBACK *Release) (LPOLEOBJECT);
    180     OLESTATUS (CALLBACK *Show) (LPOLEOBJECT, WINBOOL);
    181     OLESTATUS (CALLBACK *DoVerb) (LPOLEOBJECT, UINT, WINBOOL, WINBOOL);
    182     OLESTATUS (CALLBACK *GetData) (LPOLEOBJECT, OLECLIPFORMAT, HANDLE *);
    183     OLESTATUS (CALLBACK *SetData) (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
    184     OLESTATUS (CALLBACK *SetTargetDevice) (LPOLEOBJECT, HGLOBAL);
    185     OLESTATUS (CALLBACK *SetBounds) (LPOLEOBJECT, OLE_CONST RECT *);
    186     OLECLIPFORMAT (CALLBACK *EnumFormats) (LPOLEOBJECT, OLECLIPFORMAT);
    187     OLESTATUS (CALLBACK *SetColorScheme) (LPOLEOBJECT, OLE_CONST LOGPALETTE *);
    188 #ifndef SERVERONLY
    189     OLESTATUS (CALLBACK *Delete) (LPOLEOBJECT);
    190     OLESTATUS (CALLBACK *SetHostNames) (LPOLEOBJECT, OLE_LPCSTR, OLE_LPCSTR);
    191     OLESTATUS (CALLBACK *SaveToStream) (LPOLEOBJECT, LPOLESTREAM);
    192     OLESTATUS (CALLBACK *Clone) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT *);
    193     OLESTATUS (CALLBACK *CopyFromLink) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT *);
    194     OLESTATUS (CALLBACK *Equal) (LPOLEOBJECT, LPOLEOBJECT);
    195     OLESTATUS (CALLBACK *CopyToClipboard) (LPOLEOBJECT);
    196     OLESTATUS (CALLBACK *Draw) (LPOLEOBJECT, HDC, OLE_CONST RECT *, OLE_CONST RECT *, HDC);
    197     OLESTATUS (CALLBACK *Activate) (LPOLEOBJECT, UINT, WINBOOL, WINBOOL, HWND, OLE_CONST RECT *);
    198     OLESTATUS (CALLBACK *Execute) (LPOLEOBJECT, HGLOBAL, UINT);
    199     OLESTATUS (CALLBACK *Close) (LPOLEOBJECT);
    200     OLESTATUS (CALLBACK *Update) (LPOLEOBJECT);
    201     OLESTATUS (CALLBACK *Reconnect) (LPOLEOBJECT);
    202     OLESTATUS (CALLBACK *ObjectConvert) (LPOLEOBJECT, OLE_LPCSTR, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT *);
    203     OLESTATUS (CALLBACK *GetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE *);
    204     OLESTATUS (CALLBACK *SetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE);
    205     OLESTATUS (CALLBACK *Rename) (LPOLEOBJECT, OLE_LPCSTR);
    206     OLESTATUS (CALLBACK *QueryName) (LPOLEOBJECT, LPSTR, UINT *);
    207     OLESTATUS (CALLBACK *QueryType) (LPOLEOBJECT, LONG *);
    208     OLESTATUS (CALLBACK *QueryBounds) (LPOLEOBJECT, RECT *);
    209     OLESTATUS (CALLBACK *QuerySize) (LPOLEOBJECT, DWORD *);
    210     OLESTATUS (CALLBACK *QueryOpen) (LPOLEOBJECT);
    211     OLESTATUS (CALLBACK *QueryOutOfDate) (LPOLEOBJECT);
    212     OLESTATUS (CALLBACK *QueryReleaseStatus) (LPOLEOBJECT);
    213     OLESTATUS (CALLBACK *QueryReleaseError) (LPOLEOBJECT);
    214     OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod) (LPOLEOBJECT);
    215     OLESTATUS (CALLBACK *RequestData) (LPOLEOBJECT, OLECLIPFORMAT);
    216     OLESTATUS (CALLBACK *ObjectLong) (LPOLEOBJECT, UINT, LONG *);
    217     OLESTATUS (CALLBACK *ChangeData) (LPOLEOBJECT, HANDLE, LPOLECLIENT, WINBOOL);
    218 #endif
    219   } OLEOBJECTVTBL;
    220 
    221   typedef OLEOBJECTVTBL *LPOLEOBJECTVTBL;
    222 #ifndef OLE_INTERNAL
    223   typedef struct _OLEOBJECT {
    224     LPOLEOBJECTVTBL lpvtbl;
    225   } OLEOBJECT;
    226 #endif
    227 
    228   typedef struct _OLECLIENTVTBL {
    229     int (CALLBACK *CallBack) (LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
    230   } OLECLIENTVTBL;
    231 
    232   typedef OLECLIENTVTBL *LPOLECLIENTVTBL;
    233 
    234   typedef struct _OLECLIENT {
    235     LPOLECLIENTVTBL lpvtbl;
    236   } OLECLIENT;
    237 
    238   typedef struct _OLESTREAMVTBL {
    239     DWORD (CALLBACK *Get) (LPOLESTREAM, void *, DWORD);
    240     DWORD (CALLBACK *Put) (LPOLESTREAM, OLE_CONST void *, DWORD);
    241   } OLESTREAMVTBL;
    242   typedef OLESTREAMVTBL *LPOLESTREAMVTBL;
    243 
    244   typedef struct _OLESTREAM {
    245     LPOLESTREAMVTBL lpstbl;
    246   } OLESTREAM;
    247 
    248 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
    249   OLESTATUS WINAPI OleDelete (LPOLEOBJECT);
    250   OLESTATUS WINAPI OleRelease (LPOLEOBJECT);
    251   OLESTATUS WINAPI OleSaveToStream (LPOLEOBJECT, LPOLESTREAM);
    252   OLESTATUS WINAPI OleEqual (LPOLEOBJECT, LPOLEOBJECT);
    253   OLESTATUS WINAPI OleCopyToClipboard (LPOLEOBJECT);
    254   OLESTATUS WINAPI OleSetHostNames (LPOLEOBJECT, LPCSTR, LPCSTR);
    255   OLESTATUS WINAPI OleSetTargetDevice (LPOLEOBJECT, HGLOBAL);
    256   OLESTATUS WINAPI OleSetBounds (LPOLEOBJECT, const RECT *);
    257   OLESTATUS WINAPI OleSetColorScheme (LPOLEOBJECT, const LOGPALETTE *);
    258   OLESTATUS WINAPI OleQueryBounds (LPOLEOBJECT, RECT *);
    259   OLESTATUS WINAPI OleQuerySize (LPOLEOBJECT, DWORD *);
    260   OLESTATUS WINAPI OleDraw (LPOLEOBJECT, HDC, const RECT *, const RECT *, HDC);
    261   OLESTATUS WINAPI OleQueryOpen (LPOLEOBJECT);
    262   OLESTATUS WINAPI OleActivate (LPOLEOBJECT, UINT, WINBOOL, WINBOOL, HWND, const RECT *);
    263   OLESTATUS WINAPI OleExecute (LPOLEOBJECT, HGLOBAL, UINT);
    264   OLESTATUS WINAPI OleClose (LPOLEOBJECT);
    265   OLESTATUS WINAPI OleUpdate (LPOLEOBJECT);
    266   OLESTATUS WINAPI OleReconnect (LPOLEOBJECT);
    267   OLESTATUS WINAPI OleGetLinkUpdateOptions (LPOLEOBJECT, OLEOPT_UPDATE *);
    268   OLESTATUS WINAPI OleSetLinkUpdateOptions (LPOLEOBJECT, OLEOPT_UPDATE);
    269   void *WINAPI OleQueryProtocol (LPOLEOBJECT, LPCSTR);
    270   OLESTATUS WINAPI OleQueryReleaseStatus (LPOLEOBJECT);
    271   OLESTATUS WINAPI OleQueryReleaseError (LPOLEOBJECT);
    272   OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod (LPOLEOBJECT);
    273   OLESTATUS WINAPI OleQueryType (LPOLEOBJECT, LONG *);
    274   DWORD WINAPI OleQueryClientVersion (void);
    275   DWORD WINAPI OleQueryServerVersion (void);
    276   OLECLIPFORMAT WINAPI OleEnumFormats (LPOLEOBJECT, OLECLIPFORMAT);
    277   OLESTATUS WINAPI OleGetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE *);
    278   OLESTATUS WINAPI OleSetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
    279   OLESTATUS WINAPI OleQueryOutOfDate (LPOLEOBJECT);
    280   OLESTATUS WINAPI OleRequestData (LPOLEOBJECT, OLECLIPFORMAT);
    281   OLESTATUS WINAPI OleQueryLinkFromClip (LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
    282   OLESTATUS WINAPI OleQueryCreateFromClip (LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
    283   OLESTATUS WINAPI OleCreateFromClip (LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
    284   OLESTATUS WINAPI OleCreateLinkFromClip (LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
    285   OLESTATUS WINAPI OleCreateFromFile (LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
    286   OLESTATUS WINAPI OleCreateLinkFromFile (LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
    287   OLESTATUS WINAPI OleLoadFromStream (LPOLESTREAM, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
    288   OLESTATUS WINAPI OleCreate (LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
    289   OLESTATUS WINAPI OleCreateInvisible (LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT, WINBOOL);
    290   OLESTATUS WINAPI OleCreateFromTemplate (LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
    291   OLESTATUS WINAPI OleClone (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
    292   OLESTATUS WINAPI OleCopyFromLink (LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
    293   OLESTATUS WINAPI OleObjectConvert (LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
    294   OLESTATUS WINAPI OleRename (LPOLEOBJECT, LPCSTR);
    295   OLESTATUS WINAPI OleQueryName (LPOLEOBJECT lpobj, LPSTR lpBuf, UINT *lpcbBuf);
    296   OLESTATUS WINAPI OleRevokeObject (LPOLECLIENT);
    297   WINBOOL WINAPI OleIsDcMeta (HDC);
    298   OLESTATUS WINAPI OleRegisterClientDoc (LPCSTR, LPCSTR, LONG, LHCLIENTDOC *);
    299   OLESTATUS WINAPI OleRevokeClientDoc (LHCLIENTDOC);
    300   OLESTATUS WINAPI OleRenameClientDoc (LHCLIENTDOC, LPCSTR);
    301   OLESTATUS WINAPI OleRevertClientDoc (LHCLIENTDOC);
    302   OLESTATUS WINAPI OleSavedClientDoc (LHCLIENTDOC);
    303   OLESTATUS WINAPI OleEnumObjects (LHCLIENTDOC, LPOLEOBJECT *);
    304 
    305   typedef enum {
    306     OLE_SERVER_MULTI,
    307     OLE_SERVER_SINGLE
    308   } OLE_SERVER_USE;
    309   typedef struct _OLESERVER *LPOLESERVER;
    310 
    311   typedef struct _OLESERVERDOC *LPOLESERVERDOC;
    312 
    313   OLESTATUS WINAPI OleRegisterServer (LPCSTR, LPOLESERVER, LHSERVER *, HINSTANCE, OLE_SERVER_USE);
    314   OLESTATUS WINAPI OleRevokeServer (LHSERVER);
    315   OLESTATUS WINAPI OleBlockServer (LHSERVER);
    316   OLESTATUS WINAPI OleUnblockServer (LHSERVER, WINBOOL *);
    317   OLESTATUS WINAPI OleLockServer (LPOLEOBJECT, LHSERVER *);
    318   OLESTATUS WINAPI OleUnlockServer (LHSERVER);
    319   OLESTATUS WINAPI OleRegisterServerDoc (LHSERVER, LPCSTR, LPOLESERVERDOC, LHSERVERDOC *);
    320   OLESTATUS WINAPI OleRevokeServerDoc (LHSERVERDOC);
    321   OLESTATUS WINAPI OleRenameServerDoc (LHSERVERDOC, LPCSTR);
    322   OLESTATUS WINAPI OleRevertServerDoc (LHSERVERDOC);
    323   OLESTATUS WINAPI OleSavedServerDoc (LHSERVERDOC);
    324 #endif
    325 
    326   typedef struct _OLESERVERVTBL {
    327     OLESTATUS (CALLBACK *Open) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, LPOLESERVERDOC *);
    328     OLESTATUS (CALLBACK *Create) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC *);
    329     OLESTATUS (CALLBACK *CreateFromTemplate) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC *);
    330     OLESTATUS (CALLBACK *Edit) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC *);
    331     _Analysis_noreturn_ OLESTATUS (CALLBACK *Exit) (LPOLESERVER);
    332     OLESTATUS (CALLBACK *Release) (LPOLESERVER);
    333     OLESTATUS (CALLBACK *Execute) (LPOLESERVER, HGLOBAL);
    334   } OLESERVERVTBL;
    335   typedef OLESERVERVTBL *LPOLESERVERVTBL;
    336 
    337   typedef struct _OLESERVER {
    338     LPOLESERVERVTBL lpvtbl;
    339   } OLESERVER;
    340 
    341   typedef struct _OLESERVERDOCVTBL {
    342     OLESTATUS (CALLBACK *Save) (LPOLESERVERDOC);
    343     OLESTATUS (CALLBACK *Close) (LPOLESERVERDOC);
    344     OLESTATUS (CALLBACK *SetHostNames) (LPOLESERVERDOC, OLE_LPCSTR, OLE_LPCSTR);
    345     OLESTATUS (CALLBACK *SetDocDimensions) (LPOLESERVERDOC, OLE_CONST RECT *);
    346     OLESTATUS (CALLBACK *GetObject) (LPOLESERVERDOC, OLE_LPCSTR, LPOLEOBJECT *, LPOLECLIENT);
    347     OLESTATUS (CALLBACK *Release) (LPOLESERVERDOC);
    348     OLESTATUS (CALLBACK *SetColorScheme) (LPOLESERVERDOC, OLE_CONST LOGPALETTE *);
    349     OLESTATUS (CALLBACK *Execute) (LPOLESERVERDOC, HGLOBAL);
    350   } OLESERVERDOCVTBL;
    351   typedef OLESERVERDOCVTBL *LPOLESERVERDOCVTBL;
    352 
    353   typedef struct _OLESERVERDOC {
    354     LPOLESERVERDOCVTBL lpvtbl;
    355   } OLESERVERDOC;
    356 
    357 #ifdef __cplusplus
    358 }
    359 #endif
    360 
    361 #endif
    362