61 lines
1.8 KiB
Cheetah
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}}
|