我正在编写一个C应用程序,在代码中调用构造函数GdipCreateBitmapFromHBITMAP。我知道不应该从C调用构造函数,但我在这里使用了“hack”How can I take a screenshot and save it as JPEG on Windows?我不知道如何释放在调用GdipCreateBitmapFromHBITMAP期间分配的资源。我试图在文档中找到帮助,但什么也没有找到。ULONG *pBitmap = NULL;lGdipCreateBitmapFromHBITMAP = (pGdipCreateBitmapFromHBITMAP)GetProcAddress(hModuleThread, "GdipCreateBitmapFromHBITMAP");lGdipCreateBitmapFromHBITMAP(hBmp, NULL, &pBitmap);如何释放pBitmap?谢谢。 最佳答案 你所做的不是“黑客”。虽然GDI+主要被设计成在C++中使用,但是它确实暴露了一个flat API用于在C.中使用代码。GdipCreateBitmapFromHBITMAP()不是构造函数,而是由Bitmap.Bitmap(HBITMAP, HPALETTE)构造函数调用的平面C函数。也就是说, >返回一个指向的指针(对象是C++中的 >类)。GdipCreateBitmapFromHBITMAP()是释放该对象的正确方法(由C++中的“AA>析构函数调用”)。struct GpImage {};struct GpBitmap {};typedef GpStatus (WINGDIPAPI *pGdipCreateBitmapFromHBITMAP)(HBITMAP, HPALETTE hpal, GpBitmap**);typedef GpStatus (WINGDIPAPI *GdipDisposeImage)(GpImage *image);GpBitmap *pBitmap = NULL;lGdipCreateBitmapFromHBITMAP = (pGdipCreateBitmapFromHBITMAP) GetProcAddress(hModuleThread, "GdipCreateBitmapFromHBITMAP");lGdipDisposeImage = (pGdipDisposeImage) GetProcAddress(hModuleThread, "GdipDisposeImage");//...lGdipCreateBitmapFromHBITMAP(hBmp, NULL, &pBitmap);//...lGdipDisposeImage((GpImage*)pBitmap);
08-16 03:08