Strukturen und Enums für TypeLib

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Strukturen und Enums für TypeLib

Beitrag von Josh »

Sollte mal wer in einer TyeLib werken müssen, hier anschließend die benötigten Strukturen und Enums. Die Strukturen sind für 32 und 64 bit gültig. Wenn einer einen Fehler findet, bitte um Mitteilung, damit ich es korrigieren kann.

Die C Sourcen stammen aus der OAIdl.h und von aus dem MSDN unter http://msdn.microsoft.com/en-us/library ... T.10).aspx. Unter dieser Adresse ist auch die beste Beschreibung der Funktionen, die ich gefunden habe.

Da Microsoft gerne mal die Url's ändert, hier noch der Pfad für die manuelle Suche:
MSDN Library / Open Specifications / Protocols / Windows Protocols / Windows Communication Protocols / Windows Communciation Protocols / [MS_OAUT]: OLE Automation Protocol Specification / 2 Messages / 2.2 Common Data Types

Code: Alles auswählen

  Structure IDLDESC
    Reserved.i
    IdlFlags.w
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86 : padding.b[2] : CompilerEndIf
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding.b[6] : CompilerEndIf
  EndStructure

  Structure TYPEDESC
    StructureUnion
      *TypDesc.TYPEDESC  ; wenn VT_PTR, VT_SAFEARRAY
      *ArrDesc.ARRAYDESC ; wenn VT_CARRAY
      hreftype.l         ; wenn VT_USERDEFINED
    EndStructureUnion
    VT.w
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86 : padding.b[2] : CompilerEndIf
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding.b[6] : CompilerEndIf
  EndStructure

  Structure PARAMDESCEX
    cBytes.l; memory size of the PARAMDESCEX
    padding.b[4] ; warum bei x32 ???
    DefaultValue.VARIANT
  EndStructure

  Structure PARAMDESC
    *ParDescEx.PARAMDESCEX ; wenn ParFlags = PARAMFLAG_FHASDEFAULT
    ParFlags.w ; enumPARAMFLAGS
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86 : padding.b[2] : CompilerEndIf
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding.b[6] : CompilerEndIf
  EndStructure

  Structure ELEMDESC
    TypDesc.TYPEDESC
    ParDesc.PARAMDESC
  EndStructure 

  Structure FUNCDESC
    memId.l
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding1.b[4] : CompilerEndIf
    reserved1.i
    *ElemDescParam.ELEMDESC
    FncKind.l    ; enumFUNCKIND
    InvKind.l    ; enumINVOKEKIND
    CallConv.l   ; enumCALLCONV
    cParams.w
    cParamsOpt.w
    oVft.w
    reserved2.w
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding2.b[4] : CompilerEndIf
    ElemDescFunc.ELEMDESC
    FncFlags.w   ; enumFUNCFLAGS
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86 : padding3.b[2] : CompilerEndIf
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding3.b[6] : CompilerEndIf
  EndStructure

  Structure VARDESC
    memId.l
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 : padding1.b[4] : CompilerEndIf
    reserved.i
    StructureUnion
      oInst.l        ; wenn varkind = VAR_PERINSTANCE | VAR_DISPATCH | VAR_STATIC
      *Value.VARIANT ; wenn varkind = VAR_CONST
    EndStructureUnion
    ElemDescVar.ELEMDESC
    VarFlags.w ; enumVARFLAGS
    padding2.b[2]
    VarKind.l  ; enumVARKIND
  EndStructure 

  Structure TYPEATTR
    guid.GUID
    lcId.l
    reserved1.l
    reserved2.l
    reserved3.l
    reserved4.i
    SizeInstance.l
    TypKind.l   ; enumTYPEKIND
    cFuncs.w
    cVars.w
    cImplTypes.w
    cbSizeVft.w
    cbAlignment.w
    TypeFlags.w ; enumTYPEFLAGS
    MajorVerNum.w
    MinorVerNum.w
    TypDescAlias.TYPEDESC
    IdlDesc.IDLDESC
  EndStructure

  Structure TLIBATTR
    guid.GUID
    lcId.l
    SysKind.l  ; enumSYSKIND
    MajorVerNum.w
    MinorVerNum.w
    LibFlags.w ; enumLIBFLAGS
    padding.b[2]
  EndStructure

