Skip to content

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

Open
manodasanW wants to merge 3 commits into
staging/3.0from
manodasanw/fix-ctor-array-marshalling
Open

Fix constructor marshalling for non-blittable array element types#2474
manodasanW wants to merge 3 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 2 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>
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