wailsapp/wails · error

CoInitializeEx failed with E_INVALIDARG

Error message

CoInitializeEx failed with E_INVALIDARG

What it means

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

Source

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

	procCoInitializeEx        = modole32.NewProc("CoInitializeEx")
	procCoInitialize          = modole32.NewProc("CoInitialize")
	procOleInitialize         = modole32.NewProc("OleInitialize")
	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 {

View on GitHub (pinned to 0e754b1b40)

Solutions

  1. Pass a valid concurrency model flag to CoInitializeEx: COINIT_APARTMENTTHREADED or COINIT_MULTITHREADED; any other value yields E_INVALIDARG.
  2. Ensure the first argument (reserved) is always 0/nil as required by the API.

When it happens

Trigger: Occurs when CoInitializeEx returns E_INVALIDARG, typically due to an invalid concurrency model flag passed for COM initialization.

Common situations: See trigger scenarios.


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