Code: Alles auswählen

  Enumeration ; enumTYPEFLAGS
    #TYPEFLAG_FAPPOBJECT         = 1
    #TYPEFLAG_FCANCREATE         = 2
    #TYPEFLAG_FLICENSED          = 4
    #TYPEFLAG_FPREDECLID         = 8
    #TYPEFLAG_FHIDDEN            = 16
    #TYPEFLAG_FCONTROL           = 32
    #TYPEFLAG_FDUAL              = 64
    #TYPEFLAG_FNONEXTENSIBLE     = 128
    #TYPEFLAG_FOLEAUTOMATION     = 256 ;Wenn Oleautomation oder Dual, NIE bei Dispinterface
    #TYPEFLAG_FRESTRICTED        = 512
    #TYPEFLAG_FAGGREGATABLE      = 1024
    #TYPEFLAG_FREPLACEABLE       = 2048
    #TYPEFLAG_FDISPATCHABLE      = 4096
    #TYPEFLAG_FREVERSEBIND       = 8192
  EndEnumeration

  Enumeration ; enumVARFLAGS
    #VARFLAG_FREADONLY           = 1
    #VARFLAG_FSOURCE             = 2
    #VARFLAG_FBINDABLE           = 4
    #VARFLAG_FREQUESTEDIT        = 8
    #VARFLAG_FDISPLAYBIND        = 16
    #VARFLAG_FDEFAULTBIND        = 32
    #VARFLAG_FHIDDEN             = 64
    #VARFLAG_FRESTRICTED         = 128
    #VARFLAG_FDEFAULTCOLLELEM    = 256
    #VARFLAG_FUIDEFAULT          = 512
    #VARFLAG_FNONBROWSABLE       = 1024
    #VARFLAG_FREPLACEABLE        = 2048
    #VARFLAG_FIMMEDIATEBIND      = 4096
  EndEnumeration

  Enumeration ; enumFUNCFLAGS
    #FUNCFLAG_FRESTRICTED        = 1
    #FUNCFLAG_FSOURCE            = 2
    #FUNCFLAG_FBINDABLE          = 4
    #FUNCFLAG_FREQUESTEDIT       = 8
    #FUNCFLAG_FDISPLAYBIND       = 16
    #FUNCFLAG_FDEFAULTBIND       = 32
    #FUNCFLAG_FHIDDEN            = 64
    #FUNCFLAG_FUSESGETLASTERROR  = 128
    #FUNCFLAG_FDEFAULTCOLLELEM   = 256
    #FUNCFLAG_FUIDEFAULT         = 512
    #FUNCFLAG_FNONBROWSABLE      = 1024
    #FUNCFLAG_FREPLACEABLE       = 2048
    #FUNCFLAG_FIMMEDIATEBIND     = 4096
  EndEnumeration

  Enumeration ; enumLIBFLAGS
    #LIBFLAG_FRESTRICTED         = 1
    #LIBFLAG_FCONTROL            = 2
    #LIBFLAG_FHIDDEN             = 4
    #LIBFLAG_FHASDISKIMAGE       = 8
  EndEnumeration

  Enumeration ; enumPARAMFLAGS
    #PARAMFLAG_NONE              = 0
    #PARAMFLAG_FIN               = 1
    #PARAMFLAG_FOUT              = 2
    #PARAMFLAG_FLCID             = 4
    #PARAMFLAG_FRETVAL           = 8
    #PARAMFLAG_FOPT              = 16
    #PARAMFLAG_FHASDEFAULT       = 32
    #PARAMFLAG_FHASCUSTDATA      = 64
  EndEnumeration   

  Enumeration ; enumIMPLTYPEFLAGS
    #IMPLTYPEFLAG_FDEFAULT       = 1
    #IMPLTYPEFLAG_FSOURCE        = 2
    #IMPLTYPEFLAG_FRESTRICTED    = 4
    #IMPLTYPEFLAG_FDEFAULTVTABLE = 8
  EndEnumeration

  Enumeration ; enumTYPEKIND
    #TKIND_ENUM                  = 0
    #TKIND_RECORD                = 1
    #TKIND_MODULE                = 2 
    #TKIND_INTERFACE             = 3
    #TKIND_DISPATCH              = 4
    #TKIND_COCLASS               = 5
    #TKIND_ALIAS                 = 6
    #TKIND_UNION                 = 7
  EndEnumeration

  Enumeration ; enumVARKIND
    #VAR_PERINSTANCE             = 0
    #VAR_STATIC                  = 1
    #VAR_CONST                   = 2
    #VAR_DISPATCH                = 3
  EndEnumeration

  Enumeration ; enumFUNCKIND
    #FUNC_PUREVIRTUAL            = 1
    #FUNC_STATIC                 = 3
    #FUNC_DISPATCH               = 4
  EndEnumeration

  Enumeration ; enumINVOKEKIND
    #INVOKE_FUNC                 = 1
    #INVOKE_PROPERTYGET          = 2
    #INVOKE_PROPERTYPUT          = 4
    #INVOKE_PROPERTYPUTREF       = 8
  EndEnumeration

  Enumeration ; enumSYSKIND
    #SYS_WIN16                   = 0
    #SYS_WIN32                   = 1
    #SYS_MAC                     = 2
    #SYS_WIN64                   = 3
  EndEnumeration

  Enumeration ; enumDESCKIND
    #DESCKIND_NONE               = 0
    #DESCKIND_FUNCDESC           = 1
    #DESCKIND_VARDESC            = 2
    #DESCKIND_TYPECOMP           = 3
    #DESCKIND_IMPLICITAPPOBJ     = 4
  EndEnumeration

  Enumeration ; enumCALLCONV
    #CC_CDECL                    = 1
    #CC_MSCPASCAL                = 2
    #CC_STDCALL                  = 4
  EndEnumeration