diff options
author | Kali Kaneko (leap communications) <kali@leap.se> | 2019-08-16 12:55:10 +0200 |
---|---|---|
committer | Kali Kaneko (leap communications) <kali@leap.se> | 2019-08-16 15:50:28 +0200 |
commit | ec4974e7660776e8ab2883b109bfa3f96b4f5317 (patch) | |
tree | 6c6ae93cab7e3a0ff6ebb7ec07e3ef8757e5272f /packages/w32/ole32.go | |
parent | f4ab1b0463e902f23224c37f1e217241084681df (diff) |
[pkg] need to vendorize allendang w32 lib
we use go mod edit -replace
Diffstat (limited to 'packages/w32/ole32.go')
-rw-r--r-- | packages/w32/ole32.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/packages/w32/ole32.go b/packages/w32/ole32.go new file mode 100644 index 0000000..a7f79b5 --- /dev/null +++ b/packages/w32/ole32.go @@ -0,0 +1,63 @@ +// Copyright 2010-2012 The W32 Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package w32 + +import ( + "syscall" + "unsafe" +) + +var ( + modole32 = syscall.NewLazyDLL("ole32.dll") + + procCoInitializeEx = modole32.NewProc("CoInitializeEx") + procCoInitialize = modole32.NewProc("CoInitialize") + procCoUninitialize = modole32.NewProc("CoUninitialize") + procCreateStreamOnHGlobal = modole32.NewProc("CreateStreamOnHGlobal") +) + +func CoInitializeEx(coInit uintptr) HRESULT { + ret, _, _ := procCoInitializeEx.Call( + 0, + coInit) + + switch uint32(ret) { + case E_INVALIDARG: + panic("CoInitializeEx failed with E_INVALIDARG") + case E_OUTOFMEMORY: + panic("CoInitializeEx failed with E_OUTOFMEMORY") + case E_UNEXPECTED: + panic("CoInitializeEx failed with E_UNEXPECTED") + } + + return HRESULT(ret) +} + +func CoInitialize() { + procCoInitialize.Call(0) +} + +func CoUninitialize() { + procCoUninitialize.Call() +} + +func CreateStreamOnHGlobal(hGlobal HGLOBAL, fDeleteOnRelease bool) *IStream { + stream := new(IStream) + ret, _, _ := procCreateStreamOnHGlobal.Call( + uintptr(hGlobal), + uintptr(BoolToBOOL(fDeleteOnRelease)), + uintptr(unsafe.Pointer(&stream))) + + switch uint32(ret) { + case E_INVALIDARG: + panic("CreateStreamOnHGlobal failed with E_INVALIDARG") + case E_OUTOFMEMORY: + panic("CreateStreamOnHGlobal failed with E_OUTOFMEMORY") + case E_UNEXPECTED: + panic("CreateStreamOnHGlobal failed with E_UNEXPECTED") + } + + return stream +} |