X



Win32API質問箱 Build125

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/02/27(水) 15:09:08.64ID:6ExXwgQU
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build124
http://mevius.5ch.net/test/read.cgi/tech/1510395780/
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2019
http://mevius.5ch.net/test/read.cgi/tech/1548765663/
Visual Studio 2017 Part6
http://mevius.5ch.net/test/read.cgi/tech/1528645068/
【C++】 DirectX初心者質問スレ Part41 【C】
http://mevius.5ch.net/test/read.cgi/tech/1521786252/
0274デフォルトの名無しさん
垢版 |
2019/09/13(金) 10:15:47.66ID:wKEqF87n
1.1.0.α
1.1.0.β
1.1.0.γ
0275デフォルトの名無しさん
垢版 |
2019/09/13(金) 10:18:26.30ID:ud7Tmahn
1.0.0.01
1.0.0.011
1.0.0.0111
1.0.0.01111
0276デフォルトの名無しさん
垢版 |
2019/09/13(金) 11:29:05.95ID:aNvomMID
>>271
> 1.0.0.1とかはあかんの?
やっぱりこれが妥当なんですかね。
他のアプリのベータ版も見てみたいとは思うのですが。

秀丸エディタは、ベータ版は4桁目を増やし続けて、リリース版には99を入れてました。
1.1.0.99が1.1.0のリリース版という法則でした。

> 1.1.0.α
> 1.0.0.01
FILEVERSIONやPRODUCTVERSIONには、αや01は入力できないです。
必ず4つの数字を入れないと、勝手に0が入ってしまいますし。
0277デフォルトの名無しさん
垢版 |
2019/09/13(金) 12:49:50.53ID:IRP8OWhI
昔、同僚にクラス設計やコメントの書式にやたら拘る奴がいたの思い出した
綺麗なソースコード書いてたけど、まったく動かないゴミですぐ職場から消えたわw
0278デフォルトの名無しさん
垢版 |
2019/09/13(金) 12:54:34.90ID:NSArXc0X
そういう人って恋人も見た目重視にしてそう
ソースコード(見た目)って意味で
0279デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:47:19.57ID:+RoIj51L
>>276
所詮決め事なんで>>272の言うとおり好きにしてくださいって話だけど
良くありがちなのは

メジャーバージョン.マイナーバージョン.ビルドバージョン

みたいな
メジャーバージョンはアーキテクチャとかUIの大きな変更とかユーザから見ても
変更されたことが分かるような場合
マイナーバージョンは単機能追加とかバグ修正などユーザから一見分からない
ような軽微な変更の場合
ビルドバージョンは作業途中の状態を管理するための連番や単一作業の区切りを
管理するための連番とか
みたいな感じで自分で目的を決めて使うしかないよ
他には作業の効率管理のためにさらにビルド回数を最後に付けてコンパイルする
たびに番号加算していくとか
後はOSのバージョンごとにパッキングを変える場合はPRODUCTOVERSIONと
FILEVERSIONを関連性は持たせるけど個別に管理するとか

>>273
あれは企業的に仕事をしてますよアピールなので残念なのは経営層か
投資家かな
バグ修正はマイナーバージョン、それ以外はすべてメジャーバージョンの修正に
することですごくたくさん仕事してますよがアピールできるので
0280デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:52:57.53ID:xaEp9cr2
>>273 さんはそんなこと言われなくても判ってて書いてるだろ
0281デフォルトの名無しさん
垢版 |
2019/09/13(金) 23:06:09.82ID:ZW8mwhnp
INVALID_HANDLE_VALUEってマジで糞だよな
うっかりしてると失敗したときNULLが返ってくるって勘違いするというか
ボーッとしてるとそういうコード書いちまうことがある
大概のAPIでは失敗したときNULLが返ってくるってのもある
混在いやん
0282デフォルトの名無しさん
垢版 |
2019/09/13(金) 23:10:11.55ID:ZW8mwhnp
あと、なんでINVALID_HANDLE_VALUEが必要になったのか技術的な背景が気になる
普通に0を返しとけばいいじゃん、って思うよね
他のAPIがそうなってるんだから
0285デフォルトの名無しさん
垢版 |
2019/09/14(土) 03:06:20.87ID:BTqGkHHG
しかしそれらを超越した次元で総合的に判断してやっぱりINVALID_HANDLE_VALUEは糞
必要ないからな
0287デフォルトの名無しさん
垢版 |
2019/09/14(土) 05:42:23.89ID:MJsGg5EL
>>284
それは論点が違う
マジで糞かどうかだろうが
285はちゃんと自分なりの見解を言っているし
286は情報提供している
お前だけとかくだらんことしか言わんボーガスとは次元が違う

