safearrayslices.go 721 B

123456789101112131415161718192021222324252627282930313233
  1. //go:build windows
  2. package ole
  3. import (
  4. "unsafe"
  5. )
  6. func safeArrayFromByteSlice(slice []byte) *SafeArray {
  7. array, _ := safeArrayCreateVector(VT_UI1, 0, uint32(len(slice)))
  8. if array == nil {
  9. panic("Could not convert []byte to SAFEARRAY")
  10. }
  11. for i, v := range slice {
  12. safeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(&v)))
  13. }
  14. return array
  15. }
  16. func safeArrayFromStringSlice(slice []string) *SafeArray {
  17. array, _ := safeArrayCreateVector(VT_BSTR, 0, uint32(len(slice)))
  18. if array == nil {
  19. panic("Could not convert []string to SAFEARRAY")
  20. }
  21. // SysAllocStringLen(s)
  22. for i, v := range slice {
  23. safeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(SysAllocStringLen(v))))
  24. }
  25. return array
  26. }