158 lines
2.9 KiB
Go
158 lines
2.9 KiB
Go
package ole
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// DISPPARAMS are the arguments that passed to methods or property.
|
|
type DISPPARAMS struct {
|
|
rgvarg uintptr
|
|
rgdispidNamedArgs uintptr
|
|
cArgs uint32
|
|
cNamedArgs uint32
|
|
}
|
|
|
|
// EXCEPINFO defines exception info.
|
|
type EXCEPINFO struct {
|
|
wCode uint16
|
|
wReserved uint16
|
|
bstrSource *uint16
|
|
bstrDescription *uint16
|
|
bstrHelpFile *uint16
|
|
dwHelpContext uint32
|
|
pvReserved uintptr
|
|
pfnDeferredFillIn uintptr
|
|
scode uint32
|
|
}
|
|
|
|
// WCode return wCode in EXCEPINFO.
|
|
func (e EXCEPINFO) WCode() uint16 {
|
|
return e.wCode
|
|
}
|
|
|
|
// SCODE return scode in EXCEPINFO.
|
|
func (e EXCEPINFO) SCODE() uint32 {
|
|
return e.scode
|
|
}
|
|
|
|
// String convert EXCEPINFO to string.
|
|
func (e EXCEPINFO) String() string {
|
|
var src, desc, hlp string
|
|
if e.bstrSource == nil {
|
|
src = "<nil>"
|
|
} else {
|
|
src = BstrToString(e.bstrSource)
|
|
}
|
|
|
|
if e.bstrDescription == nil {
|
|
desc = "<nil>"
|
|
} else {
|
|
desc = BstrToString(e.bstrDescription)
|
|
}
|
|
|
|
if e.bstrHelpFile == nil {
|
|
hlp = "<nil>"
|
|
} else {
|
|
hlp = BstrToString(e.bstrHelpFile)
|
|
}
|
|
|
|
return fmt.Sprintf(
|
|
"wCode: %#x, bstrSource: %v, bstrDescription: %v, bstrHelpFile: %v, dwHelpContext: %#x, scode: %#x",
|
|
e.wCode, src, desc, hlp, e.dwHelpContext, e.scode,
|
|
)
|
|
}
|
|
|
|
// Error implements error interface and returns error string.
|
|
func (e EXCEPINFO) Error() string {
|
|
if e.bstrDescription != nil {
|
|
return strings.TrimSpace(BstrToString(e.bstrDescription))
|
|
}
|
|
|
|
src := "Unknown"
|
|
if e.bstrSource != nil {
|
|
src = BstrToString(e.bstrSource)
|
|
}
|
|
|
|
code := e.scode
|
|
if e.wCode != 0 {
|
|
code = uint32(e.wCode)
|
|
}
|
|
|
|
return fmt.Sprintf("%v: %#x", src, code)
|
|
}
|
|
|
|
// PARAMDATA defines parameter data type.
|
|
type PARAMDATA struct {
|
|
Name *int16
|
|
Vt uint16
|
|
}
|
|
|
|
// METHODDATA defines method info.
|
|
type METHODDATA struct {
|
|
Name *uint16
|
|
Data *PARAMDATA
|
|
Dispid int32
|
|
Meth uint32
|
|
CC int32
|
|
CArgs uint32
|
|
Flags uint16
|
|
VtReturn uint32
|
|
}
|
|
|
|
// INTERFACEDATA defines interface info.
|
|
type INTERFACEDATA struct {
|
|
MethodData *METHODDATA
|
|
CMembers uint32
|
|
}
|
|
|
|
// Point is 2D vector type.
|
|
type Point struct {
|
|
X int32
|
|
Y int32
|
|
}
|
|
|
|
// Msg is message between processes.
|
|
type Msg struct {
|
|
Hwnd uint32
|
|
Message uint32
|
|
Wparam int32
|
|
Lparam int32
|
|
Time uint32
|
|
Pt Point
|
|
}
|
|
|
|
// TYPEDESC defines data type.
|
|
type TYPEDESC struct {
|
|
Hreftype uint32
|
|
VT uint16
|
|
}
|
|
|
|
// IDLDESC defines IDL info.
|
|
type IDLDESC struct {
|
|
DwReserved uint32
|
|
WIDLFlags uint16
|
|
}
|
|
|
|
// TYPEATTR defines type info.
|
|
type TYPEATTR struct {
|
|
Guid GUID
|
|
Lcid uint32
|
|
dwReserved uint32
|
|
MemidConstructor int32
|
|
MemidDestructor int32
|
|
LpstrSchema *uint16
|
|
CbSizeInstance uint32
|
|
Typekind int32
|
|
CFuncs uint16
|
|
CVars uint16
|
|
CImplTypes uint16
|
|
CbSizeVft uint16
|
|
CbAlignment uint16
|
|
WTypeFlags uint16
|
|
WMajorVerNum uint16
|
|
WMinorVerNum uint16
|
|
TdescAlias TYPEDESC
|
|
IdldescType IDLDESC
|
|
}
|