ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

typelib_struct.h
Go to the documentation of this file.
00001 /*
00002  * typelib_struct.h  internal wine data structures
00003  * used to decode typelib's
00004  *
00005  * Copyright 1999 Rein KLazes
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with this library; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00020  */
00021 #ifndef _WIDL_TYPELIB_STRUCT_H
00022 #define _WIDL_TYPELIB_STRUCT_H
00023 
00024 #define HELPDLLFLAG (0x0100)
00025 #define DO_NOT_SEEK (-1)
00026 
00027 #define MSFT_HREFTYPE_INTHISFILE(href) (!((href) & 3))
00028 #define MSFT_HREFTYPE_INDEX(href) ((href) /sizeof(MSFT_TypeInfoBase))
00029 
00030 /*-------------------------FILE STRUCTURES-----------------------------------*/
00031 
00032 /* There are two known file formats, those created with ICreateTypeLib
00033  * have the signature "SLTG" as their first four bytes, while those created
00034  * with ICreateTypeLib2 have "MSFT".
00035  */
00036 
00037 #define MSFT_MAGIC 0x5446534d
00038 
00039 /*****************************************************
00040  *                MSFT typelibs
00041  *
00042  * These are TypeLibs created with ICreateTypeLib2
00043  *
00044  */
00045 
00046 /*
00047  * structure of the typelib type2 header
00048  * it is at the beginning of a type lib file
00049  *
00050  */
00051 typedef struct tagMSFT_Header {
00052 /*0x00*/INT   magic1;       /* 0x5446534D "MSFT" */
00053         INT   magic2;       /* 0x00010002 version nr? */
00054         INT   posguid;      /* position of libid in guid table  */
00055                             /* (should be,  else -1) */
00056         INT   lcid;         /* locale id */
00057 /*0x10*/INT   lcid2;
00058         INT   varflags;     /* (largely) unknown flags */
00059                             /* the lower nibble is syskind */
00060                             /* 0x40 always seems to be set */
00061                             /* 0x10 set with a helpfile defined */
00062                             /* 0x100 set with a helpstringdll defined - in this
00063                                   case the offset to the name in the stringtable
00064                                   appears right after this struct, before the
00065                                   typeinfo offsets */
00066         INT   version;      /* set with SetVersion() */
00067         INT   flags;        /* set with SetFlags() */
00068 /*0x20*/INT   nrtypeinfos;  /* number of typeinfo's (till so far) */
00069         INT   helpstring;   /* position of help string in stringtable */
00070         INT   helpstringcontext;
00071         INT   helpcontext;
00072 /*0x30*/INT   nametablecount;   /* number of names in name table */
00073         INT   nametablechars;   /* nr of characters in name table */
00074         INT   NameOffset;       /* offset of name in name table */
00075         INT   helpfile;         /* position of helpfile in stringtable */
00076 /*0x40*/INT   CustomDataOffset; /* if -1 no custom data, else it is offset */
00077                                 /* in customer data/guid offset table */
00078         INT   res44;            /* unknown always: 0x20 (guid hash size?) */
00079         INT   res48;            /* unknown always: 0x80 (name hash size?) */
00080         INT   dispatchpos;      /* HREFTYPE to IDispatch, or -1 if no IDispatch */
00081 /*0x50*/INT   nimpinfos;        /* number of impinfos */
00082 } MSFT_Header;
00083 
00084 /* segments in the type lib file have a structure like this: */
00085 typedef struct tagMSFT_pSeg {
00086         INT   offset;       /* absolute offset in file */
00087         INT   length;       /* length of segment */
00088         INT   res08;        /* unknown always -1 */
00089         INT   res0c;        /* unknown always 0x0f in the header */
00090                             /* 0x03 in the typeinfo_data */
00091 } MSFT_pSeg;
00092 
00093 /* layout of the main segment directory */
00094 typedef struct tagMSFT_SegDir {
00095 /*1*/MSFT_pSeg pTypeInfoTab; /* each typeinfo gets an entry of 0x64 bytes */
00096                              /* (25 ints) */
00097 /*2*/MSFT_pSeg pImpInfo;     /* table with info for imported types */
00098 /*3*/MSFT_pSeg pImpFiles;    /* import libraries */
00099 /*4*/MSFT_pSeg pRefTab;      /* References table */
00100 /*5*/MSFT_pSeg pLibtab;      /* always exists, always same size (0x80) */
00101                              /* hash table w offsets to guid????? */
00102 /*6*/MSFT_pSeg pGuidTab;     /* all guids are stored here together with  */
00103                              /* offset in some table???? */
00104 /*7*/MSFT_pSeg res07;        /* always created, always same size (0x200) */
00105                              /* purpose largely unknown */
00106 /*8*/MSFT_pSeg pNametab;     /* name tables */
00107 /*9*/MSFT_pSeg pStringtab;   /* string table */
00108 /*A*/MSFT_pSeg pTypdescTab;  /* table with type descriptors */
00109 /*B*/MSFT_pSeg pArrayDescriptions;
00110 /*C*/MSFT_pSeg pCustData;    /* data table, used for custom data and default */
00111                              /* parameter values */
00112 /*D*/MSFT_pSeg pCDGuids;     /* table with offsets for the guids and into */
00113                              /* the customer data table */
00114 /*E*/MSFT_pSeg res0e;        /* unknown */
00115 /*F*/MSFT_pSeg res0f;        /* unknown  */
00116 } MSFT_SegDir;
00117 
00118 
00119 /* base type info data */
00120 typedef struct tagMSFT_TypeInfoBase {
00121 /*000*/ INT   typekind;             /*  it is the TKIND_xxx */
00122                                     /* some byte alignment stuff */
00123         INT     memoffset;          /* points past the file, if no elements */
00124         INT     res2;               /* zero if no element, N*0x40 */
00125         INT     res3;               /* -1 if no element, (N-1)*0x38 */
00126 /*010*/ INT     res4;               /* always? 3 */
00127         INT     res5;               /* always? zero */
00128         INT     cElement;           /* counts elements, HI=cVars, LO=cFuncs */
00129         INT     res7;               /* always? zero */
00130 /*020*/ INT     res8;               /* always? zero */
00131         INT     res9;               /* always? zero */
00132         INT     resA;               /* always? zero */
00133         INT     posguid;            /* position in guid table */
00134 /*030*/ INT     flags;              /* Typeflags */
00135         INT     NameOffset;         /* offset in name table */
00136         INT     version;            /* element version */
00137         INT     docstringoffs;      /* offset of docstring in string tab */
00138 /*040*/ INT     helpstringcontext;  /*  */
00139         INT     helpcontext;    /* */
00140         INT     oCustData;          /* offset in customer data table */
00141 #ifdef WORDS_BIGENDIAN
00142         INT16   cbSizeVft;      /* virtual table size, including inherits */
00143         INT16   cImplTypes;     /* nr of implemented interfaces */
00144 #else
00145         INT16   cImplTypes;     /* nr of implemented interfaces */
00146         INT16   cbSizeVft;      /* virtual table size, including inherits */
00147 #endif
00148 /*050*/ INT     size;           /* size in bytes, at least for structures */
00149         /* FIXME: name of this field */
00150         INT     datatype1;      /* position in type description table */
00151                                 /* or in base interfaces */
00152                                 /* if coclass: offset in reftable */
00153                                 /* if interface: reference to inherited if */
00154         INT     datatype2;      /* for interfaces: hiword is num of inherited funcs */
00155                                 /*                 loword is num of inherited interfaces */
00156         INT     res18;          /* always? 0 */
00157 /*060*/ INT     res19;          /* always? -1 */
00158 } MSFT_TypeInfoBase;
00159 
00160 /* layout of an entry with information on imported types */
00161 typedef struct tagMSFT_ImpInfo {
00162     INT     flags;          /* bits 0 - 15:  count */
00163                             /* bit  16:      if set oGuid is an offset to Guid */
00164                             /*               if clear oGuid is a typeinfo index in the specified typelib */
00165                             /* bits 24 - 31: TKIND of reference */
00166     INT     oImpFile;       /* offset in the Import File table */
00167     INT     oGuid;          /* offset in Guid table or typeinfo index (see bit 16 of flags) */
00168 } MSFT_ImpInfo;
00169 
00170 #define MSFT_IMPINFO_OFFSET_IS_GUID 0x00010000
00171 
00172 /* function description data */
00173 typedef struct {
00174 /*  INT   recsize;       record size including some extra stuff */
00175     INT   DataType;     /* data type of the member, eg return of function */
00176     INT   Flags;        /* something to do with attribute flags (LOWORD) */
00177 #ifdef WORDS_BIGENDIAN
00178     INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
00179     INT16 VtableOffset; /* offset in vtable */
00180 #else
00181     INT16 VtableOffset; /* offset in vtable */
00182     INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
00183 #endif
00184     INT   FKCCIC;       /* bit string with the following  */
00185                         /* meaning (bit 0 is the lsb): */
00186                         /* bits 0 - 2: FUNCKIND */
00187                         /* bits 3 - 6: INVOKEKIND */
00188                         /* bit  7: custom data present */
00189                         /* bits 8 - 11: CALLCONV */
00190                         /* bit  12: parameters have default values */
00191                         /* bit  13: oEntry is numeric */
00192                         /* bit  14: has retval param */
00193                         /* bits 16 - 31: index of next function with same id */
00194 #ifdef WORDS_BIGENDIAN
00195     INT16 nroargs;      /* nr of optional arguments */
00196     INT16 nrargs;       /* number of arguments (including optional ????) */
00197 #else
00198     INT16 nrargs;       /* number of arguments (including optional ????) */
00199     INT16 nroargs;      /* nr of optional arguments */
00200 #endif
00201     /* optional attribute fields, the number of them is variable */
00202     INT   OptAttr[1];
00203 /*
00204 0*  INT   helpcontext;
00205 1*  INT   oHelpString;
00206 2*  INT   oEntry;       // either offset in string table or numeric as it is (see bit 13 of FKCCIC) //
00207 3*  INT   res9;         // unknown (-1) //
00208 4*  INT   resA;         // unknown (-1) //
00209 5*  INT   HelpStringContext;
00210     // these are controlled by a bit set in the FKCCIC field  //
00211 6*  INT   oCustData;        // custom data for function //
00212 7*  INT   oArgCustData[1];  // custom data per argument //
00213 */
00214 } MSFT_FuncRecord;
00215 
00216 /* after this may follow an array with default value pointers if the
00217  * appropriate bit in the FKCCIC field has been set:
00218  * INT   oDefautlValue[nrargs];
00219  */
00220 
00221     /* Parameter info one per argument*/
00222 typedef struct {
00223         INT   DataType;
00224         INT   oName;
00225         INT   Flags;
00226     } MSFT_ParameterInfo;
00227 
00228 /* Variable description data */
00229 typedef struct {
00230 /*  INT   recsize;      // record size including some extra stuff */
00231     INT   DataType;     /* data type of the variable */
00232     INT   Flags;        /* VarFlags (LOWORD) */
00233 #ifdef WORDS_BIGENDIAN
00234     INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */
00235     INT16 VarKind;      /* VarKind */
00236 #else
00237     INT16 VarKind;      /* VarKind */
00238     INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */
00239 #endif
00240     INT   OffsValue;    /* value of the variable or the offset  */
00241                         /* in the data structure */
00242     /* optional attribute fields, the number of them is variable */
00243     /* controlled by record length */
00244     INT   HelpContext;
00245     INT   oHelpString;
00246     INT   res9;         /* unknown (-1) */
00247     INT   oCustData;        /* custom data for variable */
00248     INT   HelpStringContext;
00249 
00250 } MSFT_VarRecord;
00251 
00252 /* Structure of the reference data  */
00253 typedef struct {
00254     INT   reftype;  /* either offset in type info table, then it's */
00255                     /* a multiple of 64 */
00256                     /* or offset in the external reference table */
00257                     /* with an offset of 1 */
00258     INT   flags;
00259     INT   oCustData;    /* custom data */
00260     INT   onext;    /* next offset, -1 if last */
00261 } MSFT_RefRecord;
00262 
00263 /* this is how a guid is stored */
00264 typedef struct {
00265     GUID guid;
00266     INT   hreftype;     /* -2 for the typelib guid, typeinfo offset
00267                for typeinfo guid, low two bits are 01 if
00268                this is an imported typeinfo, low two bits
00269                are 10 if this is an imported typelib (used
00270                by imported typeinfos) */
00271     INT   next_hash;    /* offset to next guid in the hash bucket */
00272 } MSFT_GuidEntry;
00273 /* some data preceding entries in the name table */
00274 typedef struct {
00275     INT   hreftype;     /* is -1 if name is for neither a typeinfo,
00276                a variable, or a function (that is, name
00277                is for a typelib or a function parameter).
00278                otherwise is the offset of the first
00279                typeinfo that this name refers to (either
00280                to the typeinfo itself or to a member of
00281                the typeinfo */
00282     INT   next_hash;    /* offset to next name in the hash bucket */
00283     INT   namelen;      /* only lower 8 bits are valid */
00284                         /* 0x1000 if name is only used once as a variable name */
00285                         /* 0x2000 if name is a variable in an enumeration */
00286                         /* 0x3800 if name is typeinfo name */
00287             /* upper 16 bits are hash code */
00288 } MSFT_NameIntro;
00289 /* the custom data table directory has entries like this */
00290 typedef struct {
00291     INT   GuidOffset;
00292     INT   DataOffset;
00293     INT   next;     /* next offset in the table, -1 if it's the last */
00294 } MSFT_CDGuid;
00295 
00296 
00297 /***********************************************************
00298  *
00299  *                SLTG typelibs.
00300  *
00301  * These are created with ICreateTypeLib
00302  *
00303  */
00304 
00305 #include "pshpack1.h"
00306 
00307 typedef struct {
00308 /*00*/  DWORD SLTG_magic;   /* 0x47544c53  == "SLTG" */
00309 /*04*/  WORD nrOfFileBlks;  /* no of SLTG_BlkEntry's + 1 */
00310 /*06*/  WORD res06;     /* ?? always 9 */
00311 /*08*/  WORD res08;             /* some kind of len/offset ?? */
00312 /*0a*/  WORD first_blk;     /* 1 based index into blk entries that
00313                    corresponds to first block in file */
00314 /*0c*/  DWORD res0c;        /* always 0x000204ff */
00315 /*10*/  DWORD res10;        /* always 0x00000000 */
00316 /*14*/  DWORD res14;        /* always 0x000000c0 */
00317 /*18*/  DWORD res18;        /* always 0x46000000 */
00318 /*1c*/  DWORD res1c;        /* always 0x00000044 */
00319 /*20*/  DWORD res20;        /* always 0xffff0000 */
00320 } SLTG_Header;
00321 
00322 /* This gets followed by a list of block entries */
00323 typedef struct {
00324 /*00*/  DWORD len;
00325 /*04*/  WORD index_string; /* offs from start of SLTG_Magic to index string */
00326 /*06*/  WORD next;
00327 } SLTG_BlkEntry;
00328 
00329 /* The order of the blocks in the file is given by starting at Block
00330    entry firt_blk and stepping through using the next pointer */
00331 
00332 /* These then get followed by this magic */
00333 typedef struct {
00334 /*00*/ BYTE res00;      /* always 0x01 */
00335 /*01*/ CHAR CompObj_magic[8];   /* always "CompObj" */
00336 /*09*/ CHAR dir_magic[4];   /* always "dir" */
00337 } SLTG_Magic;
00338 
00339 #define SLTG_COMPOBJ_MAGIC "CompObj"
00340 #define SLTG_DIR_MAGIC "dir"
00341 
00342 /* Next we have SLTG_Header.nrOfFileBlks - 2 of Index strings.  These
00343 are presumably unique to within the file and look something like
00344 "AAAAAAAAAA" with the first character incremented from 'A' to ensure
00345 uniqueness.  I guess successive chars increment when we need to wrap
00346 the first one. */
00347 
00348 typedef struct {
00349 /*00*/ CHAR string[11];
00350 } SLTG_Index;
00351 
00352 
00353 /* This is followed by SLTG_pad9 */
00354 typedef struct {
00355 /*00*/ CHAR pad[9]; /* 9 '\0's */
00356 } SLTG_Pad9;
00357 
00358 
00359 /* Now we have the noOfFileBlks - 1 worth of blocks. The length of
00360 each block is given by its entry in SLTG_BlkEntry. */
00361 
00362 /* type SLTG_NAME in rather like a BSTR except that the length in
00363 bytes is given by the first WORD and the string contains 8bit chars */
00364 
00365 typedef WORD SLTG_Name;
00366 
00367 /* The main library block looks like this.  This one seems to come last */
00368 
00369 typedef struct {
00370 /*00*/  WORD magic;     /* 0x51cc */
00371 /*02*/  WORD res02;     /* 0x0003, 0x0004 */
00372 /*04*/  WORD name;              /* offset to name in name table */
00373 /*06*/  SLTG_Name res06;    /* maybe this is just WORD == 0xffff */
00374     SLTG_Name helpstring;
00375     SLTG_Name helpfile;
00376     DWORD helpcontext;
00377     WORD syskind;       /* == 1 for win32, 0 for win16 */
00378     WORD lcid;      /* == 0x409, 0x809 etc */
00379     DWORD res12;        /* == 0 */
00380     WORD libflags;      /* LIBFLAG_* */
00381     WORD maj_vers;
00382     WORD min_vers;
00383     GUID uuid;
00384 } SLTG_LibBlk;
00385 
00386 #define SLTG_LIBBLK_MAGIC 0x51cc
00387 
00388 /* we then get 0x40 bytes worth of 0xffff or small numbers followed by
00389    nrOfFileBlks - 2 of these */
00390 typedef struct {
00391     WORD small_no;
00392     SLTG_Name index_name; /* This refers to a name in the directory */
00393     SLTG_Name other_name; /* Another one of these weird names */
00394     WORD res1a;       /* 0xffff */
00395     WORD name_offs;       /* offset to name in name table */
00396     WORD more_bytes;      /* if this is non-zero we get this many
00397                  bytes before the next element, which seem
00398                  to reference the docstring of the type ? */
00399     WORD res20;       /* 0xffff */
00400     DWORD helpcontext;
00401     WORD res26;       /* 0xffff */
00402         GUID uuid;
00403 } SLTG_OtherTypeInfo;
00404 
00405 /* Next we get WORD 0x0003 followed by a DWORD which if we add to
00406 0x216 gives the offset to the name table from the start of the LibBlk
00407 struct */
00408 
00409 typedef struct {
00410 /*00*/  WORD magic;     /* 0x0501 */
00411 /*02*/  DWORD href_table;   /* if not 0xffffffff, then byte offset from
00412                    beginning of struct to href table */
00413 /*06*/  DWORD res06;        /* 0xffffffff */
00414 /*0a*/  DWORD elem_table;   /* offset to members */
00415 /*0e*/  DWORD res0e;        /* 0xffffffff */
00416 /*12*/  WORD major_version; /* major version number */
00417 /*14*/  WORD minor_version; /* minor version number */
00418 /*16*/  DWORD res16;    /* 0xfffe0000 */
00419 /*1a*/  BYTE typeflags1;/* 0x02 | top 5 bits hold l5sbs of TYPEFLAGS */
00420 /*1b*/  BYTE typeflags2;/* TYPEFLAGS >> 5 */
00421 /*1c*/  BYTE typeflags3;/* 0x02*/
00422 /*1d*/  BYTE typekind;  /* 0x03 == TKIND_INTERFACE etc. */
00423 /*1e*/  DWORD res1e;    /* 0x00000000 or 0xffffffff */
00424 } SLTG_TypeInfoHeader;
00425 
00426 #define SLTG_TIHEADER_MAGIC 0x0501
00427 
00428 typedef struct {
00429 /*00*/  WORD cFuncs;
00430 /*02*/  WORD cVars;
00431 /*04*/  WORD cImplTypes;
00432 /*06*/  WORD res06;
00433 /*08*/  WORD res08;
00434 /*0a*/  WORD res0a;
00435 /*0c*/  WORD res0c;
00436 /*0e*/  WORD res0e;
00437 /*10*/  WORD res10;
00438 /*12*/  WORD res12;
00439 /*14*/  WORD tdescalias_vt; /* for TKIND_ALIAS */
00440 /*16*/  WORD res16;
00441 /*18*/  WORD res18;
00442 /*1a*/  WORD res1a;
00443 /*1c*/  WORD res1c;
00444 /*1e*/  WORD res1e;
00445 /*20*/  WORD cbSizeInstance;
00446 /*22*/  WORD cbAlignment;
00447 /*24*/  WORD res24;
00448 /*26*/  WORD res26;
00449 /*28*/  WORD cbSizeVft;
00450 /*2a*/  WORD res2a;
00451 /*2c*/  WORD res2c;
00452 /*2e*/  WORD res2e;
00453 /*30*/  WORD res30;
00454 /*32*/  WORD res32;
00455 /*34*/  WORD res34;
00456 } SLTG_TypeInfoTail;
00457 
00458 typedef struct {
00459 /*00*/ WORD res00; /* 0x0001 sometimes 0x0003 ?? */
00460 /*02*/ WORD res02; /* 0xffff */
00461 /*04*/ BYTE res04; /* 0x01 */
00462 /*05*/ DWORD cbExtra; /* No of bytes that follow */
00463 } SLTG_MemberHeader;
00464 
00465 typedef struct {
00466 /*00*/  WORD magic; /* 0x120a */
00467 /*02*/  WORD next;  /* offset in bytes to next block from start of block
00468                            group, 0xffff if last item */
00469 /*04*/  WORD name;  /* offset to name within name table */
00470 /*06*/  WORD value; /* offset to value from start of block group */
00471 /*08*/  WORD res08; /* 0x56 */
00472 /*0a*/  DWORD memid;    /* memid */
00473 /*0e*/  WORD helpcontext;/* 0xfffe == no context, 0x0001 == stored in EnumInfo struct, else offset
00474                 to value from start of block group */
00475 /*10*/  WORD helpstring;/* offset from start of block group to string offset */
00476 } SLTG_EnumItem;
00477 
00478 #define SLTG_ENUMITEM_MAGIC 0x120a
00479 
00480 typedef struct {
00481 /*00*/  WORD vt;    /* vartype, 0xffff marks end. */
00482 /*02*/  WORD res02; /* ?, 0xffff marks end */
00483 } SLTG_AliasItem;
00484 
00485 #define SLTG_ALIASITEM_MAGIC 0x001d
00486 
00487 
00488 typedef struct {
00489     BYTE magic; /* 0x4c or 0x6c */
00490     BYTE inv;   /* high nibble is INVOKE_KIND, low nibble = 2 */
00491     WORD next;  /* byte offset from beginning of group to next fn */
00492     WORD name;  /* Offset within name table to name */
00493     DWORD dispid;   /* dispid */
00494     WORD helpcontext; /* helpcontext (again 1 is special) */
00495     WORD helpstring;/* helpstring offset to offset */
00496     WORD arg_off;   /* offset to args from start of block */
00497     BYTE nacc;  /* lowest 3bits are CALLCONV, rest are no of args */
00498         BYTE retnextopt;/* if 0x80 bit set ret type follows else next WORD
00499                is offset to ret type. No of optional args is
00500                middle 6 bits */
00501     WORD rettype;   /* return type VT_?? or offset to ret type */
00502     WORD vtblpos;   /* position in vtbl? */
00503     WORD funcflags; /* present if magic == 0x6c */
00504 /* Param list starts, repeat next two as required */
00505 #if 0
00506     WORD  name; /* offset to 2nd letter of name */
00507     WORD+ type; /* VT_ of param */
00508 #endif
00509 } SLTG_Function;
00510 
00511 #define SLTG_FUNCTION_MAGIC 0x4c
00512 #define SLTG_FUNCTION_WITH_FLAGS_MAGIC 0x6c
00513 
00514 typedef struct {
00515 /*00*/  BYTE magic;     /* 0xdf */
00516 /*01*/  BYTE res01;     /* 0x00 */
00517 /*02*/  DWORD res02;        /* 0xffffffff */
00518 /*06*/  DWORD res06;        /* 0xffffffff */
00519 /*0a*/  DWORD res0a;        /* 0xffffffff */
00520 /*0e*/  DWORD res0e;        /* 0xffffffff */
00521 /*12*/  DWORD res12;        /* 0xffffffff */
00522 /*16*/  DWORD res16;        /* 0xffffffff */
00523 /*1a*/  DWORD res1a;        /* 0xffffffff */
00524 /*1e*/  DWORD res1e;        /* 0xffffffff */
00525 /*22*/  DWORD res22;        /* 0xffffffff */
00526 /*26*/  DWORD res26;        /* 0xffffffff */
00527 /*2a*/  DWORD res2a;        /* 0xffffffff */
00528 /*2e*/  DWORD res2e;        /* 0xffffffff */
00529 /*32*/  DWORD res32;        /* 0xffffffff */
00530 /*36*/  DWORD res36;        /* 0xffffffff */
00531 /*3a*/  DWORD res3a;        /* 0xffffffff */
00532 /*3e*/  DWORD res3e;        /* 0xffffffff */
00533 /*42*/  WORD  res42;        /* 0xffff */
00534 /*44*/  DWORD number;       /* this is 8 times the number of refs */
00535 /*48*/  /* Now we have number bytes (8 for each ref) of SLTG_UnknownRefInfo */
00536 
00537 /*50*/  WORD res50;     /* 0xffff */
00538 /*52*/  BYTE res52;     /* 0x01 */
00539 /*53*/  DWORD res53;        /* 0x00000000 */
00540 /*57*/  SLTG_Name names[1];
00541   /*    Now we have number/8 SLTG_Names (first WORD is no of bytes in the ascii
00542    *    string).  Strings look like "*\Rxxxx*#n".  If xxxx == ffff then the
00543    *    ref refers to the nth type listed in this library (0 based).  Else
00544    *    the xxxx (which maybe fewer than 4 digits) is the offset into the name
00545    *    table to a string "*\G{<guid>}#1.0#0#C:\WINNT\System32\stdole32.tlb#"
00546    *    The guid is the typelib guid; the ref again refers to the nth type of
00547    *    the imported typelib.
00548    */
00549 
00550 /*xx*/ BYTE resxx;      /* 0xdf */
00551 
00552 } SLTG_RefInfo;
00553 
00554 #define SLTG_REF_MAGIC 0xdf
00555 
00556 typedef struct {
00557     WORD res00; /* 0x0001 */
00558     BYTE res02; /* 0x02 */
00559     BYTE res03; /* 0x40 if internal ref, 0x00 if external ? */
00560     WORD res04; /* 0xffff */
00561     WORD res06; /* 0x0000, 0x0013 or 0xffff ?? */
00562 } SLTG_UnknownRefInfo;
00563 
00564 typedef struct {
00565   WORD res00; /* 0x004a */
00566   WORD next;  /* byte offs to next interface */
00567   WORD res04; /* 0xffff */
00568   BYTE impltypeflags; /* IMPLTYPEFLAG_* */
00569   BYTE res07; /* 0x80 */
00570   WORD res08; /* 0x0012, 0x0028 ?? */
00571   WORD ref;   /* number in ref table ? */
00572   WORD res0c; /* 0x4000 */
00573   WORD res0e; /* 0xfffe */
00574   WORD res10; /* 0xffff */
00575   WORD res12; /* 0x001d */
00576   WORD pos_in_table; /* 0x0, 0x4, ? */
00577 } SLTG_ImplInfo;
00578 
00579 #define SLTG_IMPL_MAGIC 0x004a
00580 
00581 typedef struct {
00582   BYTE magic; /* 0x0a */
00583   BYTE typepos;
00584   WORD next;
00585   WORD name;
00586   WORD byte_offs; /* pos in struct */
00587   WORD type; /* if typepos == 0x02 this is the type, else offset to type */
00588   DWORD memid;
00589   WORD helpcontext; /* ?? */
00590   WORD helpstring; /* ?? */
00591 } SLTG_RecordItem;
00592 
00593 #define SLTG_RECORD_MAGIC 0x0a
00594 
00595 
00596 /* CARRAYs look like this
00597 WORD type == VT_CARRAY
00598 WORD offset from start of block to SAFEARRAY
00599 WORD typeofarray
00600 */
00601 
00602 #include "poppack.h"
00603 
00604 /*---------------------------END--------------------------------------------*/
00605 #endif

Generated on Fri May 25 2012 04:36:15 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.