?? subject_48882.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(&devmode,sizeof(devmode));<BR>///<BR>hGlobal = &devmode; //<BR><BR>devmode.dmSize = sizeof(devmode);<BR><BR>devmode.dmPelsWidth = 800;<BR>devmode.dmPelsHeight = 600;<BR>devmode.dmBitsPerPel = 32;<BR>devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;<BR>ChangeDisplaySettings(&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> 因為始終這個HGLOBAL的句柄是在少,原來處理數據庫圖形字段時依樣畫葫蘆用過,效果還可以。<BR> 這次,我要用到制定打印機上,發現打印機對話框m_pd成員中這兩個HGLOBAL指針問題,我可以修改DEVMODE結構成員,就是沒法將其指針賦值給m_pd成員。<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 22:08:33
<br>內容:測試表明你的方法實現了賦值!!!!<BR><BR>但我的程序并沒有運行成功。我想時下面兩個糊涂的問題:<BR>問題1)假設HGLOBAL a已經得到。現在我將a賦值給HGLOBAL b:<BR> b=a;<BR> 我調用GlobalFree(a)釋放了a的資源,此時,b中的內容也似乎沒了。<BR> 那么如果有HGLoabal c=b;<BR> 是否我釋放任何一個全局內存指針,就將他們全部釋放了?<BR>問題2)假設HGLOBAL a已經得到,我們成員函數取出了其中的DEVMODE結構:<BR> DEVMODE zsdevmode=.....();<BR> 然后修改這個結構的成員值<BR> 再GLOBAL c=&zsdevmode;<BR> 結果我使用GlobalFree(a),結果c中的部分內容也沒有了。<BR><BR> 因為,我想弄清楚,是否就是釋放任何一個指針,相應的其他全局內存指針也釋放了。<BR> 請高手指點。<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>
<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 + -