first commit

This commit is contained in:
2025-08-22 17:42:23 -04:00
commit a6c09a5890
120 changed files with 11443 additions and 0 deletions

View File

@ -0,0 +1,86 @@
{{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*/ -}}