1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // 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.
- // +build windows
- 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
- }
|