16bit時代は低コストに拘るあまり
色々とアホなことをしていた
その名残を糞って言えないやつも糞だ
0288デフォルトの名無しさん
垢版 |
2019/09/14(土) 10:06:00.92ID:TUFMAlcF
ComboBoxはCB_ERRがある
ListBoxはLB_ERRがある

ListViewはただの-1で定義無し
LV_ERRじゃないのはなんで?
0289デフォルトの名無しさん
垢版 |
2019/09/14(土) 11:02:16.25ID:BTqGkHHG
>>286読んで思い出したが
そうそうHANDLEのスマポ作るときにウザいんだよな
既定の初期値を何にしておくかって問題があるからな!
ああ糞だ
0290デフォルトの名無しさん
垢版 |
2019/09/14(土) 11:26:55.16ID:BTqGkHHG
後HANDLEのスマポのデストラクタでCloseHandleするとき
失敗したり何も入ってなかったり
無効なハンドルの場合はCloseHandleしないようにする場合も嫌らしい
無効なハンドルを表す値が二つ有るからな!!
if( handle && handle != INVALID_HANDLE_VALUE ){ ::CloseHandle( handle ); }
と書いてしまいたいところだが、本当にこれでよいのか?
それかCloseHandleに無効なハンドルを渡したときは何もしないことを期待して
if文なしで単に::CloseHandle( handle );とだけ書くか
しかしCloseHandleに無効なハンドルを渡したときの動作はMSDNには書かれてないんだよな
まぁ何もしないと思うが
0291デフォルトの名無しさん
垢版 |
2019/09/14(土) 11:39:00.01ID:BTqGkHHG
ああ今調べたら、CloseHandleに無効なハンドル渡したら
GetLastErrorが汚染されるらしいな
0292デフォルトの名無しさん
垢版 |
2019/09/14(土) 11:51:46.43ID:U/7wJfIU
初期化と開放とかのインターフェース作って、そのインターフェース派生でAPIアクセスしてるな
その手のはAPI直接叩くソース書くと後からコーディングミスに気付いても修正困難になるしバグの元
0293デフォルトの名無しさん
垢版 |
2019/09/14(土) 13:23:12.69ID:i3tDL1ol
>>288
前者2つはOS基本機能、後者はコモンコントロールというオプション
という違いから歴史と立ち位置が違う
ついでに言えば設計から全然違うんで、定義がないのは不思議ではない
0294デフォルトの名無しさん
垢版 |
2019/09/14(土) 13:47:20.57ID:U/7wJfIU
どれもコモンコントロールだよ
歴史的には昔はリストビューがコモンコントロールじゃなかったかもしれないが分からない
0295デフォルトの名無しさん
垢版 |
2019/09/14(土) 14:05:12.55ID:mIZ3m5oP
昔のWindowsAPIはHANDLEとポインタが別物だったのを知らん人がいるのか
0296デフォルトの名無しさん
垢版 |
2019/09/14(土) 14:06:49.93ID:mIZ3m5oP
>>288
ポインタが奇数になるはずはない(キリっ
だから奇数の空間を全て別のオブジェクトに
おれ天才じゃね?って糞言語が日本にはある
0297デフォルトの名無しさん
垢版 |
2019/09/14(土) 15:56:30.20ID:6R0WtlX/
フリーのリソースエディタとAPIでGUIプログラムを作っているけど、
もう時代遅れなのかな。

みなさんは、GUIプログラムはどうやって作っていますか。
0298デフォルトの名無しさん
垢版 |
2019/09/14(土) 16:05:19.86ID:BWRFT45i
リソースエディタなんぞ使わず全部apiからテキストエディタ上で
数値指定で作ってるんでそんな自分よりかは進んでるぞ
まあ今の時代ならvisual studio使うのが普通だろうね
0300◆QZaw55cn4c
垢版 |
2019/09/14(土) 16:49:47.51ID:1pj+LkZL
>>297
cygwin/mingw64 でコンパイル・リンクできるよう、リソースは手書きですね…
0301蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/14(土) 16:58:44.72ID:0f+SL6BM
俺は自作のリソーエディタ使ってるけど。MinGWでもVC++でもビルドできるよ。
0302デフォルトの名無しさん
垢版 |
2019/09/14(土) 17:18:22.21ID:i3tDL1ol
>>294
コモンかどうか名前はさておき、リストビューは明確にcomctl32を使うような
宣言とリンクがないと使えないでしょ
リストもコンボはこいつの範疇ではない
0303デフォルトの名無しさん
垢版 |
2019/09/14(土) 19:04:46.82ID:TUFMAlcF
WinUser.h
 ComboBox CB_ERR
 ListBox LB_ERR
CommCtrl.h
 ListView関係のメッセージやマクロ

この違いは歴史関係って事?
LVM_INSERTITEMが失敗した場合は-1が返るけど
LV_ERR(-1)とするのはおかしい?
0305デフォルトの名無しさん
垢版 |
2019/09/14(土) 21:33:59.27ID:FV8dJ/wR
Windowsで.NET使わずにC/C++とWin32APIでPerl互換の正規表現を使ったプログラムを作る場合、
従来はboost::regexやPCREなど別途ライブラリが必要だったけど、Windows10以降はICUの正規表現を使えるようになった。
ただし、可変長文字列を扱うUnicodeStringクラスがヘッダーファイルicu.hから削除されているので、std::wstringなどで代替する必要がある。
0307デフォルトの名無しさん
垢版 |
2019/09/14(土) 22:37:17.04ID:bBqfD384
昔の事は多少は多目に見てやれよ。今みたいにSNSが活発じゃないし、githubで他人のソースも簡単に見れるわけしゎゃない。知見を共有しづらい時代なんだから
0310デフォルトの名無しさん
垢版 |
2019/09/15(日) 01:22:53.14ID:84ndTw+e
dwは長さが一番揺らいでると思う
0314デフォルトの名無しさん
垢版 |
2019/09/15(日) 12:35:24.64ID:tu3q64lr
unix の execlp だと pid は変化しませんが、
Win32API の execlp とか _execlp とかだと processID は変化してしまうようです。

CreateProcess が呼ばれているからだと思いますが、
Win32API の execlp とか _execlp とかで変わったあとの processID を知る方法はありますか?
(起動された側で getpid() で判るのですが、そっちではなくて元の processID を握ってる方からのリンクが切れて困ってます。)
0315デフォルトの名無しさん
垢版 |
2019/09/15(日) 18:08:42.80ID:jdtp5u68
>>297
俺はリソーススクリプト直叩き
MSDNに詳しい情報乗ってるし、英語だけど
プログラマなら大体わかるよ、翻訳サイトを使ってもいいしね

そして、ライブラリ化しといて次から簡単に使えるようにしとく
バージョン情報とかも関数やクラスにして簡単に使えるようまとめとけば便利
GUIは.NETがクラス化の良いお手本になるよ
0317デフォルトの名無しさん
垢版 |
2019/09/15(日) 19:55:06.55ID:G+rzyOKL
>>314
> Win32API の execlp とか _execlp
そもそもexeclpとかはwin32apiじゃなくて単なるライブラリだよ
とりあえずざっとソース見る限りではpidを返す方法はないみたい(インターフェースもないしね)
自分で実装するしかないと思う
0318デフォルトの名無しさん
垢版 |
2019/09/15(日) 23:50:00.36ID:jdtp5u68
>>316
VSは使ってるよ、昔は無料のエディションには
MFCもリソースエディタも付いてなかったからな

趣味でやってるから問題なし
フリーのリソースエディタを入れるか迷ったこともあったけど
直叩きで行けるしまあいいかと
0319デフォルトの名無しさん
垢版 |
2019/09/16(月) 00:47:21.27ID:iDbWACrZ
それぐらい普通、何でもないよ
俺なんかメニューバーとかスクロールバーとかツールバーとかリストビューとか
こまごましたUIパーツ、全部DirectXで一からフルスクラッチで書いたし
4K画面だとリストビューとか動作がカクカクになるから使い物にならんよ
フォントの描画が重いみたい
0321蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/16(月) 01:47:28.54ID:cPhlmIua
後世のために書いておくが、Visual StudioのリソースコンパイラーはUTF-8の扱いに致命的なバグがあって、最悪の場合、文字化けする。あれはANSIコードページかUTF-16で使うものだ。
0326蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/16(月) 18:32:35.66ID:cPhlmIua
MinGWのwindresというコンパイラーなら、pragmaでコードページ指定すればUTF-8が使える。
Visual Studioのrcは前述の通りUTF-8読み込みにバグがある。
0327デフォルトの名無しさん
垢版 |
2019/09/16(月) 18:40:12.76ID:OCMqZYFH
RisohEditorってどうなん
0328蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/16(月) 18:43:49.21ID:cPhlmIua
RisohEditorはUTF-8とUTF-16のソースが扱える。UTF-16の入力は、独自のプリプロセッサでUTF-8に変換している。
0332デフォルトの名無しさん
垢版 |
2019/09/16(月) 19:56:19.89ID:OCMqZYFH
UTF-8 も BOM 付けちゃいけないんだろ
0334デフォルトの名無しさん
垢版 |
2019/09/17(火) 00:30:59.73ID:J+q8D2Xe
>>331
理解が間違っている。

「BOMつきUTF-16LE」と「UTF-16LE」は別のものであり、どちらも存在する。
「UTF-16LE」にBOMがついていないからこそ「BOMつきUTF-16LE」という表現が成り立つ。
小倉トーストとトーストが別のものであることと同じであり、トーストに小倉餡がついていないからこそ小倉トーストが成り立つ。
0335デフォルトの名無しさん
垢版 |
2019/09/17(火) 02:12:33.57ID:GJd5TLi7
粒餡と餡子が別のものであることと同じであり、
餡子に粒が入ってないからこそ粒餡が成り立つ
ってことですね
0336デフォルトの名無しさん
垢版 |
2019/09/17(火) 02:53:38.24ID:J+q8D2Xe
名古屋のモーニングにゆで卵がついたからといって、モーニングでなくなるわけではないのだ。
無論、ゆで卵がつかないモーニングもある。ゆで卵がつこうがつくまいがモーニングなのだ。
0339デフォルトの名無しさん
垢版 |
2019/09/17(火) 18:08:21.64ID:+bGUkqkJ
みそかつ
みそ煮込みうどん
高血圧
0340デフォルトの名無しさん
垢版 |
2019/09/17(火) 18:36:53.76ID:TzGpBMAj
段ボール入り肉まんが人によってはバレないが、やはり人間的にはエラーが出やすい
そういうことだな
0341デフォルトの名無しさん
垢版 |
2019/09/18(水) 14:01:12.80ID:+0ud2Fjw
Caretの点滅間隔について質問です

自アプリがアクティブの時のみ点灯(点滅間隔にUINT_MAXを指定して擬似的に)
自アプリが起動中はWM_SETFOCUSでON(点灯)に、WM_KILLFOCUSでOFF(元の間隔)にする事はできましたし他のアプリにも影響はありません
ですが自アプリが終了したら他のアプリでもONの状態になってしまいます
メッセージを追ってみると
WM_CLOSEでDestroyWindow
→WM_KILLFOCUSでOFFへ
→プロセスが終了
になっていたので自アプリ内で再度ONになっている事はないです

これはどういう事ですか?
0342デフォルトの名無しさん
垢版 |
2019/09/18(水) 19:04:24.43ID:L8SHYgAR
WM_CLOSE
→DestroyWindow (hWnd 失効)
→WM_KILLFOCUSでOFFへ (hWnd 違いで無視)
→プロセスが終了

かな
知らんけど
0343デフォルトの名無しさん
垢版 |
2019/09/18(水) 19:30:38.13ID:+0ud2Fjw
ありがとうございます

引数は間隔のみですが一応DestroyWindow直前でOFFにしてみても同じ結果でした
0345デフォルトの名無しさん
垢版 |
2019/09/18(水) 19:37:10.52ID:+0ud2Fjw
Getで値を見てみるとONの状態になってしまうのではなく
アプリが終了したら間隔が0xfeeefeeeになってしまう
でした

言い直しますと
System設定の500(ミリ秒)からUINT_MAXではなく200へ変更するようにしても
アプリを終了したら間隔が0xfeeefeeeになってしまう
です
0347デフォルトの名無しさん
垢版 |
2019/09/18(水) 19:57:32.75ID:u5s3196f
方法は何でもいいけど、例えばクリックしたらキャレット処理を終了→その後アプリ終了でどうなるかやってみ
問題が絞り込めるでしょ

WM_CLOSEで終了処理が思ったように動いてないってのはありがち
0349デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:07:36.38ID:+0ud2Fjw
>>347
それも既に試しましたが同じ結果です
>>341でも書きましたがメッセージを追ってWM_CLOSEが正常な事も確認済みです
0351デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:10:41.11ID:+0ud2Fjw
>>347
途中送信すみません
設定してもいない値0xfeeefeeeになるので
間隔はSystemと同じ値(500)にSetするだけにしてみても同じ結果でした
0352デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:12:42.36ID:rjYHNvyN
0xfeeeってデバッグの時の初期化されてない奴の値じゃないっけ
終了時に数値の参照先おかしくなってるとかかな
0353デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:31:05.81ID:VIgnmm9s
「あなたのアプリがWM_CLOSEで0xfeeefeeeにしてる」のは明白でしょ
0xfeeefeeeって特別な値よ、ググってみそ
0355デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:51:02.69ID:doMp/Sm3
DEBUGビルドのランタイムで
newからのdelete や malloc からの free の後に 確保領域の内容を0xfeee で埋める

ポインタを開放した後に指し先の内容値を取得し、セットしちゃってるんでないの?
0356デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:51:25.32ID:nSTUFOvJ
速度設定するとこにトレース出力でもおいて、まずはほんとに意図しないタイミングで呼ばれてないのかチェックだな
0358デフォルトの名無しさん
垢版 |
2019/09/18(水) 21:32:56.42ID:+0ud2Fjw
>>353
キャレット関係の終了処理をWM_LBUTTONDOWNのタイミングに変更した時に
WM_CLOSEの方のキャレット関係の終了処理はコメントアウトしました

>>354
してもしなくても同じ結果になります

>>355
値の指定をハードコードにしても同じでした

>>356-357
重複した呼び出しなども無かったです
0360デフォルトの名無しさん
垢版 |
2019/09/18(水) 21:58:28.43ID:rjYHNvyN
別のとこでメモリ壊してるんかな
その部分だけの最小コード書いてみては
それでもなるなら手に負えない感じが
0364デフォルトの名無しさん
垢版 |
2019/09/18(水) 22:51:58.57ID:u5s3196f
>>358
> キャレット関係の終了処理をWM_LBUTTONDOWNのタイミングに変更した時に
> WM_CLOSEの方のキャレット関係の終了処理はコメントアウトしました

マウスクリックで終了してる「はず」なのに終了してないなら、そもそもキャレット処理を
全く走らせてなくても問題が再現する「はず」

でもその場合は問題ないってなら、やはり終了処理に何かある
0366デフォルトの名無しさん
垢版 |
2019/09/19(木) 08:37:27.80ID:55mEbAq6
>>361
new -> delete -> 値が0xfeeefeeeに

もしnewしたクラスのメンバ変数が値を保持して間隔設定してるなら
delete後に0xfeeefeeeなるよ
クラスポインタをdeleteしてからNULLにしたらエラーになるはず

こんな感じじゃないかな

WM_CLOSEで(deleteしてから)DestroyWindow (クラスポインタとメンバ変数の値が0xfeeefeeeに)
→WM_KILLFOCUSでOFFへ (OFFにする時に参照してるメンバ変数が0xfeeefeee)
→プロセスが終了

でもハードコードでもなるみたいだから違うかも?
0367デフォルトの名無しさん
垢版 |
2019/09/19(木) 09:42:21.55ID:BhEGNWlU
unix の pipe は双方向だと思うのですが
win32api の pipe (namedpipe ではない方) は一方通行なんでしょうか?
先生なんとかなりませんか?
0368デフォルトの名無しさん
垢版 |
2019/09/19(木) 09:45:58.80ID:VunEY3BQ
WM_CLOSE

WM_DESTROY
0369デフォルトの名無しさん
垢版 |
2019/09/19(木) 09:51:38.16ID:VunEY3BQ
ああ
WM_QUIT
かな
0371デフォルトの名無しさん
垢版 |
2019/09/19(木) 10:35:55.09ID:WgtBHfjG
>>366
間隔設定がよくわからんが

class C { int a; };

auto x = new C();
delete x;

ってやるとxのポイント先が0xddddddddになるんだが…
Visual Studio Express 2017, 15.9.16
0372デフォルトの名無しさん
垢版 |
2019/09/19(木) 12:34:19.77ID:WgtBHfjG
>>366
書き忘れたけど当然デバッグビルドな
ついでにライブラリのソース追っかけたけどパターンはバイト単位に設定されてるので0xfeeeなんてパターンは無いと思うよ
0373デフォルトの名無しさん
垢版 |
2019/09/19(木) 16:05:31.90ID:NIaCYNJC
>>365
どこのgoogle使ってんの?

>0xfeeefeee を検索するとHeapFree で処分された後のヒープ領域がこの値で埋められている、とわかる。 ということは「処分済みヒープへのポインタを誰かが使っている」ということだ。

なお、正解かどうかは論じてないので悪しからず
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況