Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cleanup VARIANT marshalling and convert to managed #102498

Merged
merged 48 commits into from
Aug 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
9ebbfc5
Handle simple cases of MarshalComVariantForOleVariant
huoyaoyuan May 14, 2024
7c35e76
Pseudo code for MarshalOleVariantForComVariant
huoyaoyuan May 14, 2024
2b7b42b
Complete and setup managed call for MarshalObjectForOleVariant
huoyaoyuan May 15, 2024
b7b73dd
Setup MarshalHelperConvertObjectToVariant except record
huoyaoyuan May 15, 2024
c9b06fe
Setup MarshalHelperCastVariant
huoyaoyuan May 15, 2024
fcd2cff
Cleanup Variant struct and FCall
huoyaoyuan May 15, 2024
c193137
Handle record case
huoyaoyuan May 16, 2024
fb34d6d
Cleanup VariantOleToCom/VariantComToOle routines
huoyaoyuan May 16, 2024
4ba8412
Remove VariantData definition at unmanaged side
huoyaoyuan May 16, 2024
e38f65c
Eliminate a dead branch for ref
huoyaoyuan May 16, 2024
8be5299
Remove CVTypes in native
huoyaoyuan May 16, 2024
f653d98
Share GetComIPFromObjectRef
huoyaoyuan May 16, 2024
0af450d
Add tests for managed to native side
huoyaoyuan May 17, 2024
dbd1c03
Add test for native to managed side
huoyaoyuan May 17, 2024
8409346
Add test for byref returning to BYREF
huoyaoyuan May 19, 2024
827ffec
Merge branch 'variant-test' into variant-2
huoyaoyuan May 19, 2024
435dedd
Fix BYREF handling
huoyaoyuan May 19, 2024
eceed3f
Fix array marshalling
huoyaoyuan May 20, 2024
6d4ee35
Fix record marshalling
huoyaoyuan May 21, 2024
03a5f7f
Fix VT_VARIANT case
huoyaoyuan May 21, 2024
3ed9214
Cleanup and fix IUnknown case
huoyaoyuan May 21, 2024
3f509a1
Add more test for VT_UNKNOWN
huoyaoyuan May 21, 2024
57617e0
Merge branch 'variant-test' into variant-2
huoyaoyuan May 21, 2024
faee4ec
Cleanup for VT_VARIANT
huoyaoyuan May 21, 2024
99f6ef5
Cleanup SR and comment
huoyaoyuan May 21, 2024
dcd0287
Fix contract in GetTypeHandleForVarType
huoyaoyuan May 21, 2024
e58937b
Move VariantChangeTypeEx to coreclr
huoyaoyuan May 23, 2024
454c170
Add unmanaged fast path for (U)Int64
huoyaoyuan May 25, 2024
f2f71e7
Make ComVariant immutable
huoyaoyuan May 25, 2024
04f6aad
Add GCPROTECT in ConvertSystemColorToOleColor
huoyaoyuan May 25, 2024
8da56dd
Fix variant init
huoyaoyuan May 26, 2024
3c095a1
Fix BYREF|EMPTY
huoyaoyuan May 26, 2024
170fefc
Merge branch 'main' into variant-2
huoyaoyuan May 29, 2024
d2381bf
Initialize ComVariant
huoyaoyuan May 29, 2024
b315d3a
Move GCPROTECT to the QCall
huoyaoyuan May 29, 2024
bf5a151
Merge branch 'main' into variant-2
huoyaoyuan May 30, 2024
68525c8
Pass UnknownWrapper through SetFieldsObject
huoyaoyuan May 30, 2024
41ad24f
Apply suggestions from code review
huoyaoyuan Jun 1, 2024
7a9b989
Suggestions at native side
huoyaoyuan Jun 1, 2024
9cc8a38
Rename ComIP
huoyaoyuan Jun 1, 2024
944b76a
Add comments for ConvertWrappedObject
huoyaoyuan Jun 1, 2024
09af5b7
Try convert to RECORD for all cases
huoyaoyuan Jun 12, 2024
0ff823e
Merge branch 'main'
huoyaoyuan Jul 16, 2024
5dfda22
Dispose Variant on failure
huoyaoyuan Jul 16, 2024
545d597
Update formatting
huoyaoyuan Jul 16, 2024
fb32db0
Fix NO_MAPPING definition
huoyaoyuan Jul 17, 2024
b85abfa
Merge branch 'main'
huoyaoyuan Aug 23, 2024
20506a5
Merge branch 'main' into variant-2
AaronRobinsonMSFT Aug 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,9 @@
<Compile Include="$(CommonPath)Interop\Windows\OleAut32\Interop.VariantClear.cs">
<Link>Common\Interop\Windows\OleAut32\Interop.VariantClear.cs</Link>
</Compile>
<Compile Include="$(CommonPath)Interop\Windows\OleAut32\Interop.VariantChangeTypeEx.cs">
<Link>Common\Interop\Windows\OleAut32\Interop.VariantChangeTypeEx.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup Condition="'$(FeatureObjCMarshal)' == 'true'">
<Compile Include="$(BclSourcesRoot)\System\Runtime\InteropServices\ObjectiveCMarshal.CoreCLR.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,19 +151,10 @@ private static ComVariant ToOAVariant(object input)
null => default,
Missing => throw new NotSupportedException(SR.NotSupported_ChangeType),
DBNull => ComVariant.Null,
_ => GetComIPFromObjectRef(input) // Convert the object to an IDispatch/IUnknown pointer.
_ => Variant.GetIUnknownOrIDispatchFromObject(input) // Convert the object to an IDispatch/IUnknown pointer.
};
}

private static ComVariant GetComIPFromObjectRef(object? obj)
{
IntPtr pUnk = GetIUnknownOrIDispatchForObject(ObjectHandleOnStack.Create(ref obj), out bool isIDispatch);
return ComVariant.CreateRaw(isIDispatch ? VarEnum.VT_DISPATCH : VarEnum.VT_UNKNOWN, pUnk);
}

[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "MarshalNative_GetIUnknownOrIDispatchForObject")]
private static partial IntPtr GetIUnknownOrIDispatchForObject(ObjectHandleOnStack o, [MarshalAs(UnmanagedType.Bool)] out bool isIDispatch);

private static object? FromOAVariant(ComVariant input) =>
input.VarType switch
{
Expand Down
Loading
Loading