Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8937911
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T10:29:58+00:00 2026-06-15T10:29:58+00:00

There are a lot of samples for C#, but only some code snippets for

  • 0

There are a lot of samples for C#, but only some code snippets for C++ on MSDN. I have put it together and I think it will work, but I am not sure if I am releasing all the COM references I have to.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T10:29:59+00:00Added an answer on June 15, 2026 at 10:29 am

    Your code is correct–the reference count on the IBufferByteAccess interface of *buffer is incremented by the call to QueryInterface, and you must call Release once to release that reference.

    However, if you use ComPtr<T>, this becomes much simpler–with ComPtr<T>, you cannot call any of the three members of IUnknown (AddRef, Release, and QueryInterface); it prevents you from calling them. Instead, it encapsulates calls to these member functions in a way that makes it difficult to screw things up. Here’s an example of how this would look:

    // Get the buffer from the WriteableBitmap:
    IBuffer^ buffer = bitmap->PixelBuffer;
    
    // Convert from C++/CX to the ABI IInspectable*:
    ComPtr<IInspectable> bufferInspectable(AsInspectable(buffer));
    
    // Get the IBufferByteAccess interface:
    ComPtr<IBufferByteAccess> bufferBytes;
    ThrowIfFailed(bufferInspectable.As(&bufferBytes));
    
    // Use it:
    byte* pixels(nullptr);
    ThrowIfFailed(bufferBytes->Buffer(&pixels));
    

    The call to bufferInspectable.As(&bufferBytes) performs a safe QueryInterface: it computes the IID from the type of bufferBytes, performs the QueryInterface, and attaches the resulting pointer to bufferBytes. When bufferBytes goes out of scope, it will automatically call Release. The code has the same effect as yours, but without the error-prone explicit resource management.

    The example uses the following two utilities, which help to keep the code clean:

    auto AsInspectable(Object^ const object) -> Microsoft::WRL::ComPtr<IInspectable>
    {
        return reinterpret_cast<IInspectable*>(object);
    }
    
    auto ThrowIfFailed(HRESULT const hr) -> void
    {
        if (FAILED(hr))
            throw Platform::Exception::CreateException(hr);
    }
    

    Observant readers will notice that because this code uses a ComPtr for the IInspectable* we get from buffer, this code actually performs an additional AddRef/Release compared to the original code. I would argue that the chance of this impacting performance is minimal, and it’s best to start from code that is easy to verify as correct, then optimize for performance once the hot spots are understood.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

There have been a lot of other posts related to this but I can't
I know that there are lot's of questons on this, but all seem to
I know there a lot of similar questions to this, but I didn't find
There are a lot of questions about didRegisterForRemoteNotificationsWithDeviceToken but they all sidestep a very
There's a lot of questions about bookmarks but none of them answers my question:
So I have some nested lists (only one level deep) and I'm running into
I have some very simple sample code like this: $.ajax({ url: 'demo2.htm', success: function(loadeddata){
I see there are lot's of examples in Ext JS where instead of actually
There are a lot of blogs saying that a hasOwnProperty check should be used
There are a lot of iOS apps in the iTunes Store that, upon launch,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.