87 lines
3.3 KiB
Cheetah
87 lines
3.3 KiB
Cheetah
{{if .RequiresActivation}}{{/*Activate class*/ -}}
|
|
inspectable, err := ole.RoGetActivationFactory("{{.ExclusiveTo}}", ole.NewGUID(GUID{{.FuncOwner}}))
|
|
if err != nil {
|
|
return {{range .ReturnParams -}}
|
|
{{.GoDefaultValue}}, {{end}}err
|
|
}
|
|
v := (*{{.FuncOwner}})(unsafe.Pointer(inspectable))
|
|
|
|
{{end -}}
|
|
|
|
{{- /* Declare out variables*/ -}}
|
|
|
|
{{range (concat .InParams .ReturnParams) -}}
|
|
{{ if not .IsOut}}{{continue}}{{end -}}
|
|
{{if eq .GoTypeName "string" -}}
|
|
var {{.GoVarName}}HStr ole.HString
|
|
{{ else -}}
|
|
var {{.GoVarName}} {{template "variabletype.tmpl" . -}}
|
|
{{if .Type.IsArray}} = make({{template "variabletype.tmpl" . -}}, {{.GoVarName}}Size){{end}}
|
|
{{ end -}}
|
|
{{ end -}}
|
|
|
|
{{- /* Convert in variables to winrt types */ -}}
|
|
|
|
{{range .InParams -}}
|
|
{{ if .IsOut}}{{continue}}{{end -}}
|
|
{{if eq .GoTypeName "string" -}}
|
|
{{.GoVarName}}HStr, err := ole.NewHString({{.GoVarName}})
|
|
if err != nil{
|
|
return {{range $.InParams}}{{if .IsOut}}{{.GoDefaultValue}}, {{end}}{{end -}}
|
|
{{range $.ReturnParams }}{{.GoDefaultValue}}, {{end}}err
|
|
}
|
|
{{ end -}}
|
|
{{ end -}}
|
|
hr, _, _ := syscall.SyscallN(
|
|
v.VTable().{{funcName .}},
|
|
uintptr(unsafe.Pointer(v)), // this
|
|
{{range (concat .InParams .ReturnParams) -}}
|
|
{{if .Type.IsArray -}}
|
|
{{/* Arrays need to pass a pointer to their first element */ -}}
|
|
uintptr(unsafe.Pointer(&{{.GoVarName}}[0])), // {{if .IsOut}}out{{else}}in{{end}} {{.GoTypeName}}
|
|
{{else if .IsOut -}}
|
|
{{if (or .Type.IsPrimitive .Type.IsEnum) -}}
|
|
{{if eq .GoTypeName "string" -}}
|
|
uintptr(unsafe.Pointer(&{{.GoVarName}}HStr)), // out {{.GoTypeName}}
|
|
{{else -}}
|
|
uintptr(unsafe.Pointer(&{{.GoVarName}})), // out {{.GoTypeName}}
|
|
{{end -}}
|
|
{{else -}}
|
|
uintptr(unsafe.Pointer(&{{.GoVarName}})), // out {{.GoTypeName}}
|
|
{{end -}}
|
|
{{else if .Type.IsPointer -}}
|
|
uintptr(unsafe.Pointer({{.GoVarName}})), // in {{.GoTypeName}}
|
|
{{else if (or .Type.IsPrimitive .Type.IsEnum) -}}
|
|
{{ if eq .GoTypeName "bool" -}}
|
|
uintptr(*(*byte)(unsafe.Pointer(&{{.GoVarName}}))), // in {{.GoTypeName}}
|
|
{{ else if eq .GoTypeName "string" -}}
|
|
uintptr({{.GoVarName}}HStr), // in {{.GoTypeName}}
|
|
{{else -}}
|
|
uintptr({{.GoVarName}}), // in {{.GoTypeName}}
|
|
{{end -}}
|
|
{{else if .Type.IsGeneric -}}
|
|
uintptr({{.GoVarName}}), // in {{.GoTypeName}}
|
|
{{else -}}
|
|
uintptr(unsafe.Pointer(&{{.GoVarName}})), // in {{.GoTypeName}}
|
|
{{end -}}
|
|
{{end -}}
|
|
)
|
|
|
|
if hr != 0 {
|
|
return {{range .InParams}}{{if .IsOut}}{{.GoDefaultValue}}, {{end}}{{end -}}
|
|
{{range .ReturnParams }}{{.GoDefaultValue}}, {{end}}ole.NewError(hr)
|
|
}
|
|
|
|
{{range (concat .InParams .ReturnParams) -}}
|
|
{{ if not .IsOut}}{{continue}}{{end -}}
|
|
{{if eq .GoTypeName "string" -}}
|
|
{{.GoVarName}} := {{.GoVarName}}HStr.String()
|
|
ole.DeleteHString({{.GoVarName}}HStr)
|
|
{{ end -}}
|
|
{{ end -}}
|
|
|
|
|
|
return {{range .InParams}}{{if .IsOut}}{{.GoVarName}}, {{end}}{{end -}}
|
|
{{range .ReturnParams }}{{.GoVarName}},{{end}} nil
|
|
{{- /* remove trailing white space*/ -}}
|