我正在使用一个捕获卡dll,它导出一个提供包含DIB的HGLOBAL句柄的函数。我想将此DIB写入文件。在我锁定资源并检索数据指针后,我请求大小,它大约是1mb。但是当我将它写入文件时,它总是0字节。这是我第一次使用HGLOBAL类型,所以我猜我做错了。感谢您的帮助。
char* dibData = (char*)LockResource(DIB);
if(NULL != dibData)
{
SIZE_T dibSize = GlobalSize (DIB);
f = fopen("thedib.dib", "wb");
if (f)
{
n = fwrite(dibData,dibSize,1,f);
fflush(f);
fclose(f);
wrote = true;
}
UnlockResource(DIB);
}
答案 0 :(得分:3)
您似乎在混合资源API和全局内存API。如果它确实是一个资源,请使用LockResource(),SizeofResource(),UnlockResource()。如果它只是通过GlobalAlloc()分配的内存块,请使用GlobalLock(),GlobalSize(),GlobalUnlock()。
此外,.bmp文件应以BITMAPFILEHEADER
结构开头。对于内存中的DIB,此结构不存在,因此您需要在写入DIB数据之前编写该结构。
http://msdn.microsoft.com/en-us/library/dd183374%28v=vs.85%29.aspx