| Previous | Next |
| DISP_E_BADPARAMCOUNT | DISP_E_BADCALLEE |
DISP_E_PARAMNOTOPTIONAL
Required Automation parameter was omitted
DISP_E_PARAMNOTOPTIONAL is HRESULT 2147614735 (0x8002000F) from winerror.h. AllStat describes it as “Parameter not optional.” The value must be interpreted at IDispatch invocation of a member with mandatory and optional parameters, because the same high-level symptom can come from a different contract boundary and require different cleanup.
The decisive interpretation for DISP_E_PARAMNOTOPTIONAL is that a parameter declared as required has no supplied value after positional and named argument binding. Treat DISP_E_PARAMNOTOPTIONAL as a contract result from its owning subsystem and retain the unmodified HRESULT in logs and test assertions.
Where the result appears
- DISP_E_PARAMNOTOPTIONAL is returned while Automation binds or executes IDispatch invocation of a member with mandatory and optional parameters.
- For DISP_E_PARAMNOTOPTIONAL, retain the member name and DISPID, invocation flags, LCID, cArgs, cNamedArgs, and the exact VARIANTARG sequence in reverse Automation order.
- The output contract for DISP_E_PARAMNOTOPTIONAL includes puArgErr, EXCEPINFO, result VARIANT, by-reference values, and SAFEARRAY lock or ownership state; inspect them before cleanup.
Map DISP_E_PARAMNOTOPTIONAL to one concrete invocation and one concrete object or metadata identity before interpreting the human-readable description.
Typical causes and interpretation boundary
Common cause categories for DISP_E_PARAMNOTOPTIONAL are: the caller assumes a parameter is optional; bindings are stale; a named argument was misspelled and therefore not bound. For DISP_E_PARAMNOTOPTIONAL, the evidence should distinguish configuration, lifetime, input, identity, resource, and version failures rather than grouping them.
The check that separates DISP_E_PARAMNOTOPTIONAL from nearby HRESULTs is: a parameter declared as required has no supplied value after positional and named argument binding. The text of DISP_E_PARAMNOTOPTIONAL narrows the search, but the owning API state must confirm the condition before automation changes the system.
Evidence and telemetry
- Record DISP_E_PARAMNOTOPTIONAL with the object CLSID or ProgID, interface identity, member DISPID, dispatch flags, and type-library version.
- For DISP_E_PARAMNOTOPTIONAL, capture member signature; missing parameter position or DISPID; cArgs; optional flags; versioned type library.
- Log VARIANT type tags, dimensions, bounds, lengths, and null/empty distinctions for DISP_E_PARAMNOTOPTIONAL, but redact actual confidential argument values.
- Preserve the caller language/runtime, generated interop version, LCID, and whether the call crossed a process boundary when DISP_E_PARAMNOTOPTIONAL occurs.
- After DISP_E_PARAMNOTOPTIONAL, call VariantClear, SysFreeString, SafeArrayDestroy, or release interfaces only for values whose ownership was transferred by the documented contract.
For privacy-safe diagnosis of DISP_E_PARAMNOTOPTIONAL, capture the call schema and state transitions but hash or omit confidential payloads.
Diagnostic sequence
- Capture DISP_E_PARAMNOTOPTIONAL (0x8002000F) at IDispatch::GetIDsOfNames or IDispatch::Invoke before the language runtime converts it to a script exception.
- For <code>DISP_E_PARAMNOTOPTIONAL</code>, resolve the deployed member signature from ITypeInfo and compare its DISPIDs, parameter flags, VARTYPEs, optional values, and property-put rules with the caller.
- Prove the decisive condition for DISP_E_PARAMNOTOPTIONAL: a parameter declared as required has no supplied value after positional and named argument binding.
- Inspect the likely binding or representation causes for DISP_E_PARAMNOTOPTIONAL: the caller assumes a parameter is optional; bindings are stale; a named argument was misspelled and therefore not bound.
- Reconstruct DISPPARAMS exactly, including reverse positional ordering and named argument placement, then reproduce DISP_E_PARAMNOTOPTIONAL with the smallest value set.
- Verify the result VARIANT, EXCEPINFO, puArgErr, by-reference arguments, SAFEARRAY lock count, and object state after DISP_E_PARAMNOTOPTIONAL before deciding on retry.
Correct handling and recovery
For DISP_E_PARAMNOTOPTIONAL, the appropriate recovery is to supply the required value in the correct reverse-order layout, regenerate wrappers from the deployed type library, and avoid inventing defaults. Recovery from DISP_E_PARAMNOTOPTIONAL should name the component responsible for retry and the evidence that makes another attempt safe.
The failure path for DISP_E_PARAMNOTOPTIONAL should leave outputs in a known state and avoid double release, double commit, or reuse of stale pointers.
Practical scenario
A report method gained a required output-format parameter; an old wrapper is regenerated and supplies the explicit format.
To prevent recurrence of DISP_E_PARAMNOTOPTIONAL, preserve a minimal fixture that asserts both the failing condition and the state after recovery.
Difference from related HRESULTs
DISP_E_PARAMNOTFOUND says a named identifier cannot be resolved; DISP_E_PARAMNOTOPTIONAL says a known required slot has no value.
Classify DISP_E_PARAMNOTOPTIONAL by the stated contract difference, since severity bits alone do not determine the correct response.
Developer and administrator guidance
Automation adapters should handle DISP_E_PARAMNOTOPTIONAL at the dispatch boundary and expose the member, parameter, and type information needed to repair the call. A generic retry after <code>DISP_E_PARAMNOTOPTIONAL</code> with unchanged DISPPARAMS usually repeats the same deterministic binding error.
For DISP_E_PARAMNOTOPTIONAL, deployment owners should compare the registered type library and server binary as one versioned unit. After <code>DISP_E_PARAMNOTOPTIONAL</code>, re-registering arbitrary DLLs or changing locale system-wide is inappropriate unless the captured metadata proves registration or LCID drift.
References
- Microsoft: VARIANT structure — official Microsoft documentation relevant to
DISP_E_PARAMNOTOPTIONAL. - Microsoft: VariantClear — official Microsoft documentation relevant to
DISP_E_PARAMNOTOPTIONAL. - Microsoft: IDispatch::Invoke — official Microsoft documentation relevant to
DISP_E_PARAMNOTOPTIONAL. - Microsoft: HRESULT values — official Microsoft documentation relevant to
DISP_E_PARAMNOTOPTIONAL.
Looking for a different code? Search another status or error code.