wailsapp/wails · error

CoInitializeEx failed with E_UNEXPECTED

Error message

CoInitializeEx failed with E_UNEXPECTED

What it means

Error "CoInitializeEx failed with E_UNEXPECTED" thrown in wailsapp/wails.

Source

Thrown at v3/pkg/w32/ole32.go:40

	procCoUninitialize        = modole32.NewProc("CoUninitialize")
	procCoCreateInstance      = modole32.NewProc("CoCreateInstance")
	procCreateStreamOnHGlobal = modole32.NewProc("CreateStreamOnHGlobal")
	procRegisterDragDrop      = modole32.NewProc("RegisterDragDrop")
	procRevokeDragDrop        = modole32.NewProc("RevokeDragDrop")
)

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 CoCreateInstance(clsid *syscall.GUID, dwClsContext uintptr, riid *syscall.GUID, ppv uintptr) HRESULT {
	ret, _, _ := procCoCreateInstance.Call(
		uintptr(unsafe.Pointer(clsid)),
		0,
		uintptr(dwClsContext),

View on GitHub (pinned to 0e754b1b40)

Solutions

  1. Treat E_UNEXPECTED from CoInitializeEx as a fatal, non-recoverable initialization error; check for mismatched CoUninitialize calls or a corrupted COM state on the thread.
  2. Ensure CoInitializeEx is called on the same thread that will use COM and is paired with CoUninitialize when done.

When it happens

Trigger: Occurs when CoInitializeEx returns E_UNEXPECTED, indicating a catastrophic COM failure during initialization.

Common situations: See trigger scenarios.


AI-assisted analysis of wailsapp/wails@0e754b1b40 (2026-08-15). Data as JSON: /api/errors/38c55d03a28533a5. Report an issue: GitHub.