Add option to disable default agility for COM implement macro
#3770
+114
−24
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
COM object implementations are agile and indicate this by implementing both
IAgileObjectandIMarshal. This is the default and suitable for the vast majority of implementations, whether or not you need support for COM apartments.For C++/WinRT I provided a
non_agilemarker type that indicated that the object would not provide an implementation ofIAgileObjectorIMarshaldirectly. You are then free to implement them yourself or not at all. This supports the few cases where you need more control over the apartment model of the caller and callee.The
implementmacro now provides an equivalent option to control the agility directly. Here is an example from the accompanying test:Fixes: #3768