windows申请内存的问题?

Cworld 2010-01-09 07:51:40
大家好:请问读图片的程序的一段代码中:

CFile file;
if( !file.Open( pPathname, CFile::modeRead) )
return FALSE;

m_nFileLen = file.GetLength();

HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen );
LPVOID lpBuf = ::GlobalLock( hMem );


if( file.Read( lpBuf, m_nFileLen ) != m_nFileLen )
return FALSE;
file.Close();

m_pJPGBuffer = (char *)lpBuf;
::GlobalUnlock( hMem );

请问为什么要:这么做呢?new delete, 这样不可以吗?这样写有什么好处吗?
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxwsbobo 2010-01-10
  • 打赏
  • 举报
回复
没什么好处吧 一半用剪切板才这样 等同于 malloc 或 HeapAlloc
chenhao1988 2010-01-10
  • 打赏
  • 举报
回复
个人觉得这里可以用new、delete。
new与GlobalAlloc之异同
- new是C++操作符, GlobalAlloc是Windows的API函数。
- new除了分配内存外还会调用构造函数, GlobalAlloc已经不提倡使用,为了与16位的程序兼容而保留的
- 两者均作全局内存分配,new可以根据操作系统有不同的实现(但无论如何实现,其分配出之内存只能被同一进程访问), 但后者分配的内存可以被不同进程访问(比如在进程1中分配内存,进程2中释放其。)所以后者才是真正的全局分配.
一般除了在剪贴板等函数中使用GlobalAlloc函数返回的句柄外,在其它地方使用GlobalAlloc函数的地方不多
jernymy 2010-01-10
  • 打赏
  • 举报
回复
ljc007 2010-01-09
  • 打赏
  • 举报
回复
到相应的语言版块提问吧

6,850

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