Files
2025-08-22 17:42:23 -04:00

61 lines
1.8 KiB
Cheetah

{{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}}