oaidl.inc

来自「这是一个数字图像处理的matlab仿真程序」· INC 代码 · 共 1,354 行 · 第 1/4 页

INC
1,354
字号
;---------------------------------------------------------------------
; OAIDL.INC   
;  interface typedefs
;  Contace author at ernie@surfree.com
;                 or 10206.2341@compuserve.com
;
; Copyright (c) 2/28/01  Ernest Murphy
;
; For educational use only. Any commercial re-use only by written license
;
;
;  includes the definitions of UNKNWN.H for IUnknown and IClassFactory
;  and the coinvoke .IF_SUCCEEDED, .IF_FAILED, SUCCEEDED and FAILED macros
;
;  Revisions:
;       5/4/00  change all interface defs to reflect new method name decoration
;       5/25/00 name decoration changes 
;       7/10/00 added DECIMAL_SETZERO macro, cleanup and re-arangement for clarity
;       7/12/00 major revision to interfaces, using macro techniques to inherite
;               common elements and simplify pointer typedefs.
;       7/28/00 for IID_NULL
;       12/29/00 added check for edx in coinvoke
;       2/27/01  corrected VARIANT_BOOL typedef from DWORD to WORD
;  
;---------------------------------------------------------------------
; the following prototypes are for polymorphic interface names, since
;  MASM does not assosciate the ptr typedefs with a particular struct.
;
; These particular comflicting interfaces lead to the new name decoration
;
; problem interfaces (polymprphic)
;  IDispatch_GetTypeInfo   comethod4 ?
;  IRecordInfo_GetTypeInfo comethod2 ?
;  ITypeLib_GetTypeInfo    comethod3 ?
;
;---------------------------------------------------------------------
option expr32
option casemap:none
option dotname

IFNDEF          OAIDL_INC
OAIDL_INC       EQU        1

