ReactOS  0.4.14-dev-599-g2d4d3f5
typelib.h
Go to the documentation of this file.
1 /*
2  * typelib.h internal wine data structures
3  * used to decode typelib's
4  *
5  * Copyright 1999 Rein KLazes
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 #ifndef _WINE_TYPELIB_H
22 #define _WINE_TYPELIB_H
23 
24 #include <stdarg.h>
25 
26 #include "windef.h"
27 #include "winbase.h"
28 #include "oleauto.h"
29 
30 #define HELPDLLFLAG (0x0100)
31 #define DO_NOT_SEEK (-1)
32 
33 #define MSFT_HREFTYPE_INTHISFILE(href) (!((href) & 3))
34 #define MSFT_HREFTYPE_INDEX(href) ((href) /sizeof(MSFT_TypeInfoBase))
35 
36 /*-------------------------FILE STRUCTURES-----------------------------------*/
37 
38 /* There are two known file formats, those created with ICreateTypeLib
39  * have the signature "SLTG" as their first four bytes, while those created
40  * with ICreateTypeLib2 have "MSFT".
41  */
42 
43 /*****************************************************
44  * MSFT typelibs
45  *
46  * These are TypeLibs created with ICreateTypeLib2
47  *
48  */
49 
50 /*
51  * structure of the typelib type2 header
52  * it is at the beginning of a type lib file
53  *
54  */
55 
56 #define MSFT_SIGNATURE 0x5446534D /* "MSFT" */
57 
58 typedef struct tagMSFT_Header {
59 /*0x00*/INT magic1; /* 0x5446534D "MSFT" */
60  INT magic2; /* 0x00010002 version nr? */
61  INT posguid; /* position of libid in guid table */
62  /* (should be, else -1) */
63  INT lcid; /* locale id */
64 /*0x10*/INT lcid2;
65  INT varflags; /* (largely) unknown flags ,seems to be always 41 */
66  /* becomes 0x51 with a helpfile defined */
67  /* if help dll defined it's 0x151 */
68  /* update : the lower nibble is syskind */
69  INT version; /* set with SetVersion() */
70  INT flags; /* set with SetFlags() */
71 /*0x20*/INT nrtypeinfos; /* number of typeinfo's (till so far) */
72  INT helpstring; /* position of help string in stringtable */
75 /*0x30*/INT nametablecount; /* number of names in name table */
76  INT nametablechars; /* nr of characters in name table */
77  INT NameOffset; /* offset of name in name table */
78  INT helpfile; /* position of helpfile in stringtable */
79 /*0x40*/INT CustomDataOffset; /* if -1 no custom data, else it is offset */
80  /* in customer data/guid offset table */
81  INT res44; /* unknown always: 0x20 (guid hash size?) */
82  INT res48; /* unknown always: 0x80 (name hash size?) */
83  INT dispatchpos; /* HREFTYPE to IDispatch, or -1 if no IDispatch */
84 /*0x50*/INT nimpinfos; /* number of impinfos */
85 } MSFT_Header;
86 
87 /* segments in the type lib file have a structure like this: */
88 typedef struct tagMSFT_pSeg {
89  INT offset; /* absolute offset in file */
90  INT length; /* length of segment */
91  INT res08; /* unknown always -1 */
92  INT res0c; /* unknown always 0x0f in the header */
93  /* 0x03 in the typeinfo_data */
94 } MSFT_pSeg;
95 
96 /* layout of the main segment directory */
97 typedef struct tagMSFT_SegDir {
98 /*1*/MSFT_pSeg pTypeInfoTab; /* each type info get an entry of 0x64 bytes */
99  /* (25 ints) */
100 /*2*/MSFT_pSeg pImpInfo; /* table with info for imported types */
101 /*3*/MSFT_pSeg pImpFiles; /* import libraries */
102 /*4*/MSFT_pSeg pRefTab; /* References table */
103 /*5*/MSFT_pSeg pGuidHashTab; /* always exists, always same size (0x80) */
104  /* hash table with offsets to guid */
105 /*6*/MSFT_pSeg pGuidTab; /* all guids are stored here together with */
106  /* offset in some table???? */
107 /*7*/MSFT_pSeg pNameHashTab; /* always created, always same size (0x200) */
108  /* hash table with offsets to names */
109 /*8*/MSFT_pSeg pNametab; /* name tables */
110 /*9*/MSFT_pSeg pStringtab; /* string table */
111 /*A*/MSFT_pSeg pTypdescTab; /* table with type descriptors */
113 /*C*/MSFT_pSeg pCustData; /* data table, used for custom data and default */
114  /* parameter values */
115 /*D*/MSFT_pSeg pCDGuids; /* table with offsets for the guids and into */
116  /* the customer data table */
117 /*E*/MSFT_pSeg res0e; /* unknown */
118 /*F*/MSFT_pSeg res0f; /* unknown */
119 } MSFT_SegDir;
120 
121 
122 /* base type info data */
123 typedef struct tagMSFT_TypeInfoBase {
124 /*000*/ INT typekind; /* it is the TKIND_xxx */
125  /* some byte alignment stuff */
126  INT memoffset; /* points past the file, if no elements */
127  INT res2; /* zero if no element, N*0x40 */
128  INT res3; /* -1 if no element, (N-1)*0x38 */
129 /*010*/ INT res4; /* always? 3 */
130  INT res5; /* always? zero */
131  INT cElement; /* counts elements, HI=cVars, LO=cFuncs */
132  INT res7; /* always? zero */
133 /*020*/ INT res8; /* always? zero */
134  INT res9; /* always? zero */
135  INT resA; /* always? zero */
136  INT posguid; /* position in guid table */
137 /*030*/ INT flags; /* Typeflags */
138  INT NameOffset; /* offset in name table */
139  INT version; /* element version */
140  INT docstringoffs; /* offset of docstring in string tab */
141 /*040*/ INT helpstringcontext; /* */
143  INT oCustData; /* offset in customer data table */
144 #ifdef WORDS_BIGENDIAN
145  INT16 cbSizeVft; /* virtual table size, including inherits */
146  INT16 cImplTypes; /* nr of implemented interfaces */
147 #else
148  INT16 cImplTypes; /* nr of implemented interfaces */
149  INT16 cbSizeVft; /* virtual table size, including inherits */
150 #endif
151 /*050*/ INT size; /* size in bytes, at least for structures */
152  /* FIXME: name of this field */
153  INT datatype1; /* position in type description table */
154  /* or in base interfaces */
155  /* if coclass: offset in reftable */
156  /* if interface: reference to inherited if */
157  /* if module: offset to dllname in name table */
158  INT datatype2; /* for interfaces: hiword is num of inherited funcs */
159  /* loword is num of inherited interfaces */
160  INT res18; /* always? 0 */
161 /*060*/ INT res19; /* always? -1 */
163 
164 /* layout of an entry with information on imported types */
165 typedef struct tagMSFT_ImpInfo {
166  INT flags; /* bits 0 - 15: count */
167  /* bit 16: if set oGuid is an offset to Guid */
168  /* if clear oGuid is a typeinfo index in the specified typelib */
169  /* bits 24 - 31: TKIND of reference */
170  INT oImpFile; /* offset in the Import File table */
171  INT oGuid; /* offset in Guid table or typeinfo index (see bit 16 of res0) */
172 } MSFT_ImpInfo;
173 
174 #define MSFT_IMPINFO_OFFSET_IS_GUID 0x00010000
175 
176 /* function description data */
177 typedef struct {
178  INT Info; /* record size including some extra stuff */
179  INT DataType; /* data type of the member, eg return of function */
180  INT Flags; /* something to do with attribute flags (LOWORD) */
181 #ifdef WORDS_BIGENDIAN
182  INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
183  INT16 VtableOffset; /* offset in vtable */
184 #else
185  INT16 VtableOffset; /* offset in vtable */
186  INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
187 #endif
188  INT FKCCIC; /* bit string with the following */
189  /* meaning (bit 0 is the msb): */
190  /* bit 2 indicates that oEntry is numeric */
191  /* bit 3 that parameter has default values */
192  /* calling convention (bits 4-7 ) */
193  /* bit 8 indicates that custom data is present */
194  /* Invocation kind (bits 9-12 ) */
195  /* function kind (eg virtual), bits 13-15 */
196 #ifdef WORDS_BIGENDIAN
197  INT16 nroargs; /* nr of optional arguments */
198  INT16 nrargs; /* number of arguments (including optional ????) */
199 #else
200  INT16 nrargs; /* number of arguments (including optional ????) */
201  INT16 nroargs; /* nr of optional arguments */
202 #endif
203 
204  /* optional attribute fields, the number of them is variable */
207  INT oEntry; /* either offset in string table or numeric as it is */
208  INT res9; /* unknown (-1) */
209  INT resA; /* unknown (-1) */
211  /* these are controlled by a bit set in the FKCCIC field */
212  INT oCustData; /* custom data for function */
213  INT oArgCustData[1]; /* custom data per argument */
215 
216 /* after this may follow an array with default value pointers if the
217  * appropriate bit in the FKCCIC field has been set:
218  * INT oDefaultValue[nrargs];
219  */
220 
221  /* Parameter info one per argument*/
222 typedef struct {
227 
228 /* Variable description data */
229 typedef struct {
230  INT Info; /* record size including some extra stuff */
231  INT DataType; /* data type of the variable */
232  INT Flags; /* VarFlags (LOWORD) */
233 #ifdef WORDS_BIGENDIAN
234  INT16 vardescsize; /* size of reconstituted VARDESC and related structs */
235  INT16 VarKind; /* VarKind */
236 #else
237  INT16 VarKind; /* VarKind */
238  INT16 vardescsize; /* size of reconstituted VARDESC and related structs */
239 #endif
240  INT OffsValue; /* value of the variable or the offset */
241  /* in the data structure */
242  /* optional attribute fields, the number of them is variable */
243  /* controlled by record length */
246  INT res9; /* unknown (-1) */
247  INT oCustData; /* custom data for variable */
250 
251 /* Structure of the reference data */
252 typedef struct {
253  INT reftype; /* either offset in type info table, then it's */
254  /* a multiple of 64 */
255  /* or offset in the external reference table */
256  /* with an offset of 1 */
258  INT oCustData; /* custom data */
259  INT onext; /* next offset, -1 if last */
261 
262 /* this is how a guid is stored */
263 typedef struct {
265  INT hreftype; /* -2 for the typelib guid, typeinfo offset
266  for typeinfo guid, low two bits are 01 if
267  this is an imported typeinfo, low two bits
268  are 10 if this is an imported typelib (used
269  by imported typeinfos) */
270  INT next_hash; /* offset to next guid in the hash bucket */
272 /* some data preceding entries in the name table */
273 typedef struct {
274  INT hreftype; /* is -1 if name is for neither a typeinfo,
275  a variable, or a function (that is, name
276  is for a typelib or a function parameter).
277  otherwise is the offset of the first
278  typeinfo that this name refers to (either
279  to the typeinfo itself or to a member of
280  the typeinfo */
281  INT next_hash; /* offset to next name in the hash bucket */
282  INT namelen; /* only lower 8 bits are valid */
283  /* 0x1000 if name is only used once as a variable name */
284  /* 0x2000 if name is a variable in an enumeration */
285  /* 0x3800 if name is typeinfo name */
287 /* the custom data table directory has entries like this */
288 typedef struct {
291  INT next; /* next offset in the table, -1 if it's the last */
292 } MSFT_CDGuid;
293 
294 
295 /***********************************************************
296  *
297  * SLTG typelibs.
298  *
299  * These are created with ICreateTypeLib
300  *
301  */
302 
303 #include "pshpack1.h"
304 
305 typedef struct {
306 /*00*/ DWORD SLTG_magic; /* 0x47544c53 == "SLTG" */
307 /*04*/ WORD nrOfFileBlks; /* no of SLTG_BlkEntry's + 1 */
308 /*06*/ WORD res06; /* ?? always 9 */
309 /*08*/ WORD res08; /* some kind of len/offset ?? */
310 /*0a*/ WORD first_blk; /* 1 based index into blk entries that
311  corresponds to first block in file */
312 /*0c*/ DWORD res0c; /* always 0x000204ff */
313 /*10*/ DWORD res10; /* always 0x00000000 */
314 /*14*/ DWORD res14; /* always 0x000000c0 */
315 /*18*/ DWORD res18; /* always 0x46000000 */
316 /*1c*/ DWORD res1c; /* always 0x00000044 */
317 /*20*/ DWORD res20; /* always 0xffff0000 */
318 } SLTG_Header;
319 
320 /* This gets followed by a list of block entries */
321 typedef struct {
322 /*00*/ DWORD len;
323 /*04*/ WORD index_string; /* offs from start of SLTG_Magic to index string */
324 /*06*/ WORD next;
325 } SLTG_BlkEntry;
326 
327 /* The order of the blocks in the file is given by starting at Block
328  entry firt_blk and stepping through using the next pointer */
329 
330 /* These then get followed by this magic */
331 typedef struct {
332 /*00*/ BYTE res00; /* always 0x01 */
333 /*01*/ CHAR CompObj_magic[8]; /* always "CompObj" */
334 /*09*/ CHAR dir_magic[4]; /* always "dir" */
335 } SLTG_Magic;
336 
337 #define SLTG_COMPOBJ_MAGIC "CompObj"
338 #define SLTG_DIR_MAGIC "dir"
339 
340 /* Next we have SLTG_Header.nrOfFileBlks - 2 of Index strings. These
341 are presumably unique to within the file and look something like
342 "AAAAAAAAAA" with the first character incremented from 'A' to ensure
343 uniqueness. I guess successive chars increment when we need to wrap
344 the first one. */
345 
346 typedef struct {
347 /*00*/ CHAR string[11];
348 } SLTG_Index;
349 
350 
351 /* This is followed by SLTG_pad9 */
352 typedef struct {
353 /*00*/ CHAR pad[9]; /* 9 '\0's */
354 } SLTG_Pad9;
355 
356 
357 /* Now we have the noOfFileBlks - 1 worth of blocks. The length of
358 each block is given by its entry in SLTG_BlkEntry. */
359 
360 /* type SLTG_NAME in rather like a BSTR except that the length in
361 bytes is given by the first WORD and the string contains 8bit chars */
362 
363 typedef WORD SLTG_Name;
364 
365 /* The main library block looks like this. This one seems to come last */
366 
367 typedef struct {
368 /*00*/ WORD magic; /* 0x51cc */
369 /*02*/ WORD res02; /* 0x0003, 0x0004 */
370 /*04*/ WORD name; /* offset to name in name table */
371 /*06*/ SLTG_Name res06; /* maybe this is just WORD == 0xffff */
375  WORD syskind; /* == 1 for win32, 0 for win16 */
376  WORD lcid; /* == 0x409, 0x809 etc */
377  DWORD res12; /* == 0 */
378  WORD libflags; /* LIBFLAG_* */
382 } SLTG_LibBlk;
383 
384 #define SLTG_LIBBLK_MAGIC 0x51cc
385 
386 /* we then get 0x40 bytes worth of 0xffff or small numbers followed by
387  nrOfFileBlks - 2 of these */
388 typedef struct {
389  SLTG_Name index_name; /* This refers to a name in the directory */
390  SLTG_Name other_name; /* Another one of these weird names */
391  WORD res1a; /* 0xffff */
392  WORD name_offs; /* offset to name in name table */
393  WORD hlpstr_len; /* if this is non-zero we get this many
394  bytes before the next element, which seem
395  to reference the docstring of the type ? */
396  WORD res20; /* 0xffff */
398  WORD res26; /* 0xffff */
402 
403 /* Next we get WORD 0x0003 followed by a DWORD which if we add to
404 0x216 gives the offset to the name table from the start of the LibBlk
405 struct */
406 
407 typedef struct {
408 /*00*/ WORD magic; /* 0x0501 */
409 /*02*/ DWORD href_table; /* if not 0xffffffff, then byte offset from
410  beginning of struct to href table */
411 /*06*/ DWORD res06; /* 0xffffffff */
412 /*0a*/ DWORD elem_table; /* offset to members */
413 /*0e*/ DWORD res0e; /* 0xffffffff */
414 /*12*/ WORD major_version; /* major version number */
415 /*14*/ WORD minor_version; /* minor version number */
416 /*16*/ DWORD res16; /* 0xfffe0000 or 0xfffc0000 (on dual interfaces?) */
417 /*1a*/ BYTE typeflags1;/* 0x02 | top 5 bits hold l5sbs of TYPEFLAGS */
418 /*1b*/ BYTE typeflags2;/* TYPEFLAGS >> 5 */
419 /*1c*/ BYTE typeflags3;/* 0x02*/
420 /*1d*/ BYTE typekind; /* 0x03 == TKIND_INTERFACE etc. */
421 /*1e*/ DWORD res1e; /* 0x00000000 or 0xffffffff */
423 
424 #define SLTG_TIHEADER_MAGIC 0x0501
425 
426 typedef struct {
427 /*00*/ WORD cFuncs;
428 /*02*/ WORD cVars;
430 /*06*/ WORD res06; /* always 0000 */
431 /*08*/ WORD funcs_off; /* offset to functions (starting from the member header) */
432 /*0a*/ WORD vars_off; /* offset to vars (starting from the member header) */
433 /*0c*/ WORD impls_off; /* offset to implemented types (starting from the member header) */
434 /*0e*/ WORD funcs_bytes; /* bytes used by function data */
435 /*10*/ WORD vars_bytes; /* bytes used by var data */
436 /*12*/ WORD impls_bytes; /* bytes used by implemented type data */
437 /*14*/ WORD tdescalias_vt; /* for TKIND_ALIAS */
438 /*16*/ WORD res16; /* always ffff */
439 /*18*/ WORD res18; /* always 0000 */
440 /*1a*/ WORD res1a; /* always 0000 */
441 /*1c*/ WORD simple_alias; /* tdescalias_vt is a vt rather than an offset? */
442 /*1e*/ WORD res1e; /* always 0000 */
445 /*24*/ WORD res24;
446 /*26*/ WORD res26;
448 /*2a*/ WORD res2a; /* always ffff */
449 /*2c*/ WORD res2c; /* always ffff */
450 /*2e*/ WORD res2e; /* always ffff */
451 /*30*/ WORD res30; /* always ffff */
452 /*32*/ WORD res32;
453 /*34*/ WORD res34;
455 
456 typedef struct {
457 /*00*/ WORD res00; /* 0x0001 sometimes 0x0003 ?? */
458 /*02*/ WORD res02; /* 0xffff */
459 /*04*/ BYTE res04; /* 0x01 */
460 /*05*/ DWORD cbExtra; /* No of bytes that follow */
462 
463 typedef struct {
464 /*00*/ WORD magic; /* 0x120a */
465 /*02*/ WORD next; /* offset in bytes to next block from start of block
466  group, 0xffff if last item */
467 /*04*/ WORD name; /* offset to name within name table */
468 /*06*/ WORD value; /* offset to value from start of block group */
469 /*08*/ WORD res08; /* 0x56 */
470 /*0a*/ DWORD memid; /* memid */
471 /*0e*/ WORD helpcontext;/* 0xfffe == no context, 0x0001 == stored in EnumInfo struct, else offset
472  to value from start of block group */
473 /*10*/ WORD helpstring;/* offset from start of block group to string offset */
474 } SLTG_EnumItem;
475 
476 #define SLTG_ENUMITEM_MAGIC 0x120a
477 
478 typedef struct {
479  BYTE magic; /* 0x4c, 0xcb or 0x8b with optional SLTG_FUNCTION_FLAGS_PRESENT flag */
480  BYTE inv; /* high nibble is INVOKE_KIND, low nibble = 2 */
481  WORD next; /* byte offset from beginning of group to next fn */
482  WORD name; /* Offset within name table to name */
483  DWORD dispid; /* dispid */
484  WORD helpcontext; /* helpcontext (again 1 is special) */
485  WORD helpstring;/* helpstring offset to offset */
486  WORD arg_off; /* offset to args from start of block */
487  BYTE nacc; /* lowest 3bits are CALLCONV, rest are no of args */
488  BYTE retnextopt;/* if 0x80 bit set ret type follows else next WORD
489  is offset to ret type. No of optional args is
490  middle 6 bits */
491  WORD rettype; /* return type VT_?? or offset to ret type */
492  WORD vtblpos; /* position in vtbl? */
493  WORD funcflags; /* present if magic & 0x20 */
494 /* Param list starts, repeat next two as required */
495 #if 0
496  WORD name; /* offset to 2nd letter of name */
497  WORD+ type; /* VT_ of param */
498 #endif
499 } SLTG_Function;
500 
501 #define SLTG_FUNCTION_FLAGS_PRESENT 0x20
502 #define SLTG_FUNCTION_MAGIC 0x4c
503 #define SLTG_DISPATCH_FUNCTION_MAGIC 0xcb
504 #define SLTG_STATIC_FUNCTION_MAGIC 0x8b
505 
506 typedef struct {
507 /*00*/ BYTE magic; /* 0xdf */
508 /*01*/ BYTE res01; /* 0x00 */
509 /*02*/ DWORD res02; /* 0xffffffff */
510 /*06*/ DWORD res06; /* 0xffffffff */
511 /*0a*/ DWORD res0a; /* 0xffffffff */
512 /*0e*/ DWORD res0e; /* 0xffffffff */
513 /*12*/ DWORD res12; /* 0xffffffff */
514 /*16*/ DWORD res16; /* 0xffffffff */
515 /*1a*/ DWORD res1a; /* 0xffffffff */
516 /*1e*/ DWORD res1e; /* 0xffffffff */
517 /*22*/ DWORD res22; /* 0xffffffff */
518 /*26*/ DWORD res26; /* 0xffffffff */
519 /*2a*/ DWORD res2a; /* 0xffffffff */
520 /*2e*/ DWORD res2e; /* 0xffffffff */
521 /*32*/ DWORD res32; /* 0xffffffff */
522 /*36*/ DWORD res36; /* 0xffffffff */
523 /*3a*/ DWORD res3a; /* 0xffffffff */
524 /*3e*/ DWORD res3e; /* 0xffffffff */
525 /*42*/ WORD res42; /* 0xffff */
526 /*44*/ DWORD number; /* this is 8 times the number of refs */
527 /*48*/ /* Now we have number bytes (8 for each ref) of SLTG_UnknownRefInfo */
528 
529 /*50*/ WORD res50; /* 0xffff */
530 /*52*/ BYTE res52; /* 0x01 */
531 /*53*/ DWORD res53; /* 0x00000000 */
532 /*57*/ SLTG_Name names[1];
533  /* Now we have number/8 SLTG_Names (first WORD is no of bytes in the ascii
534  * string). Strings look like "*\Rxxxx*#n". If xxxx == ffff then the
535  * ref refers to the nth type listed in this library (0 based). Else
536  * the xxxx (which maybe fewer than 4 digits) is the offset into the name
537  * table to a string "*\G{<guid>}#1.0#0#C:\WINNT\System32\stdole32.tlb#"
538  * The guid is the typelib guid; the ref again refers to the nth type of
539  * the imported typelib.
540  */
541 
542 /*xx*/ BYTE resxx; /* 0xdf */
543 
544 } SLTG_RefInfo;
545 
546 #define SLTG_REF_MAGIC 0xdf
547 
548 typedef struct {
549  WORD res00; /* 0x0001 */
550  BYTE res02; /* 0x02 */
551  BYTE res03; /* 0x40 if internal ref, 0x00 if external ? */
552  WORD res04; /* 0xffff */
553  WORD res06; /* 0x0000, 0x0013 or 0xffff ?? */
555 
556 typedef struct {
557  WORD res00; /* 0x004a */
558  WORD next; /* byte offs to next interface */
559  WORD res04; /* 0xffff */
560  BYTE impltypeflags; /* IMPLTYPEFLAG_* */
561  BYTE res07; /* 0x80 */
562  WORD res08; /* 0x0012, 0x0028 ?? */
563  WORD ref; /* number in ref table ? */
564  WORD res0c; /* 0x4000 */
565  WORD res0e; /* 0xfffe */
566  WORD res10; /* 0xffff */
567  WORD res12; /* 0x001d */
568  WORD pos_in_table; /* 0x0, 0x4, ? */
569 } SLTG_ImplInfo;
570 
571 #define SLTG_IMPL_MAGIC 0x004a
572 
573 typedef struct {
574  BYTE magic; /* 0x0a */
578  WORD byte_offs; /* pos in struct, or offset to const type or const data (if flags & 0x08) */
579  WORD type; /* if flags & 0x02 this is the type, else offset to type */
581  WORD helpcontext; /* ?? */
582  WORD helpstring; /* ?? */
583  WORD varflags; /* only present if magic & 0x02 */
584 } SLTG_Variable;
585 
586 #define SLTG_VAR_MAGIC 0x0a
587 #define SLTG_VAR_WITH_FLAGS_MAGIC 0x2a
588 
589 
590 /* CARRAYs look like this
591 WORD type == VT_CARRAY
592 WORD offset from start of block to SAFEARRAY
593 WORD typeofarray
594 */
595 
596 #include "poppack.h"
597 
598 /* The OLE Automation ProxyStub Interface Class (aka Typelib Marshaler) */
599 DEFINE_OLEGUID( CLSID_PSDispatch, 0x00020420, 0x0000, 0x0000 );
600 DEFINE_OLEGUID( CLSID_PSEnumVariant, 0x00020421, 0x0000, 0x0000 );
601 DEFINE_OLEGUID( CLSID_PSTypeInfo, 0x00020422, 0x0000, 0x0000 );
602 DEFINE_OLEGUID( CLSID_PSTypeLib, 0x00020423, 0x0000, 0x0000 );
603 DEFINE_OLEGUID( CLSID_PSOAInterface, 0x00020424, 0x0000, 0x0000 );
604 DEFINE_OLEGUID( CLSID_PSTypeComp, 0x00020425, 0x0000, 0x0000 );
605 
606 /*---------------------------END--------------------------------------------*/
607 #endif
WORD varflags
Definition: typelib.h:583
WORD first_blk
Definition: typelib.h:310
INT nametablecount
Definition: typelib.h:75
DWORD res3a
Definition: typelib.h:523
WORD byte_offs
Definition: typelib.h:578
WORD helpcontext
Definition: typelib.h:471
WORD res08
Definition: typelib.h:469
DWORD res1c
Definition: typelib.h:316
BYTE magic
Definition: typelib.h:507
WORD helpcontext
Definition: typelib.h:581
WORD pos_in_table
Definition: typelib.h:568
MSFT_pSeg pStringtab
Definition: typelib.h:110
WORD magic
Definition: typelib.h:464
DWORD res02
Definition: typelib.h:509
BYTE flags
Definition: typelib.h:575
MSFT_pSeg pCustData
Definition: typelib.h:113
INT varflags
Definition: typelib.h:65
DWORD res10
Definition: typelib.h:313
BYTE magic
Definition: typelib.h:574
DWORD memid
Definition: typelib.h:470
MSFT_pSeg pNameHashTab
Definition: typelib.h:107
char CHAR
Definition: xmlstorage.h:175
INT nametablechars
Definition: typelib.h:76
MSFT_pSeg pTypeInfoTab
Definition: typelib.h:98
WORD res04
Definition: typelib.h:559
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
DWORD res53
Definition: typelib.h:531
INT helpstring
Definition: typelib.h:72
DWORD res14
Definition: typelib.h:314
DWORD res20
Definition: typelib.h:317
int32_t INT
Definition: typedefs.h:56
WORD min_vers
Definition: typelib.h:380
WORD tdescalias_vt
Definition: typelib.h:437
WORD funcflags
Definition: typelib.h:493
DWORD res0c
Definition: typelib.h:312
INT16 funcdescsize
Definition: typelib.h:186
INT helpfile
Definition: typelib.h:78
struct tagMSFT_ImpInfo MSFT_ImpInfo
DWORD memid
Definition: typelib.h:580
WORD res10
Definition: typelib.h:566
GLuint GLuint * names
Definition: glext.h:11545
DWORD len
Definition: typelib.h:322
DWORD number
Definition: typelib.h:526
DEFINE_OLEGUID(CLSID_PSDispatch, 0x00020420, 0x0000, 0x0000)
WORD res08
Definition: typelib.h:562
INT HelpString
Definition: typelib.h:245
DWORD res26
Definition: typelib.h:518
INT16 nrargs
Definition: typelib.h:200
INT16 VarKind
Definition: typelib.h:237
MSFT_pSeg res0f
Definition: typelib.h:118
DWORD SLTG_magic
Definition: typelib.h:306
INT nimpinfos
Definition: typelib.h:84
WORD res50
Definition: typelib.h:529
WORD libflags
Definition: typelib.h:378
DWORD res3e
Definition: typelib.h:524
DWORD res2a
Definition: typelib.h:519
INT DataOffset
Definition: typelib.h:290
DWORD res32
Definition: typelib.h:521
WORD syskind
Definition: typelib.h:375
WORD name
Definition: typelib.h:370
MSFT_pSeg pArrayDescriptions
Definition: typelib.h:112
GUID uuid
Definition: typelib.h:381
DWORD helpcontext
Definition: typelib.h:374
INT nrtypeinfos
Definition: typelib.h:71
INT offset
Definition: typelib.h:89
WORD res0e
Definition: typelib.h:565
BYTE impltypeflags
Definition: typelib.h:560
DWORD res0a
Definition: typelib.h:511
MSFT_pSeg pNametab
Definition: typelib.h:109
WORD helpcontext
Definition: typelib.h:484
INT HelpStringContext
Definition: typelib.h:210
INT helpstringcontext
Definition: typelib.h:73
DWORD res36
Definition: typelib.h:522
WORD res42
Definition: typelib.h:525
WORD arg_off
Definition: typelib.h:486
BYTE res01
Definition: typelib.h:508
DWORD res12
Definition: typelib.h:377
DWORD res22
Definition: typelib.h:517
MSFT_pSeg pTypdescTab
Definition: typelib.h:111
unsigned short WORD
Definition: ntddk_ex.h:93
DWORD res16
Definition: typelib.h:514
DWORD res1e
Definition: typelib.h:516
DWORD res12
Definition: typelib.h:513
INT helpcontext
Definition: typelib.h:74
unsigned long DWORD
Definition: ntddk_ex.h:95
BYTE res07
Definition: typelib.h:561
MSFT_pSeg pImpInfo
Definition: typelib.h:100
MSFT_pSeg res0e
Definition: typelib.h:117
INT res0c
Definition: typelib.h:92
INT NameOffset
Definition: typelib.h:77
INT dispatchpos
Definition: typelib.h:83
SLTG_Name index_name
Definition: typelib.h:389
INT GuidOffset
Definition: typelib.h:289
BYTE res00
Definition: typelib.h:332
WORD helpstring
Definition: typelib.h:473
struct tagMSFT_Header MSFT_Header
MSFT_pSeg pGuidHashTab
Definition: typelib.h:103
WORD lcid
Definition: typelib.h:376
WORD nrOfFileBlks
Definition: typelib.h:307
INT16 vardescsize
Definition: typelib.h:238
WORD res08
Definition: typelib.h:309
DWORD res18
Definition: typelib.h:315
unsigned char BYTE
Definition: mem.h:68
DWORD res06
Definition: typelib.h:510
WORD value
Definition: typelib.h:468
WORD helpstring
Definition: typelib.h:582
BYTE retnextopt
Definition: typelib.h:488
INT next
Definition: typelib.h:291
DWORD res1a
Definition: typelib.h:515
INT16 VtableOffset
Definition: typelib.h:185
WORD helpstring
Definition: typelib.h:485
WORD res0c
Definition: typelib.h:564
WORD res02
Definition: typelib.h:369
WORD index_string
Definition: typelib.h:323
WORD cbSizeInstance
Definition: typelib.h:443
INT res08
Definition: typelib.h:91
SLTG_Name res06
Definition: typelib.h:371
INT HelpStringContext
Definition: typelib.h:248
SLTG_Name helpfile
Definition: typelib.h:373
struct tagMSFT_TypeInfoBase MSFT_TypeInfoBase
SLTG_Name other_name
Definition: typelib.h:390
WORD res12
Definition: typelib.h:567
struct tagMSFT_SegDir MSFT_SegDir
DWORD dispid
Definition: typelib.h:483
DWORD res0e
Definition: typelib.h:512
WORD SLTG_Name
Definition: typelib.h:363
MSFT_pSeg pRefTab
Definition: typelib.h:102
INT length
Definition: typelib.h:90
WORD magic
Definition: typelib.h:368
MSFT_pSeg pGuidTab
Definition: typelib.h:105
WORD rettype
Definition: typelib.h:491
DWORD res2e
Definition: typelib.h:520
WORD res06
Definition: typelib.h:308
INT CustomDataOffset
Definition: typelib.h:79
struct tagMSFT_pSeg MSFT_pSeg
BYTE res52
Definition: typelib.h:530
BYTE resxx
Definition: typelib.h:542
WORD maj_vers
Definition: typelib.h:379
WORD vtblpos
Definition: typelib.h:492
BYTE magic
Definition: typelib.h:479
SLTG_Name helpstring
Definition: typelib.h:372
MSFT_pSeg pCDGuids
Definition: typelib.h:115
WORD res00
Definition: typelib.h:557
INT HelpContext
Definition: typelib.h:244
MSFT_pSeg pImpFiles
Definition: typelib.h:101
signed short INT16
GLuint const GLchar * name
Definition: glext.h:6031
INT16 nroargs
Definition: typelib.h:201