Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build123©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
532デフォルトの名無しさん
2017/04/05(水) 02:45:28.37ID:qYLi57Sr 俺のナニは8bitだしorz
533デフォルトの名無しさん
2017/04/05(水) 08:06:40.12ID:Bh5NPBNH なに見栄張ってるんだよ
お前のは a bit (=ちょっと) だろ
お前のは a bit (=ちょっと) だろ
534デフォルトの名無しさん
2017/04/05(水) 08:54:18.24ID:BdqpqknF just bit(1ビットだけ)だろ?
535デフォルトの名無しさん
2017/04/05(水) 09:46:20.77ID:v8qJ9EUo >>531
そりゃcharを16個詰め込んだりするだろ
そりゃcharを16個詰め込んだりするだろ
536デフォルトの名無しさん
2017/04/05(水) 14:24:34.32ID:+eJqUohN ここまで漏れの自演
537デフォルトの名無しさん
2017/04/06(木) 17:46:17.73ID:Wug7VRpa 質問お願いします。
QueryPerformanceFrequency
で得た値は実行ごとに変わったりするから毎回計測しないと駄目ですか?
QueryPerformanceFrequency
で得た値は実行ごとに変わったりするから毎回計測しないと駄目ですか?
538デフォルトの名無しさん
2017/04/06(木) 18:05:42.24ID:lEpGhGGY どんな理由から毎回計測しないようにしたいんだ?それによる
539デフォルトの名無しさん
2017/04/06(木) 18:18:16.44ID:Wug7VRpa QueryPerformanceFrequencyの値がプログラムを終了するまで一定なら
1回しかこれを実行したくないし変わるなら一回時間を計測するごとにこれを実行したいです
1回しかこれを実行したくないし変わるなら一回時間を計測するごとにこれを実行したいです
540デフォルトの名無しさん
2017/04/06(木) 18:30:27.17ID:lEpGhGGY それなら一度だけでよかったはず
541デフォルトの名無しさん
2017/04/07(金) 17:01:14.12ID:3o5iBWIM システム起動中に変わることはないってさ
542デフォルトの名無しさん
2017/04/07(金) 22:21:01.99ID:9JlGmFFU ハイバーネーションみたいなのとかVMとか組み合わさるとどうなるかわかんないけどそういうことになってるね
543デフォルトの名無しさん
2017/04/08(土) 09:03:07.92ID:ptqONvxu 俺は使うたびに毎回読んでるわ
あえてそうしない意味もないから
あえてそうしない意味もないから
544デフォルトの名無しさん
2017/04/08(土) 17:48:41.54ID:C7AQR+Mi すみません、教えてください。
Borland BCC でC/Cppを勉強しているのですが、
CreateWindow( "EDIT", "あああああ", ....
にすると、あああああ の部分が文字化けして ,,,, と表示されてしまいます。
CreateWindow( "STATIC", "あああああ", ...
だと問題なく表示されます。
どうか教えてください、宜しくお願いします。
Borland BCC でC/Cppを勉強しているのですが、
CreateWindow( "EDIT", "あああああ", ....
にすると、あああああ の部分が文字化けして ,,,, と表示されてしまいます。
CreateWindow( "STATIC", "あああああ", ...
だと問題なく表示されます。
どうか教えてください、宜しくお願いします。
545デフォルトの名無しさん
2017/04/08(土) 22:40:07.71ID:42pK0vcr >>544
BCCはよくわかんけど、パラメーターが変とかじゃね?あと考えられるのはUNICODEとか?
このコードは RAD Studio10.1 BerlinとVS2015/2017で動くことは確認済み
HINSTANCE hInst;HWND hEdit,hStatic;
HWND hWnd= Handle; // BCBとか用
hInst=GetModuleHandle(0);
hEdit = CreateWindow(TEXT("EDIT") , TEXT("あああ") ,WS_CHILD | WS_VISIBLE | ES_LEFT,0 , 0 , 400 , 20 , hWnd , 0 ,hInst , NULL);
hStatic = CreateWindow(TEXT("STATIC") , TEXT("あああ") ,WS_CHILD | WS_VISIBLE | ES_LEFT ,0 , 20 , 400 , 20 ,hWnd , 0 ,hInst , NULL);
BCCはよくわかんけど、パラメーターが変とかじゃね?あと考えられるのはUNICODEとか?
このコードは RAD Studio10.1 BerlinとVS2015/2017で動くことは確認済み
HINSTANCE hInst;HWND hEdit,hStatic;
HWND hWnd= Handle; // BCBとか用
hInst=GetModuleHandle(0);
hEdit = CreateWindow(TEXT("EDIT") , TEXT("あああ") ,WS_CHILD | WS_VISIBLE | ES_LEFT,0 , 0 , 400 , 20 , hWnd , 0 ,hInst , NULL);
hStatic = CreateWindow(TEXT("STATIC") , TEXT("あああ") ,WS_CHILD | WS_VISIBLE | ES_LEFT ,0 , 20 , 400 , 20 ,hWnd , 0 ,hInst , NULL);
547544
2017/04/10(月) 07:47:25.26ID:RoCnetHj すみません、お手数をおかけします。
// あああああ が表示される
CreateWindow( "STATIC",
"あああああ", WS_CHILD | WS_VISIBLE | SS_CENTER,
x, y, w, h,
hGrp1, (HMENU)ID_TEXT1, hInst, NULL );
// あああああ が表示されず ,,,,, となる
CreateWindow( "EDIT",
"あああああ", WS_CHILD | WS_VISIBLE | SS_CENTER,
x, y+50, w, h,
hGrp1, (HMENU)ID_TEXT2, hInst, NULL );
hGrp1 はグループボックスです。
// あああああ が表示される
CreateWindow( "STATIC",
"あああああ", WS_CHILD | WS_VISIBLE | SS_CENTER,
x, y, w, h,
hGrp1, (HMENU)ID_TEXT1, hInst, NULL );
// あああああ が表示されず ,,,,, となる
CreateWindow( "EDIT",
"あああああ", WS_CHILD | WS_VISIBLE | SS_CENTER,
x, y+50, w, h,
hGrp1, (HMENU)ID_TEXT2, hInst, NULL );
hGrp1 はグループボックスです。
548片山博文MZ ◆T6xkBnTXz7B0
2017/04/10(月) 08:21:28.02ID:73IQobxS "EDIT"にはSS_CENTERは使えないよ。EDITにはES_...スタイルを使う。
549デフォルトの名無しさん
2017/04/10(月) 08:53:21.05ID:ZIRNWk3W >>547
とりあえずコントロール毎に指定フラグが違う事を指摘しておく
とりあえずコントロール毎に指定フラグが違う事を指摘しておく
550デフォルトの名無しさん
2017/04/10(月) 16:45:44.18ID:PH6zMRzh >>547
マルチバイト文字列が上手くいかないなら"AAAA"のようにシングルバイト文字列で試してみればいいじゃないか。
マルチバイト文字列が上手くいかないなら"AAAA"のようにシングルバイト文字列で試してみればいいじゃないか。
551デフォルトの名無しさん
2017/04/10(月) 17:20:37.45ID:vopNHtdq >>547
WM_SETFONTを使って、フォントを関連付けしてみたらどうだい?
WM_SETFONTを使って、フォントを関連付けしてみたらどうだい?
552片山博文MZ ◆T6xkBnTXz7B0
2017/04/10(月) 17:25:49.47ID:73IQobxS SS_CENTERがES_ENDELIPSISとして解釈されたんだろうな。
【今日の教訓】
EDITコントロールには、ES_で始まるスタイルを使え。SS_はEDITには使うな。
【今日の教訓】
EDITコントロールには、ES_で始まるスタイルを使え。SS_はEDITには使うな。
553片山博文MZ ◆T6xkBnTXz7B0
2017/04/10(月) 17:32:00.56ID:73IQobxS ごめん、ES_ENDELIPSISというスタイルはなかった。SS_CENTERの代わりにES_CENTERを指定すればいい。
554デフォルトの名無しさん
2017/04/10(月) 21:33:08.91ID:G1/iiInq なんでESとかSSとか種類が有るの?
555デフォルトの名無しさん
2017/04/10(月) 21:59:23.57ID:PH6zMRzh そりゃ特定のコントロールに対するものだからさ。
あとSS_CENTERもES_CENTERも winuser.h で 0x01L と定義されている。
例えば共通の定義 XX_CENTER 0x01L としていた場合、
EDITコントロールの仕様変更でXX_CENTER 0x02L としたくても
STATICコントロールで同じ意義を使っているため変えることが出来ないだろ。
もし定義を変えた場合、STATICコントロールで0x02L というのは別の意味を持っている(かもしれない)ので動作がおかしくなる。
だから意味は同じでも“値”としては別のものとして扱う(定義する)。
あとSS_CENTERもES_CENTERも winuser.h で 0x01L と定義されている。
例えば共通の定義 XX_CENTER 0x01L としていた場合、
EDITコントロールの仕様変更でXX_CENTER 0x02L としたくても
STATICコントロールで同じ意義を使っているため変えることが出来ないだろ。
もし定義を変えた場合、STATICコントロールで0x02L というのは別の意味を持っている(かもしれない)ので動作がおかしくなる。
だから意味は同じでも“値”としては別のものとして扱う(定義する)。
556デフォルトの名無しさん
2017/04/10(月) 22:00:00.06ID:PH6zMRzh ミス
意義→定義
意義→定義
557デフォルトの名無しさん
2017/04/10(月) 23:44:29.58ID:CESguEkt じゃー将来SS_CENTERが別の値に変更されても安心だね
558デフォルトの名無しさん
2017/04/11(火) 07:55:30.63ID:pJyY6xCH 変えたらひどいことになるけどなw
本音と建前みたいなもんでCの欠点だな。後発言語はそういうとこカバーされてる(のもある)
本音と建前みたいなもんでCの欠点だな。後発言語はそういうとこカバーされてる(のもある)
559デフォルトの名無しさん
2017/04/11(火) 17:52:35.12ID:xC3FSY5Y モーダルダイアログをメインの親とし、その後動的にサブメニューを表示する仕組みがあります。
サブメニュー表示中も親側の操作を可能とするため、サブメニューはモードレスとしていますが、
TABなどのキー入力が効きません。
辛うじて、初期フォーカスがあるボタンのみスペースキーを受け付けます。
マウス操作は問題ありません。
原因としてはサブメニューのキー処理をする IsDialogMessage を含むメッセージループが必要
なんだろうと思いますが、こういう場合の定石というのはあるのでしょうか?
思い付く実装は以下2パターンです。
その1
親もモードレスとし、親のメッセージループ中にサブメニューのメッセージも処理する仕組みを入れる。
その2
サブメニュー表示後に別スレッドを立ち上げ、そこでサブメニューのメッセージループを回す。
普通はこうだよ。とか他の方法などありましたらお願いします。
サブメニュー表示中も親側の操作を可能とするため、サブメニューはモードレスとしていますが、
TABなどのキー入力が効きません。
辛うじて、初期フォーカスがあるボタンのみスペースキーを受け付けます。
マウス操作は問題ありません。
原因としてはサブメニューのキー処理をする IsDialogMessage を含むメッセージループが必要
なんだろうと思いますが、こういう場合の定石というのはあるのでしょうか?
思い付く実装は以下2パターンです。
その1
親もモードレスとし、親のメッセージループ中にサブメニューのメッセージも処理する仕組みを入れる。
その2
サブメニュー表示後に別スレッドを立ち上げ、そこでサブメニューのメッセージループを回す。
普通はこうだよ。とか他の方法などありましたらお願いします。
560デフォルトの名無しさん
2017/04/11(火) 17:55:40.75ID:xC3FSY5Y ちょっと語弊がありましたので訂正です。
ここで言う「サブメニュー」とは、CreateMenu などで作られる一般的に言うメニューではなく、
単なるポップアップスタイルのタイトルなしダイアログのことです。
CreateDialog で画面を作っています。
勝手に言葉を作ってすみません。
ここで言う「サブメニュー」とは、CreateMenu などで作られる一般的に言うメニューではなく、
単なるポップアップスタイルのタイトルなしダイアログのことです。
CreateDialog で画面を作っています。
勝手に言葉を作ってすみません。
561デフォルトの名無しさん
2017/04/11(火) 18:23:36.29ID:9HH9Hffg 2つウインドウがあって、1つはメインウインドウ、もう1つはメニューウインドウ
メインウインドウにキーフォーカスがあるとメニューウインドウでキー操作できず、メニューウインドウにフォーカスがあるとメインウインドウでキー操作できない
メッセージを適宜流せばいいんじゃないか?
メインウインドウにキーフォーカスがあるとメニューウインドウでキー操作できず、メニューウインドウにフォーカスがあるとメインウインドウでキー操作できない
メッセージを適宜流せばいいんじゃないか?
562デフォルトの名無しさん
2017/04/11(火) 22:23:16.04ID:xC3FSY5Y フォーカスはそれがあるウィンドウで処理できるようなUIを考えています。
ユーザーがメインウィンドウにフォーカスを(マウスなどで)移せば、
以降はそのウィンドウでキーボード操作ができればいいです。その逆も然り。
適宜メッセージを流すにしても、結局どこでメッセージループを回すかという
話になるのではと思うのですが、違うのでしょうか?
ユーザーがメインウィンドウにフォーカスを(マウスなどで)移せば、
以降はそのウィンドウでキーボード操作ができればいいです。その逆も然り。
適宜メッセージを流すにしても、結局どこでメッセージループを回すかという
話になるのではと思うのですが、違うのでしょうか?
563デフォルトの名無しさん
2017/04/12(水) 22:43:12.22ID:iYQoJoP4 なにいってんだこいつ
564デフォルトの名無しさん
2017/04/12(水) 23:28:35.38ID:lhjyuLrL 分からないのに無理して答えるなよ
565デフォルトの名無しさん
2017/04/13(木) 02:45:23.01ID:8XBnDqPS 最近よく足がつる
566デフォルトの名無しさん
2017/04/13(木) 11:42:08.71ID:9jlRESvt >>562
フォーカスを移してキーボード操作なんて危険なことを平気でやろうとする人はWin32APIなんて使わない方が良いんじゃね?
普通はフォーカスを移そうとしているオブジェクトにフォーカスを移す移さない関係なく文字列送信するもんじゃないの?
キーボード操作中にユーザーが別のウィンドウをクリックした場合とか考えないの?
フォーカスを移してキーボード操作なんて危険なことを平気でやろうとする人はWin32APIなんて使わない方が良いんじゃね?
普通はフォーカスを移そうとしているオブジェクトにフォーカスを移す移さない関係なく文字列送信するもんじゃないの?
キーボード操作中にユーザーが別のウィンドウをクリックした場合とか考えないの?
567デフォルトの名無しさん
2017/04/13(木) 13:32:39.75ID:OCOdT3+H568デフォルトの名無しさん
2017/04/13(木) 17:59:38.26ID:zh4lU2gJ >>566
なんで何も理解できていないのに無理に話に入ろうとするの?
なんで何も理解できていないのに無理に話に入ろうとするの?
569デフォルトの名無しさん
2017/04/13(木) 18:16:04.36ID:xmE6C1ua spyで見てどこにメッセージ届いてるか見ろ
570デフォルトの名無しさん
2017/04/14(金) 00:20:20.46ID:+RGtmVs/ フォースを使うのじゃ
571デフォルトの名無しさん
2017/04/14(金) 00:39:04.52ID:6ECgJlCU Windows 10 Creators Update入れたら
DrawTextで大きめのフォントの描画が異常に遅くなった。
高DPI未対応のアプリは見捨ててGDIはシンプルに動いてほしい。
DrawTextで大きめのフォントの描画が異常に遅くなった。
高DPI未対応のアプリは見捨ててGDIはシンプルに動いてほしい。
572デフォルトの名無しさん
2017/04/14(金) 05:38:58.24ID:kIyPPZzD >>567
2行目めちゃくちゃだなw
2行目めちゃくちゃだなw
573デフォルトの名無しさん
2017/04/14(金) 10:41:54.49ID:7fCdXhh/574デフォルトの名無しさん
2017/04/14(金) 11:11:32.10ID:LVRPT4/o Win32APIの後継でc++/cliじゃないライブラリってないのかね?
575デフォルトの名無しさん
2017/04/14(金) 11:29:24.19ID:iAr+rl+J576デフォルトの名無しさん
2017/04/14(金) 15:40:59.51ID:Z/bjVn5R しいて言えばQtじゃね?
Qtのアプリって結構あるよね
Qtのアプリって結構あるよね
577デフォルトの名無しさん
2017/04/14(金) 18:23:47.19ID:R7yCPQGT >>574
ライブラリってかAPIはユニバーサルwinのがそれじゃないの?
ライブラリってかAPIはユニバーサルwinのがそれじゃないの?
578デフォルトの名無しさん
2017/04/14(金) 18:31:24.82ID:uRqmXJpf WinRT API
579デフォルトの名無しさん
2017/04/14(金) 22:27:03.58ID:Gjx6wpyy ここでWTLがまさかの大復活を遂げるわけよ
580デフォルトの名無しさん
2017/04/15(土) 06:16:39.59ID:qt9qpnGQ ちょっとしたもんつくるにはwtlが一番いい
581デフォルトの名無しさん
2017/04/15(土) 18:14:11.71ID:JjgxHVsv582デフォルトの名無しさん
2017/05/05(金) 00:01:23.37ID:j+7+fM28 Windows10S では Win32/.net アプリは動かないだと。
UWPに変換すれば行けるらしいが、もうおしまいか?
UWPに変換すれば行けるらしいが、もうおしまいか?
583デフォルトの名無しさん
2017/05/05(金) 00:15:11.42ID:NU+YZp1H Windows10Sが相手にされなくて終わるだけ。
584デフォルトの名無しさん
2017/05/05(金) 00:41:30.18ID:W8ns9+oF 既に相手されていない感
585デフォルトの名無しさん
2017/05/05(金) 03:08:44.86ID:IUUvTOhg お前らが相手にされてないじゃん
おっさんしかいないだろうこのスレ
おっさんしかいないだろうこのスレ
586デフォルトの名無しさん
2017/05/05(金) 08:12:57.54ID:WdEsZnG0 今回のターゲット層はメインストリームじゃないから
既存のアプリが使えなくても不満は少ないと踏んでるんだろう
まあWindowsRTみたいに核爆死はしないんじゃないか
MSもそんなに数を出荷しないだろうから
もう一度WindowsRTをSurfaceやらに載せることを夢見ているのなら
やはりもう一度爆死するだろう
既存のアプリが使えなくても不満は少ないと踏んでるんだろう
まあWindowsRTみたいに核爆死はしないんじゃないか
MSもそんなに数を出荷しないだろうから
もう一度WindowsRTをSurfaceやらに載せることを夢見ているのなら
やはりもう一度爆死するだろう
587デフォルトの名無しさん
2017/05/05(金) 18:13:03.55ID:ERU+CvkU 教育用途だっけ
今時のキッズは学校支給タブレットの制限外してゲームしてるらしいからその点ではいいかもな
今時のキッズは学校支給タブレットの制限外してゲームしてるらしいからその点ではいいかもな
588片山博文MZ ◆T6xkBnTXz7B0
2017/05/06(土) 18:59:21.43ID:0OTJXmRc あるプログラムで使用中のGDIオブジェクトの個数を数える方法はありますか?
589デフォルトの名無しさん
2017/05/06(土) 20:36:55.22ID:TAVkl+y8 タスクマネージャで見れるよ
590デフォルトの名無しさん
2017/05/06(土) 20:50:23.24ID:IA0Dpe0I GetGuiResources(hProcess, GR_GDIOBJECTS)
591デフォルトの名無しさん
2017/05/06(土) 20:53:17.94ID:Mwx5Td89592片山博文MZ ◆T6xkBnTXz7B0
2017/05/06(土) 20:54:47.07ID:NWV3MG9s ありがとー。
593デフォルトの名無しさん
2017/05/06(土) 21:06:22.69ID:HiVS0qll なにするつもりなのさ
594片山博文MZ ◆T6xkBnTXz7B0
2017/05/06(土) 21:08:39.06ID:NWV3MG9s メモリーリーク対策やデバッグやらだよ。
595雪風
2017/05/06(土) 21:54:04.69ID:QwsGrGdx >>593
自演 オナヌーだろ
自演 オナヌーだろ
596デフォルトの名無しさん
2017/05/06(土) 22:06:22.10ID:sQ11ayCM 書いてて恥ずかしくないの?
597デフォルトの名無しさん
2017/05/07(日) 02:01:32.34ID:KMqw+OzL598デフォルトの名無しさん
2017/05/07(日) 07:23:08.46ID:fOF53fEF firefoxとかリーク笑えるよな
599デフォルトの名無しさん
2017/05/09(火) 09:36:37.30ID:PBqzgUoz 特定のアプリケーションがハング状態になってるかを判断する方法ありませんか?
.netではRespondingプロパティで判断できるようですがwin32apiでやりたいので
.netではRespondingプロパティで判断できるようですがwin32apiでやりたいので
600デフォルトの名無しさん
2017/05/09(火) 09:45:13.26ID:XSL1JKA6 そこまで分かってるならソース読めよ
https://github.com/Microsoft/referencesource/blob/master/System/services/monitoring/system/diagnosticts/Process.cs
SendMessageTimeoutでWM_NULLを投げてるだけだな
https://github.com/Microsoft/referencesource/blob/master/System/services/monitoring/system/diagnosticts/Process.cs
SendMessageTimeoutでWM_NULLを投げてるだけだな
601デフォルトの名無しさん
2017/05/09(火) 10:04:41.73ID:4hsRJ4JE その質問コピペだよ
602デフォルトの名無しさん
2017/05/09(火) 10:17:40.46ID:PBqzgUoz ありがとうございました!
603デフォルトの名無しさん
2017/05/09(火) 11:30:51.02ID:fjUlBZmQ >>600
これ使ってDoS攻撃みたいなこと出来るんかな
これ使ってDoS攻撃みたいなこと出来るんかな
604デフォルトの名無しさん
2017/05/09(火) 21:20:50.87ID:2/UhKD8y 最近のアプリに多い、重い処理は別スレッドで実行してGUIが固まらないようにしてる場合は役に立たないかな
605デフォルトの名無しさん
2017/05/09(火) 21:48:08.53ID:LCRfM0F6 >>604
それは「重い処理のときにハングアップしているように見える」というだけの話で、
そういうレベルでの意味ならマルチスレッド化によって役には立たない。
でもそういうマルチスレッド化したソフトウェアでも
画面描画の時の不具合などでハングアップすることもあるわけで役に立たないということはないよ。
それは「重い処理のときにハングアップしているように見える」というだけの話で、
そういうレベルでの意味ならマルチスレッド化によって役には立たない。
でもそういうマルチスレッド化したソフトウェアでも
画面描画の時の不具合などでハングアップすることもあるわけで役に立たないということはないよ。
606デフォルトの名無しさん
2017/05/09(火) 22:06:52.23ID:2/UhKD8y607デフォルトの名無しさん
2017/05/09(火) 23:47:50.15ID:Ephb2XFu ウィンドウがわかるならIsHungAppWindowってのがある
608デフォルトの名無しさん
2017/05/10(水) 02:35:27.31ID:bnhY1qc6 >>606
動画の変換みたいに純粋に時間がかかる場合とか、ユーザーのクリック待ちとかもあるから、判断はできんだろうな
動画の変換みたいに純粋に時間がかかる場合とか、ユーザーのクリック待ちとかもあるから、判断はできんだろうな
609デフォルトの名無しさん
2017/05/10(水) 02:56:46.04ID:SJjrbjyQ 止めようとしても停まらないもの?
WindowsUpdateかな?
WindowsUpdateかな?
610デフォルトの名無しさん
2017/05/10(水) 11:25:51.30ID:Cp7+CNi6 >>609
ネットワーク切れてからのタイムアウトも異常に遅いんだよな
ネットワーク切れてからのタイムアウトも異常に遅いんだよな
611デフォルトの名無しさん
2017/05/14(日) 19:29:07.89ID:QF9yNcvN まだ見放されてないぞ
【IT】マイクロソフト、サポート切れOS「Windows 8、Windows XP、Windows Server 2003」にも修正ソフト提供
asahi.2ch.net
test/read.cgi/newsplus/1494723803
【IT】マイクロソフト、サポート切れOS「Windows 8、Windows XP、Windows Server 2003」にも修正ソフト提供
asahi.2ch.net
test/read.cgi/newsplus/1494723803
612デフォルトの名無しさん
2017/05/19(金) 19:48:39.48ID:7xgwPeWo 質問ささてください
構造体AをGlobalAllocで領域を確保して値を入れた後、構造体BをGlobalAllocで確保すると、構造体Aのメンバであるポインタのアドレスが変わってしまうのですが何が原因なのでしょうか?
構造体AをGlobalAllocで領域を確保して値を入れた後、構造体BをGlobalAllocで確保すると、構造体Aのメンバであるポインタのアドレスが変わってしまうのですが何が原因なのでしょうか?
613デフォルトの名無しさん
2017/05/19(金) 20:35:00.88ID:bDipVMhT あるプロセスのメモリ情報のリージョンサイズや属性を調べるにはどのAPIを使えばいいですか?
614デフォルトの名無しさん
2017/05/19(金) 20:49:42.55ID:McGsnd5l >>612
Windowsは働き者の賢いOSだからなぁ
Windowsは働き者の賢いOSだからなぁ
615デフォルトの名無しさん
2017/05/19(金) 21:09:20.04ID:/MnRfLXT 動かしたくないならLockしてください
616デフォルトの名無しさん
2017/05/19(金) 21:11:02.62ID:vqbyNvRL >>612
GlobalAllocじゃなくて自分で書き換えてるんでしょ
GlobalAllocじゃなくて自分で書き換えてるんでしょ
617デフォルトの名無しさん
2017/05/19(金) 21:22:03.75ID:Q8L1LGu9 >>612
GMEM_FIXEDを指定していないGlobalAllocでロックカウントが0の場合はメモリの再配置が起きる
GlobalLockとGlobalUnlockの間なら
「構造体Aのメンバであるポインタのアドレス」は変わることがないけど
GlobalUnlockを呼び出しロックを解除した場合は再配置される可能性がある
GMEM_FIXEDを指定していないGlobalAllocでロックカウントが0の場合はメモリの再配置が起きる
GlobalLockとGlobalUnlockの間なら
「構造体Aのメンバであるポインタのアドレス」は変わることがないけど
GlobalUnlockを呼び出しロックを解除した場合は再配置される可能性がある
618デフォルトの名無しさん
2017/05/20(土) 18:36:33.10ID:urI3JAo7619デフォルトの名無しさん
2017/05/20(土) 18:43:52.60ID:YAniTqrY 違うんじゃね
620デフォルトの名無しさん
2017/05/20(土) 19:05:41.41ID:rnnQH6fx ソースコードにイージーミスがある可能性の方がクッソ高いと思う
621デフォルトの名無しさん
2017/05/20(土) 19:06:46.68ID:opost44+622デフォルトの名無しさん
2017/05/20(土) 19:08:39.87ID:YAniTqrY 必要最小限の再現ソース晒してからだな
623デフォルトの名無しさん
2017/05/21(日) 02:26:55.08ID:8+aEBKAw 構造体A、もしくはその近くのメモリ確保量が足りていないような気がする
スタック破壊、または、メモリ内容破壊では?
スタック破壊、または、メモリ内容破壊では?
624デフォルトの名無しさん
2017/05/21(日) 10:34:21.57ID:UufpipHO >>613
VirtualQueryEx
VirtualQueryEx
625デフォルトの名無しさん
2017/05/21(日) 10:40:12.71ID:8IHB32RP すみません。自分がC++素人でメモリ周り疎いのでよくあるトラブルかなと思い、動作確認できている部分は抽象的に書きました。イージーミスの可能性はかなりあります。
ソースが手元にないのですが、具体的にはこのような処理をしています。スマホから書いたので文法ミスあるかもしれません。
メイン処理
DWOR count=0;
LPBYTE pStructA = (LPBYTE)GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(pStructA,&count);//自作関数 pStructAに構造体格納
/*ここでブレーク張ってpStructAのpNameのアドレスが正しい文字列指してるのは確認済み*/
PStructB pStructB = (PStructB)GlobalAlloc(GHND,sizeof(StructB)*count);
/*ここで改めてpNameを取得しようとするとpNameのアドレスがpStructBを確保する前と変わっている。元の文字列データは以前として前のアドレス上に存在してることは確認済み。pStructA自体のアドレスは変わっていない
*/
for(i=0 ;i<count;i++){
LPTSTR name= (((PRINTER_INFO_1*)pStructA)+count)->pName;
}
〜〜〜
自作関数 (動作確認済み)
DWORD GetPrinterInfo(LPBYTE pStructA, LPDWORD count){
DWORD result=0;
DWORD pNeeded=0;
//必要サイズ取得
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,pdw
&pNeeded,count);
//必要サイズ再確保
Global ReAlloc(pStructA,pNeeded,GHND);
//ここでPRINTER_INFO_1構造体をpStructAに格納
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,pdw
pNeeded,count);
return result;
}
ソースが手元にないのですが、具体的にはこのような処理をしています。スマホから書いたので文法ミスあるかもしれません。
メイン処理
DWOR count=0;
LPBYTE pStructA = (LPBYTE)GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(pStructA,&count);//自作関数 pStructAに構造体格納
/*ここでブレーク張ってpStructAのpNameのアドレスが正しい文字列指してるのは確認済み*/
PStructB pStructB = (PStructB)GlobalAlloc(GHND,sizeof(StructB)*count);
/*ここで改めてpNameを取得しようとするとpNameのアドレスがpStructBを確保する前と変わっている。元の文字列データは以前として前のアドレス上に存在してることは確認済み。pStructA自体のアドレスは変わっていない
*/
for(i=0 ;i<count;i++){
LPTSTR name= (((PRINTER_INFO_1*)pStructA)+count)->pName;
}
〜〜〜
自作関数 (動作確認済み)
DWORD GetPrinterInfo(LPBYTE pStructA, LPDWORD count){
DWORD result=0;
DWORD pNeeded=0;
//必要サイズ取得
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,pdw
&pNeeded,count);
//必要サイズ再確保
Global ReAlloc(pStructA,pNeeded,GHND);
//ここでPRINTER_INFO_1構造体をpStructAに格納
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,pdw
pNeeded,count);
return result;
}
626デフォルトの名無しさん
2017/05/21(日) 11:10:23.22ID:Bmvuj1qA GlobalAllocの戻り値のハンドルを直接キャストしてポインタに代入したら駄目だろ
ハンドルを引数としてGlobalLockを呼び出して、その戻り値をキャストしてポインタに代入しろ
ハンドルを引数としてGlobalLockを呼び出して、その戻り値をキャストしてポインタに代入しろ
627デフォルトの名無しさん
2017/05/21(日) 11:25:17.73ID:8zMWeNzv 蓋を開けてみればやはりこんなもんだ
p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
HeapFree(GetProcessHeap(), 0, p);
でうまくやってるよ,GlobalAlloc は win3.1 の仕様を下敷きにしているので使いにくいよ
HeapFree(GetProcessHeap(), 0, p);
でうまくやってるよ,GlobalAlloc は win3.1 の仕様を下敷きにしているので使いにくいよ
629デフォルトの名無しさん
2017/05/21(日) 14:52:03.05ID:2E7Z41P0 オワコンだしな
今はもうmallocでいいよ
今はもうmallocでいいよ
>>629
それはどこにあるのかな?
それはどこにあるのかな?
631デフォルトの名無しさん
2017/05/21(日) 16:25:59.44ID:qIzrXw0L >>625
関数の仕様ぐらい確認しろといいたい
https://msdn.microsoft.com/ja-jp/library/cc430065.aspx
GMEM_FIXEDを指定していないGlobalAllocはメモリハンドルを返す
アドレスではなくハンドルであり、このハンドルをGlobalLockに渡すことでメモリアドレスを取得できる
メイン処理
DWORD count=0;
HGLOBAL gm = GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(gm,&count);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
for(i=0 ;i<count;i++){
LPTSTR name= ((PRINTER_INFO_1*)pStructA)[i].pName;
}
〜〜〜
DWORD GetPrinterInfo(HGLOBAL gm, LPDWORD count){
DWORD dwSize;
DWORD result=0;
DWORD pNeeded=0;
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,0,&pNeeded,count);
Global ReAlloc(gm,pNeeded,GHND);
dwSize = GlobalSize(gm);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,dwSize,&pNeeded,count);
GlobalUnlock(gm);
return result;
}
関数の仕様ぐらい確認しろといいたい
https://msdn.microsoft.com/ja-jp/library/cc430065.aspx
GMEM_FIXEDを指定していないGlobalAllocはメモリハンドルを返す
アドレスではなくハンドルであり、このハンドルをGlobalLockに渡すことでメモリアドレスを取得できる
メイン処理
DWORD count=0;
HGLOBAL gm = GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(gm,&count);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
for(i=0 ;i<count;i++){
LPTSTR name= ((PRINTER_INFO_1*)pStructA)[i].pName;
}
〜〜〜
DWORD GetPrinterInfo(HGLOBAL gm, LPDWORD count){
DWORD dwSize;
DWORD result=0;
DWORD pNeeded=0;
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,0,&pNeeded,count);
Global ReAlloc(gm,pNeeded,GHND);
dwSize = GlobalSize(gm);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,dwSize,&pNeeded,count);
GlobalUnlock(gm);
return result;
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市朗報】 日本政府「一昨年は1300億円。去年も防衛費が1100億円余ったw」 日本の防衛費は充分足りてる事が判明。増やす必要無し [485983549]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
