github.com/hspan/go-ole@v0.0.0/ole.go (about)

     1  package ole
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  // DISPPARAMS are the arguments that passed to methods or property.
     9  type DISPPARAMS struct {
    10  	rgvarg            uintptr
    11  	rgdispidNamedArgs uintptr
    12  	cArgs             uint32
    13  	cNamedArgs        uint32
    14  }
    15  
    16  // EXCEPINFO defines exception info.
    17  type EXCEPINFO struct {
    18  	wCode             uint16
    19  	wReserved         uint16
    20  	bstrSource        *uint16
    21  	bstrDescription   *uint16
    22  	bstrHelpFile      *uint16
    23  	dwHelpContext     uint32
    24  	pvReserved        uintptr
    25  	pfnDeferredFillIn uintptr
    26  	scode             uint32
    27  }
    28  
    29  // WCode return wCode in EXCEPINFO.
    30  func (e EXCEPINFO) WCode() uint16 {
    31  	return e.wCode
    32  }
    33  
    34  // SCODE return scode in EXCEPINFO.
    35  func (e EXCEPINFO) SCODE() uint32 {
    36  	return e.scode
    37  }
    38  
    39  // String convert EXCEPINFO to string.
    40  func (e EXCEPINFO) String() string {
    41  	var src, desc, hlp string
    42  	if e.bstrSource == nil {
    43  		src = "<nil>"
    44  	} else {
    45  		src = BstrToString(e.bstrSource)
    46  	}
    47  
    48  	if e.bstrDescription == nil {
    49  		desc = "<nil>"
    50  	} else {
    51  		desc = BstrToString(e.bstrDescription)
    52  	}
    53  
    54  	if e.bstrHelpFile == nil {
    55  		hlp = "<nil>"
    56  	} else {
    57  		hlp = BstrToString(e.bstrHelpFile)
    58  	}
    59  
    60  	return fmt.Sprintf(
    61  		"wCode: %#x, bstrSource: %v, bstrDescription: %v, bstrHelpFile: %v, dwHelpContext: %#x, scode: %#x",
    62  		e.wCode, src, desc, hlp, e.dwHelpContext, e.scode,
    63  	)
    64  }
    65  
    66  // Error implements error interface and returns error string.
    67  func (e EXCEPINFO) Error() string {
    68  	if e.bstrDescription != nil {
    69  		return strings.TrimSpace(BstrToString(e.bstrDescription))
    70  	}
    71  
    72  	src := "Unknown"
    73  	if e.bstrSource != nil {
    74  		src = BstrToString(e.bstrSource)
    75  	}
    76  
    77  	code := e.scode
    78  	if e.wCode != 0 {
    79  		code = uint32(e.wCode)
    80  	}
    81  
    82  	return fmt.Sprintf("%v: %#x", src, code)
    83  }
    84  
    85  // PARAMDATA defines parameter data type.
    86  type PARAMDATA struct {
    87  	Name *int16
    88  	Vt   uint16
    89  }
    90  
    91  // METHODDATA defines method info.
    92  type METHODDATA struct {
    93  	Name     *uint16
    94  	Data     *PARAMDATA
    95  	Dispid   int32
    96  	Meth     uint32
    97  	CC       int32
    98  	CArgs    uint32
    99  	Flags    uint16
   100  	VtReturn uint32
   101  }
   102  
   103  // INTERFACEDATA defines interface info.
   104  type INTERFACEDATA struct {
   105  	MethodData *METHODDATA
   106  	CMembers   uint32
   107  }
   108  
   109  // Point is 2D vector type.
   110  type Point struct {
   111  	X int32
   112  	Y int32
   113  }
   114  
   115  // Msg is message between processes.
   116  type Msg struct {
   117  	Hwnd    uint32
   118  	Message uint32
   119  	Wparam  int32
   120  	Lparam  int32
   121  	Time    uint32
   122  	Pt      Point
   123  }
   124  
   125  // TYPEDESC defines data type.
   126  type TYPEDESC struct {
   127  	Hreftype uint32
   128  	VT       uint16
   129  }
   130  
   131  // IDLDESC defines IDL info.
   132  type IDLDESC struct {
   133  	DwReserved uint32
   134  	WIDLFlags  uint16
   135  }
   136  
   137  // TYPEATTR defines type info.
   138  type TYPEATTR struct {
   139  	Guid             GUID
   140  	Lcid             uint32
   141  	dwReserved       uint32
   142  	MemidConstructor int32
   143  	MemidDestructor  int32
   144  	LpstrSchema      *uint16
   145  	CbSizeInstance   uint32
   146  	Typekind         int32
   147  	CFuncs           uint16
   148  	CVars            uint16
   149  	CImplTypes       uint16
   150  	CbSizeVft        uint16
   151  	CbAlignment      uint16
   152  	WTypeFlags       uint16
   153  	WMajorVerNum     uint16
   154  	WMinorVerNum     uint16
   155  	TdescAlias       TYPEDESC
   156  	IdldescType      IDLDESC
   157  }