| Previous | Next |
| DISP_E_TYPEMISMATCH | DISP_E_NONAMEDARGS |
DISP_E_UNKNOWNNAME
Automation member name is unknown
DISP_E_UNKNOWNNAME is HRESULT 2147614726 (0x80020006) from winerror.h. AllStat describes it as “Unknown name.” The value must be interpreted at IDispatch::GetIDsOfNames resolving a method, property, or named parameter, because the same high-level symptom can come from a different contract boundary and require different cleanup.
The decisive interpretation for DISP_E_UNKNOWNNAME is that the dispatch object cannot map one of the requested names to a DISPID in the selected locale and interface version. A diagnostic event for DISP_E_UNKNOWNNAME should retain both representations of the HRESULT and the exact API boundary that produced it.
Where the result appears
- DISP_E_UNKNOWNNAME is returned while Automation binds or executes IDispatch::GetIDsOfNames resolving a method, property, or named parameter.
- For DISP_E_UNKNOWNNAME, 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_UNKNOWNNAME includes puArgErr, EXCEPINFO, result VARIANT, by-reference values, and SAFEARRAY lock or ownership state; inspect them before cleanup.
Before assigning cause to DISP_E_UNKNOWNNAME, identify the responsible thread, apartment, process, library generation, and server instance rather than relying on the final dialog text.
Typical causes and interpretation boundary
Common cause categories for DISP_E_UNKNOWNNAME are: the member was renamed; the wrong object is used; the locale-specific name is unavailable; stale generated bindings call an older API. The candidate causes for DISP_E_UNKNOWNNAME are alternatives, so test one precondition at a time instead of applying several broad repairs together.
The check that separates DISP_E_UNKNOWNNAME from nearby HRESULTs is: the dispatch object cannot map one of the requested names to a DISPID in the selected locale and interface version. When the boundary condition behind DISP_E_UNKNOWNNAME has not been proven, avoid retries or repairs that assume a different neighboring HRESULT.
Evidence and telemetry
- Record DISP_E_UNKNOWNNAME with the object CLSID or ProgID, interface identity, member DISPID, dispatch flags, and type-library version.
- For DISP_E_UNKNOWNNAME, capture all requested names; LCID; object version; type-library registration; case and spelling; first unresolved name.
- Log VARIANT type tags, dimensions, bounds, lengths, and null/empty distinctions for DISP_E_UNKNOWNNAME, 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_UNKNOWNNAME occurs.
- After DISP_E_UNKNOWNNAME, call VariantClear, SysFreeString, SafeArrayDestroy, or release interfaces only for values whose ownership was transferred by the documented contract.
Telemetry for DISP_E_UNKNOWNNAME should be reproducible without copying secret values: prefer GUIDs, lengths, flags, sanitized names, and correlation IDs.
Diagnostic sequence
- Capture DISP_E_UNKNOWNNAME (0x80020006) at IDispatch::GetIDsOfNames or IDispatch::Invoke before the language runtime converts it to a script exception.
- For <code>DISP_E_UNKNOWNNAME</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_UNKNOWNNAME: the dispatch object cannot map one of the requested names to a DISPID in the selected locale and interface version.
- Inspect the likely binding or representation causes for DISP_E_UNKNOWNNAME: the member was renamed; the wrong object is used; the locale-specific name is unavailable; stale generated bindings call an older API.
- Reconstruct DISPPARAMS exactly, including reverse positional ordering and named argument placement, then reproduce DISP_E_UNKNOWNNAME with the smallest value set.
- Verify the result VARIANT, EXCEPINFO, puArgErr, by-reference arguments, SAFEARRAY lock count, and object state after DISP_E_UNKNOWNNAME before deciding on retry.
Correct handling and recovery
For DISP_E_UNKNOWNNAME, the appropriate recovery is to regenerate bindings from the deployed type library, use documented invariant names, and treat optional capabilities as unavailable when lookup fails. Before retrying DISP_E_UNKNOWNNAME, specify which precondition changed and how duplicate effects or stale outputs will be detected.
For DISP_E_UNKNOWNNAME, inspect every output before cleanup because interfaces, buffers, server effects, or metadata handles may be partially initialized.
Practical scenario
A macro targets a property introduced in a newer application version and disables that feature after name resolution fails.
Test DISP_E_UNKNOWNNAME by reproducing the smallest failing contract, recording postconditions, and then changing a single input or state transition.
Difference from related HRESULTs
DISP_E_MEMBERNOTFOUND generally follows a known DISPID that cannot be invoked; DISP_E_UNKNOWNNAME occurs during name-to-DISPID resolution.
Keeping DISP_E_UNKNOWNNAME separate from its neighbor improves retry, cleanup, and user messaging because the two results imply different postconditions.
Developer and administrator guidance
Automation adapters should handle DISP_E_UNKNOWNNAME at the dispatch boundary and expose the member, parameter, and type information needed to repair the call. A generic retry after <code>DISP_E_UNKNOWNNAME</code> with unchanged DISPPARAMS usually repeats the same deterministic binding error.
For DISP_E_UNKNOWNNAME, deployment owners should compare the registered type library and server binary as one versioned unit. After <code>DISP_E_UNKNOWNNAME</code>, re-registering arbitrary DLLs or changing locale system-wide is inappropriate unless the captured metadata proves registration or LCID drift.
References
- Microsoft: IDispatch::GetIDsOfNames — official Microsoft documentation relevant to
DISP_E_UNKNOWNNAME. - Microsoft: DISPPARAMS — official Microsoft documentation relevant to
DISP_E_UNKNOWNNAME. - Microsoft: VARIANT structure — official Microsoft documentation relevant to
DISP_E_UNKNOWNNAME. - Microsoft: HRESULT values — official Microsoft documentation relevant to
DISP_E_UNKNOWNNAME.
Looking for a different code? Search another status or error code.