■掲示板に戻る■
■過去ログ倉庫めにゅーに戻る■
メモリのハンドル
- 1 名前: 杉山 遥 投稿日: 2000/11/13(月) 12:23
- メモリにもハンドルと言うものがあるのでしょうか?
LocalFree、LocalLock などと言う関数でそれらしき
記述を見かけました。このハンドルは変数のポインタから
取得したり出来るのでしょうか?
この辺りの概念がよくわからないのでよろしければ
教えてください。
- 2 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 12:55
- 間違ってたらゴメン
普通ハンドルってポインタのことじゃないの?
- 3 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 13:12
- え? ハンドル = ポインタのポインタでしょ?
Mac では、typedef char *Ptr; typedef Ptr *Handle; だった。
- 4 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 13:13
- 違うよ。ま、ポインタをハンドル代わりとして扱う
のは構わないけど、ハンドルをポインタ代わりに扱
うのは特殊な場合を除いてダメ。
特殊な場合ってのは、GLobalAlloc()やLocalAlloc()
なら、タイプがGPTRの時とか。
ハンドルってのは、単に識別子でしかないのよ。
- 5 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 13:13
- 間違ってたらゴメン
普通ハンドルって自動車に付いているのアレのことじゃないの?
- 6 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 13:31
- 違うよ。ま、アレをハンドル代わりとして扱う
のは構わないけど、ハンドルをアレ代わりに扱
うのは特殊な場合を除いてダメ。
ハンドルってのは、単に識別子でしかないのよ。
- 7 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 14:03
- バンドルって結局抱き合わせだよね
- 8 名前: 名無しさん@DTMF 投稿日: 2000/11/13(月) 15:21
- 間違ってたらゴメン
普通パンドラって空けてはいけないアレのことじゃないの?
間違ってたらゴメン
普通コンドルってペルーなんかにいるアレのことじゃないの?
間違ってたらゴメン
普通バンドルってハードを買うとついてくるアレのことじゃないの?
- 9 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 15:32
- 間違ってたらゴメン
普通パンヤオってチューヤンの名字のことじゃないの?
間違ってたらゴメン
普通ハンドルってここでよく見るdjのことじゃないの?
- 10 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 15:45
- 違うよ。ま、チューヤンをパンヤオ代わりとして扱う
のは構わないけど、パンヤオをアレ代わりに扱
うのは特殊な場合を除いてダメ。
特殊な場合ってのは、アフリカ縦断()やoperator += 伊藤
とかなら、タイプが電波少年の時とか。
パンヤオってのは、単に識別子でしかないのよ。
- 11 名前: jd 投稿日: 2000/11/13(月) 15:46
- ちなみにおれはドルトン。専門は化学だ。
- 12 名前: 1です 投稿日: 2000/11/13(月) 16:14
- Win32でエディットコントロールが参照しているメモリを
変更したいのです。
ためしたのは
EM_GETHANDLEでコントロールのハンドルを取得して
LocalFreeで解放。
これはハンドルは帰ってきましたが解放できませんでした。
これがうまく行けば新規の変数のハンドルを取得して
EM_SETHANDLEでコントロールに設定しようと思っています。
根本的に間違っているかもしれませんが
何かアドバイスがあったらお願いします。
- 13 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 18:12
- >>12
今時Windows3.1ですか?そうでないなら、結局同じ
とは言えGlobalXX系を使いましょう。LocalXX系は16
bit時代の互換のためのものです。
順序としては、EM_GETHANDLEでエディットコントロー
ルのハンドルを取得、GlobalAlloc()で自分用メモリハ
ンドル取得、EM_SETHANDLEで自分用設定、GlobalFree()
でEM_GETHANDLEで取得したハンドルの開放でしょうか。
このハンドルの指すメモリ内容を変更する場合は
GLobalLock()でポインタを得てからです。
使用後はGlobalUnlock()して下さい。
- 14 名前: 1 投稿日: 2000/11/13(月) 18:14
- >13さん
レス有難うございます。早速試してみます。
- 15 名前: 杉山 遥 投稿日: 2000/11/13(月) 19:27
- 以下の手順で行いましたがエディットコントロールに入力できませんでした。
なにか誤った点がありますでしょうか?
(1) EM_GETHANDLE で現在のメモリハンドル取得
(2) GlobalAlloc で GPTRフラグで新規メモリ作成 (ハンドルが返りました)
(3) EM_SETHANDLE で (2) のハンドルを指定
(4) GlobalFree で (1) のハンドルを解放 (Nullが返ってきたので成功しました)
(5) GlobalLock で (2) ハンドルを指定しポインタを取得 (成功しました)
(6) エディットに入力してみるが入力不可能。
もう一点なのですが(1) で取得したハンドルのポインタを取得する方法は
ありますか? このハンドルに GlobalLock は働きませんでした。
APIは駆け出しなのでなにぶん勘違いもあるかと思いますが
よろしくお願いします。
- 16 名前: Visual名無しさん 投稿日: 2000/11/13(月) 20:49
- > (5) GlobalLock で (2) ハンドルを指定しポインタを取得 (成功しました)
Lockしちゃったらエディットコントロール側で書き込めなくなるのでは?
…外してるかも。
- 17 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 21:13
- >>13
Win32ではGlobal〜()系とLocal〜()系に差はないと思うけど。
両方ともWin16互換APIなんだし。
Win32 nativeなのはHeap〜()系とVirtual〜()系ね。
- 18 名前: 3 投稿日: 2000/11/13(月) 22:40
- >ハンドルってのは、単に識別子でしかないのよ。
勉強になりやした。どうも。UNIXでは聞きなれない言葉だなあ。
- 19 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/13(月) 22:57
- 処理系の話で、CGの話の時なんかにハンドルって出てくるね。
unixであまり聞かないのは86の16bit環境でメモリのスワップを
する話でよく出るから、目立たないのかも。