;---------------------------------------------------------------------
; coinvoke MACRO 
;
; invokes an abritrary COM interface 
;
; revised 2/22/01  added edx check in the pInterface (this is also a no-no)
; revised 12/29/00 to check for edx as a param and force compilation error
;                   (thanks to Andy Car for a how-to suggestion)
; revised 7/18/00 to pass pointer in edx not eax to aviod confusion with
;   parmas passed with ADDR  (Jeremy Collake's excellent suggestion)
; revised 5/4/00 for member function name decoration
; see http://ourworld.compuserve.com/homepages/ernies_world/coinvoke.htm
;
; pInterface    pointer to a specific interface instance
; Interface     the Interface's struct typedef
; Function      which function or method of the interface to perform
; args          all required arguments 
;                   (type, kind and count determined by the function)
;
coinvoke MACRO pInterface:REQ, Interface:REQ, Function:REQ, args:VARARG
    LOCAL istatement, arg
    FOR arg, <args>     ;; run thru args to see if edx is lurking in there
        IFIDNI <&arg>, <edx>
            .ERR <edx is not allowed as a coinvoke parameter>
        ENDIF
    ENDM
    IFIDNI <&pInterface>, <edx>
        .ERR <edx is not allowed as a coinvoke parameter>
    ENDIF
    istatement CATSTR <invoke (Interface PTR[edx]).&Interface>,<_>,<&Function, pInterface>
    IFNB <args>     ;; add the list of parameter arguments if any
        istatement CATSTR istatement, <, >, <&args> 
    ENDIF 
    mov edx, pInterface
    mov edx, [edx]
    istatement
ENDM

 
;---------------------------------------------------------------------
; equate primitives for use with other structures besides .IF
SUCCEEDED   TEXTEQU     <!!SIGN?>
FAILED      TEXTEQU     <!!SUCCEEDED>

;---------------------------------------------------------------------
; tests the value in eax to determine if the previous COM call
; issued a passing hresult
.IF_SUCCEEDED MACRO
    test eax, eax
    .IF SUCCEEDED
ENDM

;---------------------------------------------------------------------
; tests the value in eax to determine if the previous COM call
; issued a failing hresult
.IF_FAILED   MACRO
    test eax, eax
    .IF FAILED
ENDM

; -------------------------------------------------------------------------------
;  Basic Data Types
VARIANT_BOOL    TYPEDEF     WORD
PVOID           TYPEDEF     DWORD
BSTR            TYPEDEF     DWORD
VARTYPE         TYPEDEF     WORD
LCID            TYPEDEF     DWORD
HREFTYPE        TYPEDEF     DWORD
PVOID           TYPEDEF     DWORD
SCODE           TYPEDEF     DWORD
DISPID          TYPEDEF     DWORD
MEMBERID        TYPEDEF     DWORD 
HREFTYPE        TYPEDEF     DWORD 
  

;
; -------------------------------------------------------------------------------
;  IDispatch Data Types

IMPLTYPEFLAG_FDEFAULT       EQU    1H
IMPLTYPEFLAG_FSOURCE        EQU    2H
IMPLTYPEFLAG_FRESTRICTED    EQU    4H
IMPLTYPEFLAG_FDEFAULTVTABLE EQU    8H

CHANGEKIND_ADDMEMBER        EQU    0H
CHANGEKIND_DELETEMEMBER     EQU    1H
CHANGEKIND_SETNAMES         EQU    2H
CHANGEKIND_SETDOCUMENTATION EQU    3H
CHANGEKIND_GENERAL          EQU    4H
CHANGEKIND_INVALIDATE       EQU    5H
CHANGEKIND_CHANGEFAILED     EQU    6H
CHANGEKIND_MAX              EQU    7H

SAFEARRAYBOUND  STRUCT  DWORD
    cElements   DWORD       ?
    lLbound     DWORD       ?
SAFEARRAYBOUND ENDS
LPSAFEARRAYBOUND    TYPEDEF     DWORD


SAFEARRAY   STRUCT      DWORD
    cDims       BYTE        ?
    fFeatures   BYTE        ?
    cbElements  DWORD       ?
    cLocks      DWORD       ?
    pvData      PVOID       ?
    rgsabound   SAFEARRAYBOUND      1t DUP (<>)
SAFEARRAY ENDS
LPSAFEARRAY     TYPEDEF     DWORD


CC_FASTCALL                 EQU    0H
CC_CDECL                    EQU    1H
CC_MSCPASCAL                EQU    2H
CC_PASCAL                   EQU    2H
CC_MACPASCAL                EQU    3H
CC_STDCALL                  EQU    4H
CC_FPFASTCALL               EQU    5H
CC_SYSCALL                  EQU    6H
CC_MPWCDECL                 EQU    7H
CC_MPWPASCAL                EQU    8H
CC_MAX                      EQU    9H

CALLCONV        TYPEDEF     WORD


DECIMAL STRUCT  DWORD
    wReserved BYTE  ?
    Union
        STRUCT
            scale   BYTE    ?
            sign    BYTE    ?
        ENDS
        signscale   BYTE    ?
    ENDS
    Hi32    DWORD       ?
    Union
        STRUCT
            Lo32    DWORD   ?
            Mid32   DWORD   ?
        ENDS
        Lo64    REAL8   ?
    ENDS
DECIMAL ENDS
LPDECIMAL       TYPEDEF     DWORD

DECIMAL_SETZERO MACRO ddec:REQ
; #define DECIMAL_SETZERO(dec) {(dec).Lo64 = 0; (dec).Hi32 = 0; (dec).signscale = 0;}
    lea eax, ddec
    mov (DECIMAL PTR [eax]).Lo32,  0
    mov (DECIMAL PTR [eax]).Mid32, 0
    mov (DECIMAL PTR [eax]).Hi32,  0
    mov (DECIMAL PTR [eax]).signscale, 0
ENDM


 ; DECIMAL_NEG      EQU     000000080H    ; already defined in windows.inc
DISPID_VALUE        EQU     000000000H
DISPID_NEWENUM      EQU     0FFFFFFFCH
DISPID_EVALUATE     EQU     0FFFFFFFBH
DISPID_PROPERTYPUT  EQU     0FFFFFFFDH
DISPID_CONSTRUCTOR  EQU     0FFFFFFFAH
DISPID_DESTRUCTOR   EQU     0FFFFFFF9H
DISPID_UNKNOWN      EQU     0FFFFFFFFH
DISPID_COLLECT      EQU     0FFFFFFF8H
DISPID_Name         EQU     0FFFFFCE0H
DISPID_Delete       EQU     0FFFFFCDFH
DISPID_Object       EQU     0FFFFFCDEH
DISPID_Parent       EQU     0FFFFFCDDH
;  The range -500 through -999 is reserved for Controls
;  The range 0x80010000 through 0x8001FFFF is reserved for Controls
;  The range -5000 through -5499 is reserved for ActiveX Accessability
;  The range -2000 through -2499 is reserved for VB5
;  The range -3900 through -3999 is reserved for Forms
;  The range -5500 through -5550 is reserved for Forms
;  The remainder of the negative DISPIDs are reserved for future use

DISPPARAMS  STRUCT DWORD
    rgvarg          PVOID       ?
    rgdispidNamedArgs PVOID     ?
    cArgs           WORD        ?
    cNamedArgs      WORD        ?
DISPPARAMS ENDS


EXCEPINFO_fnDeferredFillInProto     TYPEDEF PROTO STDCALL :PTR EXCEPINFO
EXCEPINFO_fnDeferredFillIn          TYPEDEF PTR EXCEPINFO_fnDeferredFillInProto


EXCEPINFO    STRUCT DWORD
    wCode           BYTE        ?
    wReserved       BYTE        ?
    bstrSource      BSTR        ?
    bstrDescription BSTR        ?
    bstrHelpFile    BSTR        ?
    dwHelpContext   DWORD       ?
    pvReserved      DWORD       ?
    pfnDeferredFillIn EXCEPINFO_fnDeferredFillIn        ?
    scode           DWORD       ?
EXCEPINFO ENDS
LPEXCEPINFO     TYPEDEF     DWORD


PARAMDATA    STRUCT DWORD
    szName      PVOID           ?
    vt          VARTYPE         ?
PARAMDATA ENDS
LPPARAMDATA     TYPEDEF     DWORD


METHODDATA   STRUCT DWORD
    szName      PVOID           ?
    ppdata      PVOID           ?
    dispid      DWORD           ?
    iMeth       WORD            ?
    cc          SWORD           ?
    cArgs       WORD            ?
    wFlags      DWORD           ?
    vtReturn    VARTYPE         ?
METHODDATA ENDS
LPMETHODDATA           TYPEDEF      DWORD

INTERFACEDATA   STRUCT DWORD
    pmethdata       LPMETHODDATA ?
    cMembers        WORD         ?
INTERFACEDATA ENDS
LPintERFACEDATA     TYPEDEF     DWORD

VARIANT STRUCT ;DWORD
    vt              WORD            VT_EMPTY
    wReserved1      WORD            0
    wReserved2      WORD            0
    wReserved3      WORD            0
    Union
        lVal            SDWORD          ?   ; VT_I4
        bVal            WORD            ?   ; VT_UI1
        iVal            SWORD           ?   ; VT_I2
        fltVal          REAL4           ?   ; VT_R4
        dblVal          REAL8           ?   ; VT_R8
        boolVal         VARIANT_BOOL    ?   ; VT_BOOL
        scode           SCODE           ?   ; VT_ERROR
        cyVal           QWORD           ?   ; VT_CY
        date            QWORD           ?   ; VT_DATE
        bstrVal         BSTR            ?   ; VT_BSTR
        punkVal         PVOID           ?   ; VT_UNKNOWN
        pdispVal        PVOID           ?   ; VT_DISPATCH
        parray          PVOID           ?   ; VT_ARRAY
        pbVal           PVOID           ?   ; VT_BYREF|VT_UI1
        piVal           PVOID           ?   ; VT_BYREF|VT_I2
        plVal           PVOID           ?   ; VT_BYREF|VT_I4
        pfltVal         PVOID           ?   ; VT_BYREF|VT_R4
        pdblVal         PVOID           ?   ; VT_BYREF|VT_R8
        pboolVal        PVOID           ?   ; VT_BYREF|VT_BOOL
        pscode          PVOID           ?   ; VT_BYREF|VT_ERROR
        pcyVal          PVOID           ?   ; VT_BYREF|VT_CY
        pdate           PVOID           ?   ; VT_BYREF|VT_DATE
        pbstrVal        PVOID           ?   ; VT_BYREF|VT_BSTR
        ppunkVal        PVOID           ?   ; VT_BYREF|VT_UNKNOWN
        ppdispVal       PVOID           ?   ; VT_BYREF|VT_DISPATCH
        pparray         PVOID           ?   ; VT_BYREF|VT_ARRAY
        pvarVal         PVOID           ?   ; VT_BYREF|VT_VARIANT
        byref           PVOID           ?   ; Generic ByRef
        cVal            SBYTE           ?   ; VT_I1
        uiVal           WORD            ?   ; VT_UI2
        ulVal           DWORD           ?   ; VT_UI4
        intVal          SWORD           ?   ; VT_int
        uintVal         WORD            ?   ; VT_uint
        pdecVal         PVOID           ?   ; VT_BYREF|VT_DECIMAL
        pcVal           PVOID           ?   ; VT_BYREF|VT_I1
        puiVal          PVOID           ?   ; VT_BYREF|VT_UI2
        pulVal          PVOID           ?   ; VT_BYREF|VT_UI4
        pintVal         PVOID           ?   ; VT_BYREF|VT_int
        puintVal        PVOID           ?   ; VT_BYREF|VT_uint
    ENDS
VARIANT ENDS
VARIANTARG      TYPEDEF     VARIANT

;
; -------------------------------------------------------------------------------
;  ITypeInfo Data Types

TYPEDESC    STRUCT     DWORD
    Union
        lptdesc     PVOID           ?
        lpadesc     PVOID           ?
        hreftype    HREFTYPE        ?
    ENDS
    vt          VARTYPE         ?
TYPEDESC ENDS
LPTYPEDESC      TYPEDEF     DWORD


ARRAYDESC   STRUCT DWORD
    tdescElem   TYPEDESC        <>
    cDims       BYTE            ?
    rgbounds    SAFEARRAYBOUND  1H DUP (<>)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?