Use FormatMessage for exception messages in cases where the stowed/language exception doesn't contain a message#2022
Conversation
…nguage exception doesn't contain a message
|
Thanks for the change, kicked off CI. |
|
are the CI failures related to the PR? GitHub doesn't allow me to see the details of them |
riverar
left a comment
There was a problem hiding this comment.
Can we get a test for this too? Ideally one that runs RPC_E_WRONG_THREAD through this helper to ensure it spits out the right message.
|
Think we should also clean up the commit message on merge (this is not related to WinRT Originate errors) and add a proper PR description here for our future selves looking back at this change. Perhaps something like:
|
No, it is unrelated. Have a PR to fix it, after it is merged, you can rebase your changes. |
…ce to check for empty error messages
|
Is there any test that we can add here to confirm we get expected message for a certain HRESULT. |
|
Isn't it enough that we test the In addition, I think we should test if the message is not empty, rather than requiring a string match, because error messages might be localized. |
|
I'd still check the error message when possible to ensure we're not getting garbage. Can wrap it in a conditional so that non en-US developers don't break. If that's not a concern for this project, I'd delete the en-US check. [Fact]
public void TestGetExceptionForHR_WithValidHResult_ReturnsSystemFormattedException()
{
// Arrange
const int RPC_E_WRONG_THREAD = unchecked((int)0x8001010E);
// Act
Exception exception = ExceptionHelpers.GetExceptionForHR(RPC_E_WRONG_THREAD);
// Assert
Assert.NotNull(exception);
Assert.False(string.IsNullOrWhiteSpace(exception.Message));
if (CultureInfo.CurrentUICulture.Name == "en-US")
{
Assert.Equal("The application called an interface that was marshalled for a different thread. (0x8001010E)", exception.Message);
}
}I can't test this for you because the build fails despite following the on-boarding instructions. |
…release.251115.2 (#4204) This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [Microsoft.Windows.CsWinRT](https://redirect.github.com/microsoft/cswinrt) | `2.3.0-prerelease.251015.2` -> `2.3.0-prerelease.251115.2` |  |  | --- ### Release Notes <details> <summary>microsoft/cswinrt (Microsoft.Windows.CsWinRT)</summary> ### [`v2.3.0-prerelease.251115.2`](https://redirect.github.com/microsoft/CsWinRT/releases/tag/2.3.0-prerelease.251115.2): CsWinRT 2.3.0-prerelease.251115.2 This is a prerelease version of C#/WinRT with more bug fixes and improvements. **C#/WinRT package**: <https://www.nuget.org/packages/Microsoft.Windows.CsWinRT/2.3.0-prerelease.251115.2> #### What's Changed - Fix warning by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2023](https://redirect.github.com/microsoft/CsWinRT/pull/2023) - Use FormatMessage for exception messages in cases where the stowed/language exception doesn't contain a message by [@​ahmed605](https://redirect.github.com/ahmed605) in [microsoft/CsWinRT#2022](https://redirect.github.com/microsoft/CsWinRT/pull/2022) - Merge to staging/2.3 by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2025](https://redirect.github.com/microsoft/CsWinRT/pull/2025) - Merge staging/2.3 to master by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2030](https://redirect.github.com/microsoft/CsWinRT/pull/2030) - Fix 'Initialize' typo in several files by [@​Lightczx](https://redirect.github.com/Lightczx) in [microsoft/CsWinRT#2035](https://redirect.github.com/microsoft/CsWinRT/pull/2035) - Fix design time build error causing incremental build issue by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2036](https://redirect.github.com/microsoft/CsWinRT/pull/2036) - Move TestWinRT repo clone to resource by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2032](https://redirect.github.com/microsoft/CsWinRT/pull/2032) - Fix weak reference rehydration scenarios for non projected types by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2043](https://redirect.github.com/microsoft/CsWinRT/pull/2043) - Add UpToDateCheckBuilt to cover incremental build of Implementation dlls by [@​jevansaks](https://redirect.github.com/jevansaks) in [microsoft/CsWinRT#2051](https://redirect.github.com/microsoft/CsWinRT/pull/2051) - Fix issue where IReferenceArray is not being found by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2071](https://redirect.github.com/microsoft/CsWinRT/pull/2071) - Fix issue with unsubscribing from events on non-agile objects by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2079](https://redirect.github.com/microsoft/CsWinRT/pull/2079) - Fix issues with CopyToManagedArray by [@​manodasanW](https://redirect.github.com/manodasanW) in [microsoft/CsWinRT#2084](https://redirect.github.com/microsoft/CsWinRT/pull/2084) #### New Contributors - [@​ahmed605](https://redirect.github.com/ahmed605) made their first contribution in [microsoft/CsWinRT#2022](https://redirect.github.com/microsoft/CsWinRT/pull/2022) - [@​Lightczx](https://redirect.github.com/Lightczx) made their first contribution in [microsoft/CsWinRT#2035](https://redirect.github.com/microsoft/CsWinRT/pull/2035) **Full Changelog**: <microsoft/CsWinRT@2.3.0-prerelease.250720.1...2.3.0-prerelease.251115.2> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/reactiveui/ReactiveUI). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xNi4xIiwidXBkYXRlZEluVmVyIjoiNDIuMzIuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiRGVwZW5kZW5jeSBNYW5hZ2VtZW50Il19--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

Updated HRESULT to Exception conversion logic to fall back to system-formatted error messages via the Win32 FormatMessage API when custom error text is not available or is blank. This ensures more consistent and informative exception messages by leveraging Windows' built-in error descriptions.
Example:
