⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_48882.htm

📁 vc
💻 HTM
字号:
<p>
序号:48882 发表者:金枪鱼 发表日期:2003-08-04 16:46:53
<br>主题:还是老问题,怎样将一个结构赋值给一个全局内存句柄
<br>内容:HGLOBAL hGlobal=NULL;<BR>DEVMODE zsdevmode;<BR>......//对zddevmode结构的成员赋值<BR>//分配全局内存<BR> hGlobal=.......<BR>//...<BR>如何将结构数据放入hGlobal句柄的内存块
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:木一 回复日期:2003-08-04 17:55:43
<br>内容:HGLOBAL 实质上是一个指针<BR><BR><BR><BR>如:改分辩率<BR>DEVMODE devmode; (也应该为全局的,否则对象在生命期之外,hGlobal指向的地址就被系统收回了<BR>::ZeroMemory(&amp;devmode,sizeof(devmode));<BR>///<BR>hGlobal = &amp;devmode; //<BR><BR>devmode.dmSize = sizeof(devmode);<BR><BR>devmode.dmPelsWidth&nbsp;&nbsp;= 800;<BR>devmode.dmPelsHeight = 600;<BR>devmode.dmBitsPerPel = 32;<BR>devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;<BR>ChangeDisplaySettings(&amp;devmode, CDS_FULLSCREEN);<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-08-04 20:10:37
<br>内容:谢谢MooYee,<BR>&nbsp;&nbsp; 因为始终这个HGLOBAL的句柄是在少,原来处理数据库图形字段时依样画葫芦用过,效果还可以。<BR>&nbsp;&nbsp; 这次,我要用到制定打印机上,发现打印机对话框m_pd成员中这两个HGLOBAL指针问题,我可以修改DEVMODE结构成员,就是没法将其指针赋值给m_pd成员。<BR>&nbsp;&nbsp; 我照你说的法子试一下再说。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-08-04 22:08:33
<br>内容:测试表明你的方法实现了赋值!!!!<BR><BR>但我的程序并没有运行成功。我想时下面两个糊涂的问题:<BR>问题1)假设HGLOBAL a已经得到。现在我将a赋值给HGLOBAL b:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b=a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我调用GlobalFree(a)释放了a的资源,此时,b中的内容也似乎没了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么如果有HGLoabal c=b;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否我释放任何一个全局内存指针,就将他们全部释放了?<BR>问题2)假设HGLOBAL a已经得到,我们成员函数取出了其中的DEVMODE结构:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEVMODE zsdevmode=.....();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后修改这个结构的成员值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再GLOBAL c=&amp;zsdevmode;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结果我使用GlobalFree(a),结果c中的部分内容也没有了。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; 因为,我想弄清楚,是否就是释放任何一个指针,相应的其他全局内存指针也释放了。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 请高手指点。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 如果却是是这样的话,我就会定义类的成员变量来处理这个指针的问题,然后在内的析构函数中释放它。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:野猫 回复日期:2003-08-07 02:16:48
<br>内容:HGLOBAL是个指针,由于并没有重载operator=,所以,默认的复制函数是采取“位拷贝”的方式,也就是说,你的b=a只是将指针的值赋了过去。这样GlobalFree(a)和GlobalFree(b)实际上是一样的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-08-07 09:42:27
<br>内容:谢谢指点!<BR>但如果不重载操作符,我怎样才能建立一个源指针的新拷贝呢?也就是说我释放源a时,b不被释放。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:野猫 回复日期:2003-08-07 15:15:45
<br>内容:memcpy
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -