Skip to content

Fix constructor marshalling for non-blittable array element types#2474

Merged
manodasanW merged 4 commits into
staging/3.0from
manodasanw/fix-ctor-array-marshalling
Jun 24, 2026
Merged

Fix constructor marshalling for non-blittable array element types#2474
manodasanW merged 4 commits into
staging/3.0from
manodasanw/fix-ctor-array-marshalling

Conversation

@manodasanW

Copy link
Copy Markdown
Member

Activation-factory constructors taking arrays of non-blittable structs, mapped value types (DateTime/TimeSpan), or HResult/Exception elements hardcoded nint InlineArray storage and void** CopyToUnmanaged/Dispose data pointers, so the array marshaller's UnsafeAccessor failed to bind at runtime (Method not found: ...ArrayMarshaller.Dispose).

Route the constructor's PassArray storage, CopyToUnmanaged, and finally cleanup through the element-kind-aware helpers (GetArrayElementStorageType and typed data-pointer/cast selection), mirroring the RCW caller. Add a TestComponentCSharp constructor and TestNonBlittableArrayConstructor test covering all three element kinds.

Activation-factory constructors taking arrays of non-blittable structs,
mapped value types (DateTime/TimeSpan), or HResult/Exception elements
hardcoded nint InlineArray storage and void** CopyToUnmanaged/Dispose
data pointers, so the array marshaller's UnsafeAccessor failed to bind at
runtime (Method not found: ...ArrayMarshaller.Dispose).

Route the constructor's PassArray storage, CopyToUnmanaged, and finally
cleanup through the element-kind-aware helpers (GetArrayElementStorageType
and typed data-pointer/cast selection), mirroring the RCW caller. Add a
TestComponentCSharp constructor and TestNonBlittableArrayConstructor test
covering all three element kinds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread src/WinRT.Projection.Writer/Factories/ConstructorFactory.FactoryCallbacks.cs Outdated
manodasanW and others added 3 commits June 23, 2026 20:13
Drop the separate dataCastType and derive the cast inline from
dataParamType. Keep the if/else style (matching the RCW caller's
equivalent logic) with the same IDE0045 suppression.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace SuppressMessage attribute with a file-level pragma to disable IDE0045 and adjust comment wording/formatting across ConstructorFactory.FactoryCallbacks.cs. Changes are purely cosmetic (comments, quoting, punctuation) and do not modify runtime behavior or logic.
@manodasanW manodasanW enabled auto-merge (squash) June 24, 2026 18:21
@manodasanW manodasanW merged commit 3686fea into staging/3.0 Jun 24, 2026
11 checks passed
@manodasanW manodasanW deleted the manodasanw/fix-ctor-array-marshalling branch June 24, 2026 19:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants