{{if not .IsAbstract}} const Signature{{.Name}} string = "{{.Signature}}" type {{.Name}} struct { ole.IUnknown } {{if .HasEmptyConstructor}} func New{{.Name}}() (*{{.Name}}, error) { inspectable, err := ole.RoActivateInstance("{{.FullyQualifiedName}}") if err != nil { return nil, err } return (*{{.Name}})(unsafe.Pointer(inspectable)), nil } {{end}} {{end}} {{$owner := .Name}} {{range .ImplInterfaces}} {{range .Funcs}} {{if not .Implement}}{{continue}}{{end}} func (impl *{{$owner}}) {{funcName .}} ( {{- range .InParams -}} {{/*do not include out parameters, they are used as return values*/ -}} {{ if .IsOut }}{{continue}}{{ end -}} {{.GoVarName}} {{template "variabletype.tmpl" . }}, {{- end -}} ) {{- /* return params */ -}} ( {{range .InParams -}} {{ if not .IsOut }}{{continue}}{{ end -}} {{template "variabletype.tmpl" . }},{{end -}} {{range .ReturnParams}}{{template "variabletype.tmpl" . }},{{end}} error ) {{- /* method body */ -}} { itf := impl.MustQueryInterface(ole.NewGUID({{if .InheritedFrom.Namespace}}{{.InheritedFrom.Namespace}}.{{end}}GUID{{.InheritedFrom.Name}})) defer itf.Release() v := (*{{if .InheritedFrom.Namespace}}{{.InheritedFrom.Namespace}}.{{end}}{{.InheritedFrom.Name}})(unsafe.Pointer(itf)) return v.{{funcName . -}} ( {{- range .InParams -}} {{if .IsOut -}} {{continue -}} {{end -}} {{.GoVarName -}} , {{- end -}} ) } {{end}} {{end}} {{range .ExclusiveInterfaces}} {{ template "interface.tmpl" .}} {{end}}