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 614017
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T18:03:59+00:00 2026-05-13T18:03:59+00:00

I am using some unmanaged code that is returning pointers (IntPtr) to large image

  • 0

I am using some unmanaged code that is returning pointers (IntPtr) to large image objects. I use the references but after I am finished with the images, I need to free that memory referenced by the pointers. Currently, the only thing that frees the memory is to shutdown my entire app. I need to be able to free that memory from inside my application.

Here is the call to that allocates the memory. hbitmap is the pointer that is returned and needs to be deallocated.

[DllImport("twain_32.dll", EntryPoint = "#1")]
public static extern TwainResult DsImageTransfer(
    [In, Out] Identity origin, [In] Identity dest, DataGroup dg, 
    DataArgumentType dat, Message msg, ref IntPtr hbitmap);
  • 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-05-13T18:03:59+00:00Added an answer on May 13, 2026 at 6:03 pm

    That would depend on how that memory was allocated. The Marshal class has methods for deallocating memory allocated through the common interop allocation patterns, like FreeCoTaskMem. If the unmanaged code uses a non Interop compatible way of allocating, then you cannot interop with it.

    Updated

    If I would venture a guess, the function #1 you invoke in twain_32.dll is the DS_ENTRY function in a TWAIN provider. The Twain specifications call out the memory resource management protocol:

    Memory Management in TWAIN 2.0 and
    Higher

    TWAIN requires Applications and
    Sources to manage each other’s memory.
    The chief problem is guaranteeing
    agreement on the API’s to use. TWAIN
    2.0 introduces four new functions that are obtained from the Source Manager
    through DAT_ENTRYPOINT.

    TW_HANDLE PASCAL DSM_MemAllocate (TW_UINT32)
    PASCAL DSM_MemFree (TW_HANDLE)
    TW_MEMREF PASCAL DSM_MemLock(TW_HANDLE)
    void PASCAL DSM_MemUnlock(TW_HANDLE)

    These functions correspond to the
    WIN32 Global Memory functions
    mentioned in previous versions of the
    TWAIN Specification: GlobalAlloc,
    GlobalFree, GlobalLock, GlobalUnlock
    On MacOS/X these functions call
    NewPtrClear and DisposePtr. The lock
    and unlock functions are no-ops, but
    they still must be called. TWAIN 2.0
    compliant Applications and Sources
    must use these calls on all platforms
    (Windows, MacOS/X and Linux). The
    Source Manager takes the
    responsibility to make sure that all
    components are using the same memory
    management API’s.

    So to free resources you’re supposed to call DSM_MemFree, which supposedly on Win32 platforms would be implemented through GlobalFree, or Marshal.FreeHGlobal.

    Since this is mostly speculation on my part, you better validate with the specs of the specific TWAIN implementation you use.

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

Sidebar

Ask A Question

Stats

  • Questions 474k
  • Answers 474k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer { :conditions => ["#{"(visibility = #{Shared::PUBLIC}) || " if include_non_employee_public}… May 16, 2026 at 4:07 am
  • Editorial Team
    Editorial Team added an answer OH I get it.. Target Names are not 'made up'.… May 16, 2026 at 4:07 am
  • Editorial Team
    Editorial Team added an answer Another way can be by setting your image as the… May 16, 2026 at 4:07 am

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

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.