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 + -
显示快捷键?