在使用CF_BITMAP格式的剪贴板数据时,不能直接使用GlobalSize函数获取数据的大小。但可以使用其他方式来保存到LPVOID指针中。

一种方式是使用GetClipboardData函数获取剪贴板中的数据句柄,然后使用GlobalLock函数锁定数据,并使用GlobalSize函数获取数据的大小。然后可以使用malloc函数分配内存,并使用memcpy函数将数据复制到分配的内存中。

以下是一个示例代码:

// 获取剪贴板中的CF_BITMAP数据
HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
if (hBitmap != NULL) {
    // 锁定数据
    HGLOBAL hGlobal = (HGLOBAL)hBitmap;
    LPVOID pData = GlobalLock(hGlobal);

    // 获取数据大小
    DWORD dwSize = GlobalSize(hGlobal);

    // 分配内存
    LPVOID pCopy = malloc(dwSize);

    // 复制数据
    memcpy(pCopy, pData, dwSize);

    // 解锁数据
    GlobalUnlock(hGlobal);

    // 使用pCopy进行后续处理

    // 释放内存
    free(pCopy);
}

请注意,在使用完毕后,需要释放分配的内存,以避免内存泄漏

CF_BITMAP 不能使用GlobalSize那如何memcpy保存到LPVOID

原文地址: https://www.cveoy.top/t/topic/izVF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录