19/09/05 13:11:24.93 d3q2zCXJ.net
>>256
試しにmspaintと入力してエンター押したらペイントが起動しない?
と言う事は入力が日本語ならC:\Users\<ユーザー名>\この中の対応するフォルダを開く
とか内部でやってるんじゃないかな
英語の場合はLoadLibraryと同じように
Explorer.exeと同じディレクトリ
Explorer.exeのカレントディレクトリ
システムディレクトリ
Windowsディレクトリ
環境変数のPATHに指定されてるディレクトリ
の順で検索されてmspaintが起動とか
263:デフォルトの名無しさん
19/09/05 13:14:07.55 d3q2zCXJ.net
英語とか日本語とか関係なかったねw
264:デフォルトの名無しさん
19/09/05 22:24:50.64 qYKhXOia.net
>>259
レスありがとうございます。お返事が遅くなってしまい申し訳ないです。
> 試しにmspaintと入力してエンター押したらペイントが起動しない?
265:r> 本当ですね! しかし一方で、C:\Users\<ユーザ名>\AppData というフォルダはあるのに アドレスバーに AppData と入力してエンターを押しても期待通りの動作はせず、 なかなかルールは複雑みたいです。 また、日本語環境ではアドレスバーに「Desktop」と入力してエンターを押しても 期待される動作にはならず、「デスクトップ」でなければならないようなので、 やはりシステムの言語設定は関係あるように思われます。 SHGetFileInfo で取得できる displayName を調べれば 日本語環境ならデスクトップフォルダから「デスクトップ」という文字列が得られるので その逆ができればいいかと思ったのですが、実際はそれほど簡単な問題ではないようです。 例えば私の環境では C:\Users\<ユーザ名> の displayName は ウィンドウズの GUI から設定できる「ユーザ名(アカウント名)」になっていますが、 エクスプローラーのアドレスバーで期待通りの動作になる文字列は 「ユーザ名(アカウント名)」ではなく「フルネーム」でした。 エクスプローラーのアドレスバーの動作を完全に模倣するのは難しそうですが、 ここでいただいたアドバイスを元に、現実的な方法を考えていきたいと思います。
266:蟻人間
19/09/05 22:38:16.11 oF7lOGXi.net
レジストリにAppPathという設定もあるぞ。
267:デフォルトの名無しさん
19/09/06 19:55:29.68 H/ygVIaK.net
>>261
いくつか気付いた事を報告 その1/2
・ユーザーフォルダ内のフォルダで移動できたもの
アドレス帳
お気に入り
デスクトップ
ドキュメント
ピクチャ
ビデオ
ミュージック
仮説1 ~\<ユーザー名>\(日本語名で表示される一部のフォルダ)って条件なのかもしれない
仮説2 仮説1の一部のフォルダで法則があるとしたらレジストリで保存場所を変更できるフォルダではないか?
試しに「プログラム」「スタートアップ」と入力しても移動できた
レジストリの「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」
ここに列挙されてるやつがヒントになるかもしれない
・レジストリをヒントに入力して移動できたもの
プログラム
recent
sendto
スタート メニュー
スタートアップ
・その他で移動できたもの (ツリービューで日本語表記をヒントにした)
パブリック
コンピュータ
ネットワーク
コントロール パネル
ごみ箱
268:デフォルトの名無しさん
19/09/06 20:02:10.05 H/ygVIaK.net
いくつか気付いた事を報告 その2/2
・ここまでの間に気付いた事
アドレスバーに「コ」と入力すると
コントロール パネル
コンピュータ
コンピュータの簡単操作センター
この3つの入力候補が現れたけど
入力候補が表示されるのとされないのもあった
あと日本語・英語混在(sendto recent)でさらに混乱させる事になってしまったかもしれないw
269:デフォルトの名無しさん
19/09/06 20:40:37.12 H/ygVIaK.net
ドキュメントがDocumentsの表示になった時の直し方で
LocalizedResourceNameが出てくるからそれをヒントにするのもいいかもしれない
270:デフォルトの名無しさん
19/09/06 23:22:21.54 ZBxclhCf.net
>>262
コメントどうもありがとうございます。
色々とレジストリにもヒントが隠れてそうなので調べてみたいと思います。
>>263-265
大変有用な情報どうもありがとうございます。
書いていただいた内容を見ながら実験してみて分かったこととして、
問題のアドレスバーの挙動は環境によって相当にブレがあるようです。
私の環境(Windows 10 Pro)では、
>>263 に書いていただいた文字列のうち
「recent」「コンピュータ(ちなみにコンピュータ『ー』もダメ)」は
期待通りの動作にならず、代わりにブラウザ(私の環境では Firefox)で
入力した文字列が検索されてしまいました。
私の環境ではアドレスバーに「Creative Cloud Files」と入力すると
対応する Adobe のソフトが作ったフォルダが開かれるので
ある程度外部ソフト等の影響があるだろうとは思っていたのですが、
「コンピュータ」ですら環境によって結果が異なるとは予想外でした。
ちなみに外部ソフトの影響に関しては、レジストリの
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace
に登録されているものが該当しているような気がするのですが、
確かなことは分かっていません。
ともあれ、非常に興味深い実験結果と考察を読ませていただき
大変勉強になりました。どうもありがとうございます。
また何かお気づきのことがあれば教えていただけると嬉しく思います。
271:デフォルトの名無しさん
19/09/07 09:05:50.93 /U7tKF4y.net
>>266
10の場合はコンピュータがPCに変わったんだと思う
272:デフォルトの名無しさん
19/09/07 09:58:32.00 dh6f1+zl.net
これはひどい
273:デフォルトの名無しさん
19/09/07 13:40:15.53 LGCtCXOo.net
デフォルトで用意されている日本語のフォルダ名を英語に戻す
URLリンク(laboradian.com)
11個の日本語名になっているフォルダ
日本語名のフォルダには、desktop.ini という隠しファイルがある
274:デフォルトの名無しさん
19/09/12 18:25:54.76 h3dV0Q14.net
Win32アプリのバージョンリソースについての質問です。
自作アプリの1.0.0をリリースした後、1.1.0を作成中にベータ版を出す場合、
リソースのFILEVERSIONやPRODUCTVERSIONはどのように記述するのがよいのでしょうか。
1,1,0,0は、1.1.0の正式版に使いたいのですが、これより大きい値を付けるのも変だし、
数字以外の文字は入力できないようなので。
275:デフォルトの名無しさん
19/09/12 19:23:34.97 WE18f4SS.net
1.0.0.1とかはあかんの?
276:デフォルトの名無しさん
19/09/12 19:48:34.37 5JZ2mwNb.net
好きにしろよww
自作アプリなんて俺は1.0も1.1も2.0もみんなβだから1.00から0.01刻みで増やしてる
昔はカスタムビルドステップでビルド番号もつけてたけど今はやってない
277:デフォルトの名無しさん
19/09/12 20:46:30.04 igJ/H+nC.net
ちょろめとかふぃれふぉxはメジャーの数字上げ過ぎてひどいことになってるな
ばかなんですかね
278:デフォルトの名無しさん
19/09/13 10:15:47.66 wKEqF87n.net
1.1.0.α
1.1.0.β
1.1.0.γ
279:デフォルトの名無しさん
19/09/13 10:18:26.30 ud7Tmahn.net
1.0.0.01
1.0.0.011
1.0.0.0111
1.0.0.01111
280:デフォルトの名無しさん
19/09/13 11:29:05.95 aNvomMID.net
>>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が入ってしまいますし。
281:デフォルトの名無しさん
19/09/13 12:49:50.53 IRP8OWhI.net
昔、同僚にクラス設計やコメントの書式にやたら拘る奴がいたの思い出した
綺麗なソースコード書いてたけど、まったく動かないゴミですぐ職場から消えたわw
282:デフォルトの名無しさん
19/09/13 12:54:34.90 NSArXc0X.net
そういう人って恋人も見た目重視にしてそう
ソースコード(見た目)って意味で
283:デフォルトの名無しさん
19/09/13 17:47:19.57 +RoIj51L.net
>>276
所詮決め事なんで>>272の言うとおり好きにしてくださいって話だけど
良くありがちなのは
�
284:<Wャーバージョン.マイナーバージョン.ビルドバージョン みたいな メジャーバージョンはアーキテクチャとかUIの大きな変更とかユーザから見ても 変更されたことが分かるような場合 マイナーバージョンは単機能追加とかバグ修正などユーザから一見分からない ような軽微な変更の場合 ビルドバージョンは作業途中の状態を管理するための連番や単一作業の区切りを 管理するための連番とか みたいな感じで自分で目的を決めて使うしかないよ 他には作業の効率管理のためにさらにビルド回数を最後に付けてコンパイルする たびに番号加算していくとか 後はOSのバージョンごとにパッキングを変える場合はPRODUCTOVERSIONと FILEVERSIONを関連性は持たせるけど個別に管理するとか >>273 あれは企業的に仕事をしてますよアピールなので残念なのは経営層か 投資家かな バグ修正はマイナーバージョン、それ以外はすべてメジャーバージョンの修正に することですごくたくさん仕事してますよがアピールできるので
285:デフォルトの名無しさん
19/09/13 17:52:57.53 xaEp9cr2.net
>>273 さんはそんなこと言われなくても判ってて書いてるだろ
286:デフォルトの名無しさん
19/09/13 23:06:09.82 ZW8mwhnp.net
INVALID_HANDLE_VALUEってマジで糞だよな
うっかりしてると失敗したときNULLが返ってくるって勘違いするというか
ボーッとしてるとそういうコード書いちまうことがある
大概のAPIでは失敗したときNULLが返ってくるってのもある
混在いやん
287:デフォルトの名無しさん
19/09/13 23:10:11.55 ZW8mwhnp.net
あと、なんでINVALID_HANDLE_VALUEが必要になったのか技術的な背景が気になる
普通に0を返しとけばいいじゃん、って思うよね
他のAPIがそうなってるんだから
謎
288:デフォルトの名無しさん
19/09/13 23:49:45.81 xZuGkTzd.net
お前だけじゃボケ
289:デフォルトの名無しさん
19/09/14 00:13:31.65 n9TGnnZi.net
>>281
どんなAPIでも最低限の仕様確認してから使えよ
290:デフォルトの名無しさん
19/09/14 03:06:20.87 BTqGkHHG.net
しかしそれらを超越した次元で総合的に判断してやっぱりINVALID_HANDLE_VALUEは糞
必要ないからな
291:デフォルトの名無しさん
19/09/14 03:09:13.59 ztnZ3eZq.net
The Old New Thingにあったな
URLリンク(devblogs.microsoft.com)
292:デフォルトの名無しさん
19/09/14 05:42:23.89 MJsGg5EL.net
>>284
それは論点が違う
マジで糞かどうかだろうが
285はちゃんと自分なりの見解を言っているし
286は情報提供している
お前だけとかくだらんことしか言わんボーガスとは次元が違う
16bit時代は低コストに拘るあまり
色々とアホなことをしていた
その名残を糞って言えないやつも糞だ
293:デフォルトの名無しさん
19/09/14 10:06:00.92 TUFMAlcF.net
ComboBoxはCB_ERRがある
ListBoxはLB_ERRがある
ListViewはただの-1で定義無し
LV_ERRじゃないのはなんで?
294:デフォルトの名無しさん
19/09/14 11:02:16.25 BTqGkHHG.net
>>286読んで思い出したが
そうそうHANDLEのスマポ作るときにウザいんだよな
既定の初期値を何にしておくかって問題があるからな!
ああ糞だ
295:デフォルトの名無しさん
19/09/14 11:26:55.16 BTqGkHHG.net
後HANDLEのスマポのデストラクタでCloseHandleするとき
失敗したり何も入ってなかったり
無効なハンドルの場合はCloseHandleしないようにする場合も嫌らしい
無効なハンドルを表す値が二つ有るからな!!
if( handle && handle != INVALID_HANDLE_VALUE ){ ::CloseHandle( handle ); }
と書いてしまいたいところだが、本当にこれでよいのか?
それかCloseHandleに無効なハンドルを渡したときは何もしないことを期待して
if文なしで単に::CloseHandle( handle );とだけ書くか
しかしCloseHandleに無効なハンドルを渡したときの動作はMSDNには書かれてないんだよな
まぁ何もしないと思うが
296:デフォルトの名無しさん
19/09/14 11:39:00.01 BTqGkHHG.net
ああ今調べたら、CloseHandleに無効なハンドル渡したら
GetLastErrorが汚染されるらしいな
297:デフォルトの名無しさん
19/09/14 11:51:46.43 U/7wJfIU.net
初期化と開放とかのインターフェース作って、そのインターフェース派生でAPIアクセスしてるな
その手のはAPI直接叩くソース書くと後からコーディングミスに気付いても修正困難になるしバグの元
298:デフォルトの名無しさん
19/09/14 13:23:12.69 i3tDL1ol.net
>>288
前者2つはOS基本機能、後者はコモンコントロールというオプション
という違いから歴史と立ち位置が違う
ついでに言えば設計から全然違うんで、定義がないのは不思議ではない
299:デフォルトの名無しさん
19/09/14 13:47:20.57 U/7wJfIU.net
どれもコモンコントロールだよ
歴史的には昔はリストビューがコモンコントロールじゃなかったかもしれないが分からない
300:デフォルトの名無しさん
19/09/14 14:05:12.55 mIZ3m5oP.net
昔のWindowsAPIはHANDLEとポインタが別物だったのを知らん人がいるのか
301:デフォルトの名無しさん
19/09/14 14:06:49.93 mIZ3m5oP.net
>>288
ポインタが奇数になるはずはない(キリっ
だから奇数の空間を全て別のオブジェクトに
おれ天才じゃね?って糞言語が日本にはある
302:デフォルトの名無しさん
19/09/14 15:56:30.20 6R0WtlX/.net
フリーのリソースエディタとAPIでGUIプログラムを作っているけど、
もう時代遅れなのかな。
みなさんは、GUIプログラムはどうやって作っていますか。
303:デフォルトの名無しさん
19/09/14 16:05:19.86 BWRFT45i.net
リソースエディタなんぞ使わず全部apiからテキストエディタ上で
数値指定で作ってるんでそんな自分よりかは進んでるぞ
まあ今の時代ならvisual studio使うのが普通だろうね
304:デフォルトの名無しさん
19/09/14 16:05:25.06 YkcbTkKM.net
20年前から来たのかな?
305:
19/09/14 16:49:47.51 1pj+LkZL.net
>>297
cygwin/mingw64 でコンパイル・リンクできるよう、リソースは手書きですね…
306:蟻人間
19/09/14 16:58:44.72 0f+SL6BM.net
俺は自作のリソーエディタ使ってるけど。MinGWでもVC++でもビルドできるよ。
307:デフォルトの名無しさん
19/09/14 17:18:22.21 i3tDL1ol.net
>>294
コモンかどうか名前はさておき、リストビューは明確にcomctl32を使うような
宣言とリンクがないと使えないでしょ
リストもコンボはこいつの範疇ではない
308:デフォルトの名無しさん
19/09/14 19:04:46.82 TUFMAlcF.net
WinUser.h
ComboBox CB_ERR
ListBox LB_ERR
CommCtrl.h
ListView関係のメッセージやマクロ
この違いは歴史関係って事?
LVM_INSERTITEMが失敗した場合は-1が返るけど
LV_ERR(-1)とするのはおかしい?
309:デフォルトの名無しさん
19/09/14 19:37:03.95 5CB9SZmv.net
作者の気持ちを想像して答えなさいスレッド
310:デフォルトの名無しさん
19/09/14 21:33:59.27 FV8dJ/wR.net
Windowsで.NET使わずにC/C++とWin32APIでPerl互換の正規表現を使ったプログラムを作る場合、
従来はboost::regexやPCREなど別途ライブラリが必要だったけど、Windows10以降はICUの正規表現を使えるようになった。
ただし、可変長文字列を扱うUnicodeStringクラスがヘッダーファイルicu.hから削除されているので、std::wstringなどで代替する必要がある。
311:デフォルトの名無しさん
19/09/14 21:43:24.62 EnCOcX5P.net
ListViewはWindows95で追加されたコントロール
312:デフォルトの名無しさん
19/09/14 22:37:17.04 bBqfD384.net
昔の事は多少は多目に見てやれよ。今みたいにSNSが活発じゃないし、githubで他人のソースも簡単に見れるわけしゎゃない。知見を共有しづらい時代なんだから
313:デフォルトの名無しさん
19/09/14 22:44:48.45 BTqGkHHG.net
システムハンガリアンという糞も生みだしたしな
314:デフォルトの名無しさん
19/09/14 23:54:23.09 EnCOcX5P.net
ハンガリアン記法自体はBug捕り等に有効だったのに
315:デフォルトの名無しさん
19/09/15 01:22:53.14 84ndTw+e.net
dwは長さが一番揺らいでると思う
316:デフォルトの名無しさん
19/09/15 04:13:59.48 oAEy9Na1.net
Standard Control
Common Control
317:デフォルトの名無しさん
19/09/15 07:17:29.58 o13gcpb2.net
>>309
システムハンガリアンは違うし、なんで過去形なんだ?
318:デフォルトの名無しさん
19/09/15 10:17:05.74 WyNEQ0+k.net
>>306
そうなのか
他の人もありがとう
319:デフォルトの名無しさん
19/09/15 12:35:24.64 tu3q64lr.net
unix の execlp だと pid は変化しませんが、
Win32API の execlp とか _execlp とかだと processID は変化してしまうようです。
CreateProcess が呼ばれているからだと思いますが、
Win32API の execlp とか _execlp とかで変わったあとの processID を知る方法はありますか?
(起動された側で getpid() で判るのですが、そっちではなくて元の processID を握ってる方からのリンクが切れて困ってます。)
320:デフォルトの名無しさん
19/09/15 18:08:42.80 jdtp5u68.net
>>297
俺はリソーススクリプト直叩き
MSDNに詳しい情報乗ってるし、英語だけど
プログラマなら大体わかるよ、翻訳サイトを使ってもいいしね
そして、ライブラリ化しといて次から簡単に使えるようにしとく
バージョン情報とかも関数やクラスにして簡単に使えるようまとめとけば便利
GUIは.NETがクラス化の良いお手本になるよ
321:デフォルトの名無しさん
19/09/15 19:39:40.56 WzV8SEFI.net
VS使わない縛りなの?
322:デフォルトの名無しさん
19/09/15 19:55:06.55 G+rzyOKL.net
>>314
> Win32API の execlp とか _execlp
そもそもexeclpとかはwin32apiじゃなくて単なるライブラリだよ
とりあえずざっとソース見る限りではpidを返す方法はないみたい(インターフェースもないしね)
自分で実装するしかないと思う
323:デフォルトの名無しさん
19/09/15 23:50:00.36 jdtp5u68.net
>>316
VSは使ってるよ、昔は無料のエディションには
MFCもリソースエディタも付いてなかったからな
趣味でやってるから問題なし
フリーのリソースエディタを入れるか迷ったこともあったけど
直叩きで行けるしまあいいかと
324:デフォルトの名無しさん
19/09/16 00:47:21.27 iDbWACrZ.net
それぐらい普通、何でもないよ
俺なんかメニューバーとかスクロールバーとかツールバーとかリストビューとか
こまごましたUIパーツ、全部DirectXで一からフルスクラッチで書いたし
4K画面だとリストビューとか動作がカクカクになるから使い物にならんよ
フォントの描画が重いみたい
325:デフォルトの名無しさん
19/09/16 00:49:05.96 B+hfHu5+.net
結構前からリソースエディタは無料版VSでも入ってたろ
326:蟻人間
19/09/16 01:47:28.54 cPhlmIua.net
後世のために書いておくが、Visual StudioのリソースコンパイラーはUTF-8の扱いに致命的なバグがあって、最悪の場合、文字化けする。あれはANSIコードページかUTF-16で使うものだ。
327:デフォルトの名無しさん
19/09/16 10:51:40.64 7yboD6Fj.net
不定期
URLリンク(stefansundin.github.io)
328:デフォルトの名無しさん
19/09/16 12:37:37.02 IB1jvVpV.net
>>321
コンパイラーの問題だからエディターは何でもいいんじゃね
って話ではないの?
329:デフォルトの名無しさん
19/09/16 17:55:40.47 +LXKkUCe.net
そもそもリソースファイルにUTF8が使えるなんて知らなかったわ
330:デフォルトの名無しさん
19/09/16 17:57:32.41 Y7LS5TKS.net
いや使えないでしょUTF-8
331:蟻人間
19/09/16 18:32:35.66 cPhlmIua.net
MinGWのwindresというコンパイラーなら、pragmaでコードページ指定すればUTF-8が使える。
Visual Studioのrcは前述の通りUTF-8読み込みにバグがある。
332:デフォルトの名無しさん
19/09/16 18:40:12.76 OCMqZYFH.net
RisohEditorってどうなん
333:蟻人間
19/09/16 18:43:49.21 cPhlmIua.net
RisohEditorはUTF-8とUTF-16のソースが扱える。UTF-16の入力は、独自のプリプロセッサでUTF-8に変換している。
334:蟻人間
19/09/16 18:46:27.85 cPhlmIua.net
VSのRCの文字化けバグについては
URLリンク(developercommunity.visualstudio.com)
こちらで。まだ直っていない。
335:デフォルトの名無しさん
19/09/16 18:52:28.03 OHfOAVfs.net
リソースファイルはBOMつきUTF-16LEでいけるでしょ。
336:デフォルトの名無しさん
19/09/16 19:26:31.76 dTSbudTn.net
重箱。UTF-16LE/BEと呼ぶ場合はBOMを付けてはならないらしい。
337:デフォルトの名無しさん
19/09/16 19:56:19.89 OCMqZYFH.net
UTF-8 も BOM 付けちゃいけないんだろ
338:デフォルトの名無しさん
19/09/16 20:21:16.53 dTSbudTn.net
UTF-8なら禁止はされていない。
339:デフォルトの名無しさん
19/09/17 00:30:59.73 J+q8D2Xe.net
>>331
理解が間違っている。
「BOMつきUTF-16LE」と「UTF-16LE」は別のものであり、どちらも存在する。
「UTF-16LE」にBOMがついていないからこそ「BOMつきUTF-16LE」という表現が成り立つ。
小倉トーストとトーストが別のものであることと同じであり、トーストに小倉餡がついていないからこそ小倉トーストが成り立つ。
340:デフォルトの名無しさん
19/09/17 02:12:33.57 GJd5TLi7.net
粒餡と餡子が別のものであることと同じであり、
餡子に粒が入ってないからこそ粒餡が成り立つ
ってことですね
341:デフォルトの名無しさん
19/09/17 02:53:38.24 J+q8D2Xe.net
名古屋のモーニングにゆで卵がついたからといって、モーニングでなくなるわけではないのだ。
無論、ゆで卵がつかないモーニングもある。ゆで卵がつこうがつくまいがモーニングなのだ。
342:デフォルトの名無しさん
19/09/17 03:09:38.39 F6p74H2h.net
名古屋とか言う異世界の話はやめようぜ
意味が分からん
343:デフォルトの名無しさん
19/09/17 18:03:14.36 IoM9hprN.net
名古屋が4次元?
344:デフォルトの名無しさん
19/09/17 18:08:21.64 +bGUkqkJ.net
みそかつ
みそ煮込みうどん
高血圧
345:デフォルトの名無しさん
19/09/17 18:36:53.76 TzGpBMAj.net
段ボール入り肉まんが人によってはバレないが、やはり人間的にはエラーが出やすい
そういうことだな
346:デフォルトの名無しさん
19/09/18 14:01:12.80 +0ud2Fjw.net
Caretの点滅間隔について質問です
自アプリがアクティブの時のみ点灯(点滅間隔にUINT_MAXを指定して擬似的に)
自アプリが起動中はWM_SETFOCUSでON(点灯)に、WM_KILLFOCUSでOFF(元の間隔)にする事はできましたし他のアプリにも影響はありません
ですが自アプリが終了したら他のアプリでもONの状態になってしまいます
メッセージを追ってみると
WM_CLOSEでDestroyWindow
→WM_KILLFOCUSでOFFへ
→プロセスが終了
になっていたので自アプリ内で再度ONになっている事はないです
これはどういう事ですか?
347:デフォルトの名無しさん
19/09/18 19:04:24.43 L8SHYgAR.net
WM_CLOSE
→DestroyWindow (hWnd 失効)
→WM_KILLFOCUSでOFFへ (hWnd 違いで無視)
→プロセスが終了
かな
知らんけど
348:デフォルトの名無しさん
19/09/18 19:30:38.13 +0ud2Fjw.net
ありがとうございます
引数は間隔のみですが一応DestroyWindow直前でOFFにしてみても同じ結果でした
349:デフォルトの名無しさん
19/09/18 19:31:59.76 Dukdxvvo.net
完成品には道のり遠くw
350:デフォルトの名無しさん
19/09/18 19:37:10.52 +0ud2Fjw.net
Getで値を見てみるとONの状態になってしまうのではなく
アプリが終了したら間隔が0xfeeefeeeになってしまう
でした
言い直しますと
System設定の500(ミリ秒)からUINT_MAXではなく200へ変更するようにしても
アプリを終了したら間隔が0xfeeefeeeになってしまう
です
351:デフォルトの名無しさん
19/09/18 19:39:32.20 Dukdxvvo.net
たまねぎスレw
352:デフォルトの名無しさん
19/09/18 19:57:32.75 u5s3196f.net
方法は何でもいいけど、例えばクリックしたらキャレット処理を終了→その後アプリ終了でどうなるかやってみ
問題が絞り込めるでしょ
WM_CLOSEで終了処理が思ったように動いてないってのはありがち
353:デフォルトの名無しさん
19/09/18 20:00:53.08 Dukdxvvo.net
はい完成品なしw
354:デフォルトの名無しさん
19/09/18 20:07:36.38 +0ud2Fjw.net
>>347
それも既に試しましたが同じ結果です
>>341でも書きましたがメッセージを追ってWM_CLOSEが正常な事も確認済みです
355:デフォルトの名無しさん
19/09/18 20:10:21.94 Dukdxvvo.net
はいBASICからやり直しw
356:デフォルトの名無しさん
19/09/18 20:10:41.11 +0ud2Fjw.net
>>347
途中送信すみません
設定してもいない値0xfeeefeeeになるので
間隔はSystemと同じ値(500)にSetするだけにしてみても同じ結果でした
357:デフォルトの名無しさん
19/09/18 20:12:42.36 rjYHNvyN.net
0xfeeeってデバッグの時の初期化されてない奴の値じゃないっけ
終了時に数値の参照先おかしくなってるとかかな
358:デフォルトの名無しさん
19/09/18 20:31:05.81 VIgnmm9s.net
「あなたのアプリがWM_CLOSEで0xfeeefeeeにしてる」のは明白でしょ
0xfeeefeeeって特別な値よ、ググってみそ
359:蟻人間
19/09/18 20:50:12.78 d3y9L0GY.net
DestroyCaretしてないとか?
360:デフォルトの名無しさん
19/09/18 20:51:02.69 doMp/Sm3.net
DEBUGビルドのランタイムで
newからのdelete や malloc からの free の後に 確保領域の内容を0xfeee で埋める
ポインタを開放した後に指し先の内容値を取得し、セットしちゃってるんでないの?
361:デフォルトの名無しさん
19/09/18 20:51:25.32 nSTUFOvJ.net
速度設定するとこにトレース出力でもおいて、まずはほんとに意図しないタイミングで呼ばれてないのかチェックだな
362:デフォルトの名無しさん
19/09/18 20:54:27.99 GIOjMe2C.net
イベントを2回通っていて、認識できてないとか。
363:デフォルトの名無しさん
19/09/18 21:32:56.42 +0ud2Fjw.net
>>353
キャレット関係の終了処理をWM_LBUTTONDOWNのタイミングに変更した時に
WM_CLOSEの方のキャレット関係の終了処理はコメントアウトしました
>>354
してもしなくても同じ結果になります
>>355
値の指定をハードコードにしても同じでした
>>356-357
重複した呼び出しなども無かったです
364:デフォルトの名無しさん
19/09/18 21:52:22.59 8Lx1p1Xb.net
Releaseモードで検証したら
365:デフォルトの名無しさん
19/09/18 21:58:28.43 rjYHNvyN.net
別のとこでメモリ壊してるんかな
その部分だけの最小コード書いてみては
それでもなるなら手に負えない感じが
366:デフォルトの名無しさん
19/09/18 22:24:23.19 Ei+Tp6td.net
>>352-353, >>355
0xfeee なんてパターンあったっけ?
0xFDFDFDFD No man's land (normally outside of a process)
0xDDDDDDDD Freed memory
0xCDCDCDCD Uninitialized (global)
0xCCCCCCCC Uninitialized locals (on the stack)
の4パターンしか知らんかったわ
URLリンク(docs.microsoft.com)(v=vs.60)#what-exactly-do-you-mean-by-failure
367:デフォルトの名無しさん
19/09/18 22:31:02.62 rjYHNvyN.net
なかったっけ
うろ覚えで書いたから間違ってたかな
368:デフォルトの名無しさん
19/09/18 22:48:37.86 u5s3196f.net
0xfeeefeeeでググれ
369:デフォルトの名無しさん
19/09/18 22:51:58.57 u5s3196f.net
>>358
> キャレット関係の終了処理をWM_LBUTTONDOWNのタイミングに変更した時に
> WM_CLOSEの方のキャレット関係の終了処理はコメントアウトしました
マウスクリックで終了してる「はず」なのに終了してないなら、そもそもキャレット処理を
全く走らせてなくても問題が再現する「はず」
でもその場合は問題ないってなら、やはり終了処理に何かある
370:デフォルトの名無しさん
19/09/19 04:56:26.34 WgtBHfjG.net
>>363
お前がググれよw
371:デフォルトの名無しさん
19/09/19 08:37:27.80 55mEbAq6.net
>>361
new -> delete -> 値が0xfeeefeeeに
もしnewしたクラスのメンバ変数が値を保持して間隔設定してるなら
delete後に0xfeeefeeeなるよ
クラスポインタをdeleteしてからNULLにしたらエラーになるはず
こんな感じじゃないかな
WM_CLOSEで(deleteしてから)DestroyWindow (クラスポインタとメンバ変数の値が0xfeeefeeeに)
→WM_KILLFOCUSでOFFへ (OFFにする時に参照してるメンバ変数が0xfeeefeee)
→プロセスが終了
でもハードコードでもなるみたいだから違うかも?
372:デフォルトの名無しさん
19/09/19 09:42:21.55 BhEGNWlU.net
unix の pipe は双方向だと思うのですが
win32api の pipe (namedpipe ではない方) は一方通行なんでしょうか?
先生なんとかなりませんか?
373:デフォルトの名無しさん
19/09/19 09:45:58.80 VunEY3BQ.net
WM_CLOSE
↓
WM_DESTROY
374:デフォルトの名無しさん
19/09/19 09:51:38.16 VunEY3BQ.net
ああ
WM_QUIT
かな
375:デフォルトの名無しさん
19/09/19 10:17:38.29 nEj2AKuG.net
>>367
UNIXも一方通行では
376:デフォルトの名無しさん
19/09/19 10:35:55.09 WgtBHfjG.net
>>366
間隔設定がよくわからんが
class C { int a; };
auto x = new C();
delete x;
ってやるとxのポイント先が0xddddddddになるんだが…
Visual Studio Express 2017, 15.9.16
377:デフォルトの名無しさん
19/09/19 12:34:19.77 WgtBHfjG.net
>>366
書き忘れたけど当然デバッグビルドな
ついでにライブラリのソース追っかけたけどパターンはバイト単位に設定されてるので0xfeeeなんてパターンは無いと思うよ
378:デフォルトの名無しさん
19/09/19 16:05:31.90 NIaCYNJC.net
>>365
どこのgoogle使ってんの?
>0xfeeefeee を検索するとHeapFree で処分された後のヒープ領域がこの値で埋められている、とわかる。 ということは「処分済みヒープへのポインタを誰かが使っている」ということだ。
なお、正解かどうかは論じてないので悪しからず
379:デフォルトの名無しさん
19/09/19 16:41:49.39 cbyVF/Zh.net
解放バッファの埋めパターンは、ライブラリが自力でセットするものなの?
380:デフォルトの名無しさん
19/09/19 17:15:02.02 BhEGNWlU.net
-D_DEBUGで自動化やろ
381:デフォルトの名無しさん
19/09/19 18:06:22.20 NIaCYNJC.net
とりあえず>>373の検証
100バイトHeapAllocして適当にa~zの文字書き込んでHeapFreeの前後でダンプ取ったけど、
0xfeeefeeeが入ることはなかったな
debug版
前
382: 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 後 F0 C6 42 05 88 41 47 05 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 release版 前 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 後 78 EF 81 05 F0 54 79 05 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 free後に何か入ってるけど、実行毎に違う値が入ってる 0xfeeefeeeに関しては、単純に何かのAPIがそういう処理してるんでは
383:デフォルトの名無しさん
19/09/19 18:13:44.87 VunEY3BQ.net
コンパイラによっても違うのか
URLリンク(www.nobugs.org)
384:デフォルトの名無しさん
19/09/19 18:42:59.80 NIaCYNJC.net
APIだからコンパイラ関係ないと思うけどね
OSは8.1だけど
コンパイラというかライブラリが関係するはずのmallocでやってみた
vs2017 - ツールセットvs2013(詳細略)
以下並びは>376と同じだけどダンプの長さはa~zの26+1バイトじゃなく30バイト
allocも100ではなく30バイト
debug
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 CD CD CD
DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
release
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 00 00 00
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 00 00 00
385:デフォルトの名無しさん
19/09/19 19:23:51.83 55mEbAq6.net
>>371
間隔設定はキャレットのね
こっちでは0xfeeefeeeになるね
URLリンク(i.imgur.com)
386:デフォルトの名無しさん
19/09/19 22:12:42.24 1bu8PAPD.net
>>379
環境は?
十数バイトをdeleteしただけでHeapFreeを呼ぶのも考えづらいし、そもそもこっちでも>>376と同じくHeapFreeで0xfeeefeeeが入ることもなかった
387:デフォルトの名無しさん
19/09/19 22:36:38.24 2Kmv27QM.net
vs2003とかそのあたりかなこれ
388:デフォルトの名無しさん
19/09/20 00:25:02.03 n3bycm/n.net
Win10 Pro(32bit)でHeapFreeやってみた
VS2017(Community Edition)は0xfeeefeeeにならなかったが、
VC2010(Express Edition)でやってみたら0xfeeefeeeになったわ(確保していた領域の先頭8バイトほどに0xfeeefeeeじゃない値が入っていたが)
面倒だからオプションとか生成されたバイナリとか詳しく比較してない
389:デフォルトの名無しさん
19/09/20 09:31:26.82 DNSz8VRz.net
>>380
VC++2010Expressだよ
画像こっちの方がよかったね
URLリンク(i.imgur.com)
390:デフォルトの名無しさん
19/09/28 11:23:33.59 2Q8qxITa.net
メッセージ処理の
case(msg)
ってなんで
case(msg.message)
じゃないの?
構造体直接評価できるの?
391:デフォルトの名無しさん
19/09/28 11:29:50.08 2Q7OqYnQ.net
どこかのサイト?
392:デフォルトの名無しさん
19/09/28 11:46:59.83 QstsG7m2.net
メッセージは構造体じゃなくて UINT やろ
393:デフォルトの名無しさん
19/09/28 14:28:14.81 hWveUl7z.net
>>384
多分サンプルの読み方を勘違いしている
GetMessage関数なんかで使われるlpMsgとかはMSG構造体なので中でメッセージIDを
確認したいならば「msg.message」を見ることになる
メッセージIDのハンドリング行うサンプルなんかで普通に使われてるWndProc関数の
uMsgはUNIT型の「msg.message」が実体なのでcaseでそのままハンドリングできる
でないか?
394:デフォルトの名無しさん
19/09/28 16:13:30.79 91yg28/R.net
caseにカッコつけんな
395:デフォルトの名無しさん
19/09/28 17:54:36.06 zcWtf1aP.net
本来ライブラリに任せるべきところをかなりネイティブなwinsockプログラミングをしています。
TCP通信にて最大セグメントを超えてwinsock2.sendを行った場合はどうなってしまうのでしょうか?
エラーとなるためそこも自前で実装する必要があるのか、それともwinsockが勝手に分割を行ってくれるのか、はたまたネットワークアダプタやルーターなどのデバイスが勝手にやってくれるのか、どういう挙動となるのかご伝授お願いします
396:デフォルトの名無しさん
19/09/28 20:46:23.20 QstsG7m2.net
ソケット通信てそんなところ気にしなきゃいけなかったっけ?
ア
397:ップロード・ダウンロードルーチン組んだけど記憶にない
398:デフォルトの名無しさん
19/09/28 21:19:08.01 qwUCk4Gy.net
winsock2に限ればエラーが返るんじゃないか?
質問するよりもmasdn見たほうが確実だろ
399:デフォルトの名無しさん
19/09/28 21:42:01.62 zNn3MVf2.net
sizeof演算子に括弧つける派です?
400:デフォルトの名無しさん
19/09/28 22:22:37.56 ZZfYVsnP.net
UDPだと知らん間に分割された挙句
場合によっては断片が届く順番まで変わるからな
401:デフォルトの名無しさん
19/09/28 22:24:29.26 ZZfYVsnP.net
sizeofに括弧付ける
マクロの引数は使用時に必ず括弧付ける
402:デフォルトの名無しさん
19/09/29 08:10:25.37 qdFsd7WD.net
>>393
> 場合によっては断片が届く順番まで変わるからな
むしろTCPが頑張って順序を元通りに入れ替えてるんだが…
403:デフォルトの名無しさん
19/09/29 08:12:55.60 qdFsd7WD.net
>>392
不要なカッコは付けない派
例外は演算子の優先順位がわかりにくい時に付けるぐらい
理由は間違っててもコンパイルエラーにならないから
404:デフォルトの名無しさん
19/09/29 08:26:06.28 MP9GBJ11.net
>>392
俺も無駄な括弧はつけないな
わざわざつける理由がない
単項演算子の優先順位を知らんアホが仲間にいない
405:デフォルトの名無しさん
19/09/29 09:39:48.44 xMtED3Cu.net
どこから「単項」演算子の話が…
406:デフォルトの名無しさん
19/09/29 10:26:13.14 MP9GBJ11.net
そのアホがいた・・・驚愕
今 sizeof の話をしているんだが
脈絡が読めないとはな
407:デフォルトの名無しさん
19/09/29 10:29:45.89 JKK19nEu.net
こういう奴が書くソースは総じて読みにくいw
408:デフォルトの名無しさん
19/09/29 10:31:48.98 9b9emf+N.net
付ける派
if(...) switch(...)なのにsizeof(...)じゃないのはなんとなく嫌
409:デフォルトの名無しさん
19/09/29 11:39:16.24 98/tCU9d.net
どこがAPIの話だ馬鹿は京急に突っ込んで死ね
410:デフォルトの名無しさん
19/09/29 11:53:45.41 3s0zt66k.net
hoge = malloc(length * sizeof struct hage *);
hoge = malloc(sizeof struct hage * * length);
hoge = malloc(*length * sizeof struct hage *);
hoge = malloc(sizeof struct hage * * *length);
hoge = malloc(*length * sizeof struct hage **);
hoge = malloc(sizeof struct hage ** * *length);
()付けないとどんどんわかりにくくなっていく
411:デフォルトの名無しさん
19/09/29 13:23:57.04 eQVILPNx.net
sizeof(型)は()必要だよ
412:デフォルトの名無しさん
19/09/29 13:34:02.17 cKDPFQQS.net
いらんよ
413:デフォルトの名無しさん
19/09/29 13:50:41.73 6WuqtMyk.net
Win32API以外の話は不要
414:デフォルトの名無しさん
19/09/29 13:54:31.01 MP9GBJ11.net
>>400
おまえみたいのに読んでもらう必要が皆無
415:デフォルトの名無しさん
19/09/29 13:59:56.96 MP9GBJ11.net
単項演算子とそうでないものの区別がつかないアホが
return にも括弧したがるんだろうな
# K&R 1st世代の人はともかく
416:デフォルトの名無しさん
19/09/29 14:05:22.62 6WuqtMyk.net
書いてから思ったが、排他の否定な書き方が好きじゃない>>406
読みにくい
肯定した書き方だけに統一したい
そういう意味では、好きじゃないという書き方もダメか
嫌いと書くべきか
ということで、
Win32APIの話をしろ
おやすみ
sizeofは計算式絡むことがほとんどなのと、明示的にした方が分かりやすく
馬鹿らしいミスの回避のためにも付けといて損はない
417:デフォルトの名無しさん
19/09/29 15:27:53.48 MP9GBJ11.net
自分らしいミスか、わかりますw
418:デフォルトの名無しさん
19/09/29 15:43:36.72 Mg/ytEjl.net
>>403
この例からしても括弧つけた方が見やすいが、ID:MP9GBJ11は見やすさ全否定なの?
俺様はインデントもスペースも改行も無くても、優先順位・スコープ範囲が分かってるから無問題って理屈だよな
419:デフォルトの名無しさん
19/09/29 15:50:52.56 qbYXpMyS.net
typeidもsizeofも関数じゃなくて演算子なんだけど、typeidは括弧が必須。
420:デフォルトの名無しさん
19/09/29 16:01:08.70 EcHpn11g.net
>>389
TCPのMSSは相手との関係で決まるので何バイト送り込んでもエラーには
ならないと思うけど
TCPとしては送れたデータ量をSeq番号で管理していてセグメントの分割は
ドライバの仕事なのでアプリケーションレベルでは意識する必要なかったと
思うけど
UDPとかIP直みたいなデータグラムの場合には「WSAEMSGSIZE」が返って
くるみたいだけどTCPは平気なんじゃないかな(転送データの保障がある
わけではない)
421:デフォルトの名無しさん
19/09/29 17:35:14.18 3s0zt66k.net
さすがに return にまで () 付けてるのはうざいわ
422:デフォルトの名無しさん
19/09/29 17:44:23.38 MP9GBJ11.net
>>411
仲間に書かれても文句は言わねえな
見た目の問題じゃなく、やろうとしている内容がセンスに欠けるときなら
これ例えばこんな手もあるよなと議論に誘ったりはするし
iocccみたいな実験をTPOを間違えてやる大馬鹿野郎がいたら喧嘩売る
実例として/*/野郎は口汚く罵ってやった
423:デフォルトの名無しさん
19/09/29 17:51:28.09 dmuVBgYo.net
()なんてあってもなくても分かりやすけりゃいいんだよ
逆に>>403なんて()あってもなくても読みにくい。俺はこんなの絶対書かないな
424:デフォルトの名無しさん
19/09/29 18:02:50.86 bLCqrou7.net
sizeof には、極力変数名側を与えるようにして型名は避けるようにしてるけど
WinAPI とは遠い話だな
425:デフォルトの名無しさん
19/09/29 18:08:58.10 MP9GBJ11.net
もうダメ、我慢できないから言っちまおう
>>403は必要な()とそうでないのが解ってねえ
アホwバカwww
426:デフォルトの名無しさん
19/09/29 18:09:40.55 XoUEO8Fx.net
return (a);
とは書かないけど、
return (a+1);
のときは括弧を付けなくなる
427:デフォルトの名無しさん
19/09/29 18:44:22.03 qbYXpMyS.net
GCCではtemplate関数の記述する際に、ある文字列が型であることをコンパイラに教えるtypenameキーワードが必要なので、sizeof に括弧がないと読みづらくなる傾向はある。
428:デフォルトの名無しさん
19/09/29 21:35:11.45 MP9GBJ11.net
>>420
バーカwwwwwwwwww
typenameが必要か否かは規格17.7で明確化されている
429:デフォルトの名無しさん
19/09/29 22:11:20.40 Mg/ytEjl.net
>>415
規約や仕様の話じゃなくて見た目の話してるんだから、それを分かっててセンスがどうのこうのって言い出すのなら
この話の流れで草を生やしながら馬鹿まき散らすのは、マジでセンスないねって話になるよ
430:デフォルトの名無しさん
19/09/29 22:29:52.99 6WuqtMyk.net
おはようさん
スレタイ読めない奴は総じてセンスも才能もないってことですよ
431:デフォルトの名無しさん
19/09/29 22:52:38.22 Qb/y7uSu.net
>>387
ありがとうございました
432:デフォルトの名無しさん
19/09/30 08:14:44.84 069AXC1X.net
>>422
やろうとしている内容がセンスに欠けているときって言ってるのに規格がどうたらとか、いいからまず涙拭けよw
433:デフォルトの名無しさん
19/09/30 08:23:22.14 h3H1G0XJ.net
もう少しwindowsに関係した話をだな
434:デフォルトの名無しさん
19/09/30 09:28:52.10 5PqXiw6I.net
ガイジの出身地方ではWin32APIの範囲なんだろ
435:デフォルトの名無しさん
19/09/30 12:38:46.03 vkIGDak2.net
Win32APIがsizeof()推奨なのは
hoge * で済むものをわざわざ
typedef hoge *LPHOGE;
とかやっちゃって
sizeof LPHOGE
とかやって
不都合出て来るからだろ
436:デフォルトの名無しさん
19/10/01 20:49:26.16 D6lr/hhZ.net
Win32 APIはバージョン差を吸収するのにパラメータ構造体にその大きさをセットするので
わりかし sizeof の頻度は高いかもな
437:デフォルトの名無しさん
19/10/01 21:01:09.96 OgNbwofS.net
流れを読まず適当にレスすると
win32apiプログラミングにおけるapiの仕様やsizeofの使用頻度を考えたら括弧付きが自然なのは周知の事実なんだから
それにセンスが何ちゃらと難癖付けてるのはwin32apiプログラミングしてないアホでしょ
こんなん出ました
438:デフォルトの名無しさん
19/10/01 22:45:12.05 WzUe48WU.net
カッコつけてんじゃねーよ的なやつな
439:デフォルトの名無しさん
19/10/01 22:51:24.51 93GMDhBd.net
チコちゃんもといカコちゃんみたいな
440:デフォルトの名無しさん
19/10/02 06:50:57.68 c9vI97O0.net
> win32apiプログラミングにおけるapiの仕様やsizeofの使用頻度を考えたら括弧付きが自然なのは周知の事実なんだから
理由もメチャクチャだし周知とかアホすぎる
> それにセンスが何ちゃらと難癖付けてるのはwin32apiプログラミングしてないアホでしょ
>>430出ましたw
441:デフォルトの名無しさん
19/10/02 10:31:29.32 y1aZWk4e.net
スレタイ読まないカコちゃんまた来たの?頭弱いね
442:デフォルトの名無しさん
19/10/02 11:02:31.08 I2VMZsV4.net
sizeofに括弧つけるかどうかなんて
正直どうでも良くね?
443:デフォルトの名無しさん
19/10/02 11:33:56.30 Jzurp0++.net
構造体にサイズ入れることが一番多いからあんまつけないな
444:デフォルトの名無しさん
19/10/02 13:04:47.75 55+aQRnY.net
64bit化してからHOGE_PTRが増えてさらに混乱
445:デフォルトの名無しさん
19/10/07 18:52:52.31 gF1mLPnp.net
sizeof付けるの嫌ならラッパー作ってそっちで呼び出せよ
win32APIの仕様がそーなるんだからしかたねーじゃん。手続き通りに記述するしかない。
446:デフォルトの名無しさん
19/10/07 20:15:04.08 WFXsDvHg.net
perlでWin32APIを使うライブラリWin32::APIを使ってると、
32bitと64bitで異なる構造体のアラインメントを正しく解釈してくれないので、アセンブラ並みに低レベルな記述が必要になることがある。
447:デフォルトの名無しさん
19/10/07 21:01:12.36 Byy1mx9U.net
cからperl呼ぶのも腐ってるな
448:デフォルトの名無しさん
19/10/07 22:23:56.51 WFXsDvHg.net
>>440
世の中には発酵食品が沢山ある。
発酵 腐敗 熟成 の違いを見極めるのは難しい。
449:
19/10/09 21:21:44.79 ggd9iNPq.net
質問です。
SetFilePointer()
URLリンク(docs.microsoft.com)
を FILE_END で使ったことのある方はおられますか?
第3引数 PLONG lpDistanceToMoveHigh を 0 (そして第 2 引数 LONG lDistanceToMove も 0 )で使うと、FILE_END であっても当のファイルが 4GB 以上の場合にはポインタがファイルの最後に設定されない現象があるようです
この場合ダミー変数(毎回 0 を投入している)を設けて lpDistanceToMoveHigh にそのアドレスを設定すると FILE_END がその本来の意味を示すようにみえます。
推量形で記述しているのは、私の環境(mingw64-gcc)ではコンパイラのオプティマイザが過剰に効いている可能性があり -O0 でコンパイルしてはじめて、ある程度この現象が確認できたという事情のためです。
これは一般的な話なのでしょうか?
450:
19/10/09 21:24:08.20 ggd9iNPq.net
>>442
ソースを晒します
URLリンク(ideone.com)
451:デフォルトの名無しさん
19/10/09 21:49:31.92 75Pp/Qaq.net
longの場所になぜintを使う
452:
19/10/09 22:06:12.13 ggd9iNPq.net
>>444
printf("sizeof(int):%d, sizeof(LONG):%d\n", sizeof(int), sizeof(LONG));
$ ./a.exe
sizeof(int):4, sizeof(LONG):4
453:デフォルトの名無しさん
19/10/09 22:12:20.45 wmrCsqX1.net
lpDistanceToMoveHighがNULLの時のFILE_ENDは単純にファイルサイズも下位32bitだけ見て処理してそう
でかいファイル扱うなら素直にSetFilePointerEx使った方がよさげ
454:
19/10/09 22:39:59.07 ggd9iNPq.net
>>44
455:6 *Ex には気がつきませんでした 昔書いたものをみると s1 = GetFileSize(f, &s2); SetFilePointer(f, s1, (PLONG)&s2, FILE_BEGIN); WriteFile(f, p, strlen(p), &n, 0); ってやっていましたから、どうも、昔も同じところで嵌ったらしく、お茶を濁す方法まで昔と同じのまま、しかもその記憶が今はない… もうなにもかも忘れてしまった… コメントありがとうございました
456:デフォルトの名無しさん
19/10/15 14:52:27.44 iJLx9DXs.net
書き込むなよクソコテの分際で
457:
19/10/15 19:34:41 6pml1OhP.net
みんなクソだと思ってたけど
458:デフォルトの名無しさん
19/10/15 20:02:45.72 M5SL5EtX.net
そうなんだ
病気だね
459:デフォルトの名無しさん
19/10/15 20:59:08.69 H14rNUWV.net
こんな場所でこんなクソ書き込みしてるくせに自身のクソさ加減に気付かないなんて病気だぞ☆
460:デフォルトの名無しさん
19/10/15 22:41:36.61 72mqelru.net
そうなんだ
病気だね
461:
19/10/17 09:57:15 z4eLhP/Z.net
PCが複数のネットワークにつながっています。
IUPnPDeviceFinderで検索するネットワークを指定するのはどうしたらいいのでしょう?
462:デフォルトの名無しさん
19/10/21 22:12:09 EXgPOVjA.net
CSPのハンドルであるHCRYPTPROVなんだけど、
これってスレッドセーフ?
具体的には、同じハンドル使って別スレッドで同時にCryptGenRandom()呼んでも大丈夫なものなの?
Goのcrypt/randが排他せずに同じハンドルで呼んでいて気になったんで
463:デフォルトの名無しさん
19/10/21 23:03:30.44 xGMxn7s7.net
7から10にしたらこんな感じで画面外の領域が描画されなくなってしまいました URLリンク(i.imgur.com)
Windows10で画面外の領域を描画させるような関数か方法はありますか?
InvalidateRect、UpdateWindow、RedrawWindow、PrintWindow、DwmGetDxSharedSurfaceは試しましたが無理そうです
ソースです URLリンク(dotup.org)
464:蟻人間 ◆T6xkBnTXz7B0
19/10/21 23:12:02 LVq8IpRv.net
>>455
CreateDC("DISPLAY", ...)
CAPTUREBLT
465:デフォルトの名無しさん
19/10/22 00:53:22 VVF85bpK.net
>>456
CreateDCではディスプレイに表示されてる領域のデバイスコンテキストしか取得できませんでした
ウィンドウの外ではなく、ディスプレイの外に出ている領域を取得したいのです
CAPTUREBLTは単体だと真っ黒、SRCCOPYと一緒に指定してもSRCCOPY単体と変化はありませんでした
466:デフォルトの名無しさん
19/10/22 01:13:45.23 tgq7+oc3.net
455に貼ってるスクショでは単に5chのページが途中までしか描画されないように
見えるだけで、"画面外の領域"の意味がよく分からんが・・・・
それはともかく、実は管理者権限で実行するといけちゃうとか?
467:デフォルトの名無しさん
19/10/22 02:01:10.02 VVF85bpK.net
>>458
別アプリ(画像ではブラウザ)をSetWindowPosでウィンドウの一部がディスプレイの外に出る位置に移動して
そのウィンドウの内容をBitBltで取得して自分のウィンドウに表示してるんですが
ディスプレイに表示されてないディスプレイの外に出た部分が真っ白になってしまいます
すいません、説明下手なのでソースを見てもらえると助かります
468:デフォルトの名無しさん
19/10/22 02:29:09.84 rKj5dIYC.net
まともに説明もできないソースだとそもそも何したいのかわからないほどのバグな気がする
469:デフォルトの名無しさん
19/10/22 02:57:41.77 tgq7+oc3.net
対象となるアプリのスクショを取るようなアプリでOK?
面倒なので
470:試さないけど、単に画面外に描画しても無駄なので描画してない だけのような気がするが、その理屈なら画面外ではなくその上に別ウィンドウを 表示させるとどうなるんだろうなってことと、対象アプリがブラウザ以外だと どうなるんだろうなってことなど突き詰めたい項目が(面倒くさくなり以下略
471:デフォルトの名無しさん
19/10/22 09:19:42.21 cLGxu2gX.net
Windows7でaero有効なら画面に見えていないウィンドウからbitbltできるが、10でaero廃止されたのが
関係しているのかな。
10でもタスクバーのウィンドウプレビューは表示されるから7と同じようにできてもいいとは思うが。
472:デフォルトの名無しさん
19/10/22 09:22:47.36 swuil85R.net
10でも取れるぞ。これは確実
ソース見てないから原因はしらね
473:デフォルトの名無しさん
19/10/22 12:27:17.50 VVF85bpK.net
>>461
OKです
デスクトップのデバイスコンテキストから転送すると上にある別ウィンドウの画像込みになりますが
対象アプリのデバイスコンテキストから転送すると対象アプリの画像だけを取得できます
対象はブラウザ以外でも描画されない部分が白か黒かの違いだけです URLリンク(i.imgur.com)
>>462
プレビューでも描画されないです URLリンク(imgur.com)
474:デフォルトの名無しさん
19/10/22 13:41:14.15 fxbuxtP/.net
画面コピー貼る前にソース貼れ
475:
19/10/22 13:44:24.15 afWm6mlf.net
>>464
早く解決したいのだったらソースを貼らないと
476:デフォルトの名無しさん
19/10/22 13:47:22.65 PRXTlxOV.net
そのコードだとキャプチャできないのは確認したけどプレビューまではそんな風にならんな
なんとなくOS自体の省力設定に連動して
OSがクリップしてる or アプリ自身のクリップを引き起こしてる臭いけど
新しめのキャプチャAPIだと↓
URLリンク(docs.microsoft.com)
477:デフォルトの名無しさん
19/10/22 13:55:50.74 PRXTlxOV.net
補足、そっからじゃC++のデスクトップアプリからの使い方がわかんねえな
URLリンク(github.com)
478:デフォルトの名無しさん
19/10/22 14:05:08.56 VVF85bpK.net
>>465
>>466
>>455 で張ってますが落とせないとかありますか?
別のろだで用意したほうがいいですか?
>>467
うちだと実機でも仮想PCでもプレビュー欠けてるんですよね
仮想PCに新規でWin10入れて確かめてみます
C++のソースありがたいです。試してきます
479:デフォルトの名無しさん
19/10/22 14:09:15.53 fxbuxtP/.net
一度memdcにコピーする手間があったような
480:デフォルトの名無しさん
19/10/22 14:32:05.02 cLGxu2gX.net
俺も>>455と同じようなキャプチャソフトを自作してたんで今win10で試してみたが
ウィンドウが画面外にはみ出しているからといってキャプチャできないことはないな。
プレビューが欠けるということもなかったが。
>>464
プレビューが欠けるのが特定のアプリだけならそのアプリの問題だろうから
あきらめるしかないだろうねえ。
どのアプリでも欠けるとしたらwindowsの設定かGPUの問題かなにかかな。
481:デフォルトの名無しさん
19/10/22 15:53:33.65 VVF85bpK.net
クリーンインストールWin10でも症状変わらず
ScreenCaptureforHWNDも変わりませんでした
>>471
画面内で表示してから画面外に移動してキャプチャしてませんか?
キャプチャはできても更新がされない感じなので
移動してから内容更新するとキャプチャ画像とプレビューがこうなります URLリンク(imgur.com)
482:デフォルトの名無しさん
19/10/22 16:05:23.75 cLGxu2gX.net
それをedgeとかでやっても同じなん?
動画を表示していもプレビューは随時更新されるが、ふつう。
483:デフォルトの名無しさん
19/10/22 16:09:29.85 tgq7+oc3.net
他のキャプチャソフトではどうなるの?っと
484:デフォルトの名無しさん
19/10/22 17:18:39.23 An+rmEaC.net
コンパイラ設定が
485:xp互換だと撮れないってのもあるな
486:49
19/10/22 17:33:47.67 8AVeU+tz.net
そもそも何がしたいのか分からない。
487:デフォルトの名無しさん
19/10/22 18:06:58.79 PRXTlxOV.net
こっちで試してる限りでもいまいち挙動に一貫性がなくて確証は無いんだが
そのWaterfoxってのだけ更新時に画面外のレンダリングを省いてるのはプレビューで確認できたんで
検証するのにそれは外した方がいいな
画面外に出たアプリのWM_PAINTでrcPaintが差分を返すのは正常な挙動なので
アプリ自体の画面更新と内容の取得のタイミングによってはプレビューがそうなる理屈は説明できる
キャプチャに用いているBitBltとも内容が異なるのはGDIとDWMでは見てるバッファが違うのかもしれない
ただ全部のアプリがそうなるとなるとこっちじゃ現象自体が確認できないのでなんとも
488:455
19/10/22 21:17:47.98 VVF85bpK.net
>>473
>>477
Firefox、Waterfox、Chrome、VisualStudio2019、MPCBE、ペイント、メモ帳
画面外に出た部分はプレビュー更新されないし、BitBltも更新されてない画像しか取れない
Edge、フォト
画面外に出た部分もプレビュー更新される、BitBltでは画面内でも画像が取れない
IE
画面外に出た部分もプレビュー更新される、BitBltでは画像が取れたり取れなかったり不安定
動画です URLリンク(dotup.org)
>>474
Loiloだと画面外は真っ黒でした。他は名前言ってもらえれば試します
>>475
x64でプラットフォームツールセットはVisual Studio 2019(v142)なのでXP互換ではないと思います
>>476
ウィンドウの一部が画面外に出ても、ウィンドウがすべて画面内にあるのと同じようにキャプチャしたいです
489:デフォルトの名無しさん
19/10/22 21:59:23.80 JI3aTgMm.net
ディスプレイ外にはみ出した窓があってそのはみ出したリージョン内で表示更新かかってて
そいつを ALT+PrtScr でキャプチャしてもうまく取れてないなら厳しいんでないかな
490:デフォルトの名無しさん
19/10/22 22:11:54.49 An+rmEaC.net
俺自作のソフトはキャプチャできるが、ALT+PrtScrはキャプチャできん@win10
491:デフォルトの名無しさん
19/10/22 22:35:32.44 YGRhwcPr.net
グラボに依存とか?
492:デフォルトの名無しさん
19/10/22 22:54:01.75 cLGxu2gX.net
>>478
なるほど、ペイントで現象確認した。
GPUリソースを食わないよう改善した結果とかかねえ。
493:デフォルトの名無しさん
19/10/22 22:56:43.07 HSQTG8Jj.net
どうなんだろう。BitBlt(,,,SRCCOPY | CAPTUREBLT) しか方法ないのかね。
494:デフォルトの名無しさん
19/10/22 23:00:04.93 GE3t6WX1.net
2段階のアクセラレータはどのようにやるのがいいの?
Visual Studio のCtrl+K Bみたいな・・・
495:蟻人間
19/10/22 23:03:39.56 QN5InCe0.net
>>484
アクセスキーテーブル切り替えか、
状態遷移だろうよ。
496:デフォルトの名無しさん
19/10/22 23:10:21.12 PRXTlxOV.net
なんかだんだんワケがわからなくなってきたが再度確認したら
基本的にUWPアプリ以外は画面外の再描画しないっぽいな(Chromium系はやっぱり描画されてるけど)
ほとんどのアプリが律義にrcPaint見てるとも思えんし描画先がGDIだと強制的にOSでクリップされてんのかしら?
おそらくWindows Compositionが噛んでてBitBltで取れないUWPアプリはWindows.Graphics.Captureで取れるけど
UWPアプリ以外でクリップ済みのイメージしか取れないのはまあ当然っちゃ当然
497:デフォルトの名無しさん
19/10/22 23:28:56.03 An+rmEaC.net
win10でUWPでない従来のアプリの画面外キャプチャできるよ
win7がaeroオフだと撮れなかったみたいに何らかの条件があるのかもしれないが
498:デフォルトの名無しさん
19/10/23 00:49:00.28 /s0IRa9G.net
Mozilla Firefoxなどサードパーティ大手は今もWin32APIをネイティブに使っており.NETは使ってない。
499:デフォルトの名無しさん
19/10/23 01:17:59.09 VREi5cKF.net
エクスプローラのアドレスバーで「デスクトップ」とか「ダウンロード」って入れたら
そこのパスに移動しますが、「デスクトップ」(という日本語)からパスに変換するAPIはありますか?
500:蟻人間
19/10/23 01:29:37.00 DFr4VJRt.net
>>489
SHGetLocalizedNameの逆写像っぽい。CSIDLからテーブルを作るのが楽かと。
501:デフォルトの名無しさん
19/10/23 01:33:15.99 VREi5cKF.net
あれ?なんか上の方に同じような質問がw
502:デフォルトの名無しさん
19/10/23 01:52:47.01 VREi5cKF.net
なんかめちゃくちゃめんどくさそうw
503:デフォルトの名無しさん
19/10/23 02:38:41.47 /s0IRa9G.net
SHGetFolderPath() でCSIDLコンプリートをめざすとか
504:蟻人間
19/10/23 03:33:00.02 bxABcYeD.net
URLリンク(github.com)
作ったぞ。自由に使え。
505:デフォルトの名無しさん
19/10/23 04:05:49 /s0IRa9G.net
>>494
早いですね。
とはいえ、実在するパスからの逆引きだと、「コントロール パネル」とか「プリンター」みたいな仮想フォルダ名は取れない。
506:蟻人間
19/10/23 04:20:43.92 DFr4VJRt.net
仮想フォルダならPIDLを使うのではないか?
507:蟻人間
19/10/23 04:23:26.39 DFr4VJRt.net
PIDLとGUIDをどうやれば結び付けられるか? え~と
508:蟻人間 ◆T6xkBnTXz7B0
19/10/23 04:25:53 DFr4VJRt.net
URLリンク(stackoverflow.com)
ここにヒントが。
509:蟻人間
19/10/23 04:32:28.94 DFr4VJRt.net
落ちます。
510:蟻人間 ◆T6xkBnTXz7B0
19/10/23 04:40:22 DFr4VJRt.net
仮想フォルダならレジストリを見る方法があるが、KnownFolderの方が正しい方法に思える。
511:デフォルトの名無しさん
19/10/23 04:47:44 /s0IRa9G.net
WTL公式gitレポジトリにあるエクスプローラもどきアプリのサンプルが参考になるかも。
URLリンク(sourceforge.net)
512:デフォルトの名無しさん
19/10/23 12:55:03.32 hZZQZDty.net
画面外のスクショが取れない件、1809からの挙動のようだねえ
URLリンク(stackoverflow.com)
513:デフォルトの名無しさん
19/10/23 12:59:02.01 ou8vQa3g.net
>>502
日本語で
514:デフォルトの名無しさん
19/10/23 15:31:41.90 J1BMEu9t.net
いや判るだろ
1809 update 入れた後に可笑しくなったんだろω
515:455
19/10/23 21:03:31.35 i0lmBL5A.net
1809以降の挙動ならプログラムじゃなくてWindows側の問題みたいですね
BitBltだけじゃなくプレビューにも問題出てるからバグっぽいですし
そのうちアップデートで治ることを期待しつつプログラムでの対応は諦めます
いろいろ答えてくれた皆様ありがとうございました
516:蟻人間
19/10/23 22:21:30.01 bxABcYeD.net
やっぱりKnownFolderから取得できた。
URLリンク(github.com)
自由に使え。
517:蟻人間
19/10/23 23:01:48.53 bxABcYeD.net
揚げ物
518:デフォルトの名無しさん
19/10/24 00:20:06.38 ywNA7G1O.net
ありがとう。だがしかし別のアプローチで
俺が解決したい(本当の)問題は解決できていたのだよ
まあ誰かの役に立つだろうから放っておいたけどな
すまんなwww
519:デフォルトの名無しさん
19/10/24 00:41:12.27 Fw8n9fLr.net
アップデートで直るかっちゅーても挙動自体は描画の最適化とも言えるので仕様としてこのままいきそうだけどなあ
自作ので試してみたけどやはり一部でも画面外に出てると無効領域をクライアント全体と指定しても
強制的にクリップされたHDCが返ってくるね
BeginPaintだけじゃなくてWM_PAINT外でのGetDCでも同様
DXGI swap chainが出力先ならクリップされない
普段窓を画面外に追い出したままにするってことがないから気付かなかったなコレ
520:デフォルトの名無しさん
19/11/04 15:23:29.75 /C5zJSxn.net
SetForegroundWindowでフォーカスを奪えない、
入力中にフォーカスが奪われるとウザいからWindowsが
奪えないようにしてるって話はよく聞くと思うけど
逆にエクスプローラが起動すると(バックグラウンドなのに)
フォーカスを奪ってくれて困ってるんだけど対応策ない?
ウザいんだがw
521:
19/11/04 15:58:26.30 fwURXfb5.net
>>447
さらに追試を重ねていました
悪いときは 10G, うまくいっても 5000G 程度(日によってばらばらです)で
FILE_END ができなくなる現象は、
FILE_END が悪いのではなく、システムで圧縮するように指定するとそういうことがおきることがわかってきました。
Windows もいろいろとあてにならない、もう linux に軸足を移そうか、と思案しています
522:デフォルトの名無しさん
19/11/04 16:19:56.83 1IiqNDSP.net
>>510
SetFocus()を使うと好きなコントロールにフォーカスを与えることが出来る。
SetForegroundWindow()は余り効果が無い。
523:デフォルトの名無しさん
19/11/04 16:52:05.66 KwYoxUXo.net
longポインタ引数にintポインタ渡して>>445みたいなトンチンカンな返答する人が何か言ってる
524:
19/11/04 18:29:13.81 fwURXfb5.net
>>513
>>445 を日本語に翻訳してみました。
URLリンク(docs.microsoft.com)
では api 関数の第二引数は 「LONG」で定義されています。
ここで注意しないといけないのは「long」ではなくて「LONG」。
すなわち LONG は win32api.h で定義されている型です。これが実際の環境ではどう typedef されているかは環境依存です。
それを調べるために >>445 で実際に sizeof(LONG) の値を出力させると sizeof(LONG) = 4
私は >>443 で第二引数に int (そして渡す値は 0) を使っていますが sizeof(int) = 4
値は 0 だから signed/unsigned については問題ない
そして sizeof(int) = sizeof(LONG) だからなおさら問題ないのです。
昔は DWORD (Double WORD) と定義されていましたが、1 word = 2 bytes, 2 words = 4 bytes
32bit 環境での普通の int のサイズは 4 なので昔から int を当てて問題なかったのですよ
結論:>>513 >>444 はニワカ、win32api スレに投稿する前に 10 年 ROM ってください
525:デフォルトの名無しさん
19/11/04 18:55:51.87 KwYoxUXo.net
>>514
445のどこがWindows環境?
526:デフォルトの名無しさん
19/11/04 19:29:40.39 ex697rOI.net
DOS窓でprintf出力しながらWin32APIだって使えるからWin環境
527:デフォルトの名無しさん
19/11/04 20:03:10.14 xxqq9QlV.net
LONGは、WPARAMやLPARAMと型変換する危険コードが多い気が。もちろん古いコードだけど。
528:
19/11/04 20:32:15.68 fwURXfb5.net
>>515
だから、あなたは 10 年 ROM ってなさい、ってさっき言ったでしょう?
529:デフォルトの名無しさん
19/11/04 23:46:10.01 hiiCgg8I.net
ここはWin32スレなんだからWin64や総称であるWindows APIはスレ違い
32ビットの話だけしてろ
530:
19/11/05 00:15:09.88 SbnLKNM3.net
>>519
残念ながらその意見に賛同する人は少数派だと思いますよ
531:デフォルトの名無しさん
19/11/05 01:54:03.16 RTdVMJgD.net
Win64APIなんてどっから出てきたの?
532:デフォルトの名無しさん
19/11/05 11:28:00.41 f5fZl2jz.net
> 昔は DWORD (Double WORD) と定義されていましたが
LPARAMは 16bit,32bit共に LONG (符号付整数)
533:デフォルトの名無しさん
19/11/05 11:48:37.07 McETm4vA.net
>>519
64bitプログラミングであっても使用するAPIは実体としてはWin32APIだぞ
Win64APIなんて実体はなく、論理的に実装区分として呼び分ける程度
つまりスレチでも何でもない
534:デフォルトの名無しさん
19/11/05 19:37:14.92 wVD+ILW8.net
double wordが32bitだなんて本来word幅が16bitという前提の話でインテルなら80286までのはずが386でパスされathlon64で再びパスされるという異常事態が今も続いているわけなんだが
535:デフォルトの名無しさん
19/11/05 20:20:06.81 Rmlz0hln.net
>>524
16bit CPUや32bit CPUという言葉と
ポインタ = アドレス幅が違うことは普通にあるってわかってる?
8086は16bit CPUでレジスタ幅は16bitだがアドレス幅は20bit(最大1MB)
80286も16bit CPUだがアドレス幅は24bit(最大16MB)
80386は32bit CPUでレジスタ幅、アドレス幅ともに32bitで
分かりやすい時代がPentiumの第一世代(1995年ぐらい)ぐらいまで続いたが
Pentium Proからは物理アドレス拡張が搭載され32bit CPUだが
アドレスバスは36bit(最大64GB)になったんだが
536:デフォルトの名無しさん
19/11/05 20:52:13.30 mHpC8FDb.net
>>525
釈迦に説法ご苦労
537:デフォルトの名無しさん
19/11/05 21:08:53.99 Rmlz0hln.net
釈迦は俺やしw
538:デフォルトの名無しさん
19/11/05 21:43:32.83 mHpC8FDb.net
俺メインフレームでdiagnose命令とかいじくってて
別な案件でhdlでcpu書いたりしてるけど
539:デフォルトの名無しさん
19/11/06 01:32:27 k1IDaN6Q.net
メインフレームw
何歳になってもイキリ小僧してるんだな
サルのパパとママはご存命かい?
540:デフォルトの名無しさん
19/11/06 02:20:55.89 71FJFoA8.net
>>529
何イキっとんねん
541:デフォルトの名無しさん
19/11/06 04:07:48 Z1mcKm+J.net
イキなりえなり
542:デフォルトの名無しさん
19/11/06 07:21:07 cnDla3Ge.net
>>525
ソフト的なAPIの話に物理アドレス空間で語るバカ乙w
543:デフォルトの名無しさん
19/11/06 12:01:28.81 o3tEvZiY.net
釈迦がどうかはともかく
>>525 が全くトンチンカンなレスであることは事実
いつものあいつだろ
544:デフォルトの名無しさん
19/11/06 15:05:39.69 Z1mcKm+J.net
>>532
APIの話だというのなら、OSが16bitだろうが32bitだろうが
APIの仕様が代わるわけないんやで
異常事態でもなんでもなく、それが高い互換性の理由だ
545:蟻人間
19/11/06 15:13:44.92 Z1hQUtYe.net
64ビット対応で
Get/SetWindowLongよりもGet/SetWindowLongPtrを使え。とか、
DialogProcの戻り値をINT_PTRにしろ。
とかの若干の変更点があるようだ。
546:デフォルトの名無しさん
19/11/06 15:19:20.45 o3tEvZiY.net
HANDLEもこっそりtypedefに_PTR変えたんだっけ
547:デフォルトの名無しさん
19/11/07 01:18:36.16 7K0XtVuo.net
ダイアログプロシージャの戻り値がめんどうなことになる
x86じゃBOOLだけどx64だとINT_PTR
でもVC6だとBOOLはintだという
548:デフォルトの名無しさん
19/11/07 01:32:58.79 sEmiRyTj.net
歴史的理由で仕方のない面もあるが、
単一のソースで16bitと32bit、32bitと64bitでコンパイルできるようにしてきたから
型の実態は結局なんなんだ?って悩むことになってる。
もうそろそろネイティブ型だけを使えるようになってほしいが
そのために言語を変えるほうが楽だろうな
549:デフォルトの名無しさん
19/11/07 01:44:34.42 ubAK6fog.net
intとlongのサイズ違うこともあるしな
c#みたいにint32みたいなの最初から用意しとけよ
550:デフォルトの名無しさん
19/11/07 01:48:09.03 cfOynPV2.net
stdint.h使おう
551:デフォルトの名無しさん
19/11/07 02:23:16 +N3PsKU8.net
前に聞いた話だと、大型機が64BIT化した後も、intは、32BITの事が多いらしい。
552:デフォルトの名無しさん
19/11/07 02:26:43 4jX7Qkw7.net
いいかげんな知識で語りたがるやつ多すぎ
553:デフォルトの名無しさん
19/11/07 02:27:07 +N3PsKU8.net
32BIT時代は、整数サイズとポインタサイズが一致していて、サイズの選び方に
悩むことが無く便利だった。果たして、整数型を全部64BITにして良いものか
どうか。原則的に速度は変わらないとしても使用メモリは増えてしまう。
恐らく、exeファイルのサイズも増加するだろう。
554:デフォルトの名無しさん
19/11/07 02:42:22 sEmiRyTj.net
コンピュータが遅かった時代はCPUに最適なデータ型を
使うことが重要だったが、今は数値型しかなくて
データサイズは自動的に決まりますとかばかりだもんな
555:デフォルトの名無しさん
19/11/07 02:44:07 +N3PsKU8.net
64BITポインタptrと配列添え字idxに対して、
ptr[idx]
と書いた場合、idxが32BITと64BITだと実は、32BITの方が
1クロック増えてしまう可能性が高い。なぜなら、マシン語レベルでは、
上記の演算で、ptrは64BIT整数として扱われ、ptr[idx]は、
*(ptr+idx)として処理される。ところが、64BIT+64BITの整数演算は
あるが、64BIT+32BITの整数演算は無い事が多い。なので、
idxが32BITだと、いったん、64BITにBIT幅を拡張する命令を1つ
挿入する必要がある。
だから、64BITポインタのアーキテクチャだと、idxも64BITにした方が
速度が上がる可能性が高い。
556:デフォルトの名無しさん
19/11/07 02:45:21 +N3PsKU8.net
>>544
>今は数値型しかなくてデータサイズは自動的に決まりますとかばかりだもんな
C++だと今でもデータサイズは明示します。
557:デフォルトの名無しさん
19/11/07 02:54:21.19 PsJP4fV8.net
size_t型が無難にして最強
558:デフォルトの名無しさん
19/11/07 03:00:35.26 sEmiRyTj.net
>>546
他の言語の話や。今は速度よりも利便性のほうが重要や
559:デフォルトの名無しさん
19/11/07 03:18:33 +N3PsKU8.net
>>548
例えば、JavaScriptだと、数値型のデータサイズが自動的に決められている
わけではなく、常に double 型(64BIT 浮動小数点型)なのですが、
整数は32BIT整数型までだと double型に精度を落とすことなく完全に
収まるので、何も考えずに正しく扱えるだけです。
JavaScriptでは、64BIT 整数型は、伝統的には原則的に使えません。
560:デフォルトの名無しさん
19/11/07 03:23:20 +N3PsKU8.net
>>549
また、JavaScriptは、シンプルな使い方では、原則、整数型がなく、
console.log(54 / 10);
とすると、5.4と表示されます。これは、54や10が整数ではなく、
54.0 や 10.0 という double 型浮動小数点として扱われているためです。
これは、Sun/Oracle の Java とは全く結果が異なります。後者では、
54/10は、「整数除算」なので、結果は整数の「5」となります。
561:デフォルトの名無しさん
19/11/07 03:38:26 sEmiRyTj.net
> JavaScriptでは、64BIT 整数型は、伝統的には原則的に使えません。
64bitも使うのかって話なんだけどな? 52bitで十分だろう?
URLリンク(sbfl.net)
> JavaScriptのNumber(数値型)は倍精度浮動小数点数となります。
> つまり全体が64bitで、仮数部が52bitです。仮数部が52bitなので、
> Numberを用いて正確に表せる最大の整数は、53bitで表せる数から
> 1引いた数になり、(2^53 ? 1) = 9007199254740991となります。
562:デフォルトの名無しさん
19/11/07 03:39:52.10 sEmiRyTj.net
なんだ。JavaScriptにBigIntあるじゃん
Numberで表せる最大の整数値は十分な値にも思えますが、
分野によってはこれでも足りなくなることがあります。そこで導入されたのがBigIntです。
BigIntは、任意精度の整数を表す新しいプリミティブ型です。
任意精度の整数値については、基本的にCPUに搭載されている計算機は対応していないので、計算はソフトウェアによって行われます。
563:デフォルトの名無しさん
19/11/07 03:43:05 sEmiRyTj.net
やっぱりどんなときでもプログラマがデータ型を
選んでくださいっていうのは時代遅れだと思わ
564:デフォルトの名無しさん
19/11/07 03:53:54.05 +N3PsKU8.net
>>553
自動化することは可能ですが、現在の技術でそういうところまで自動化した
言語を使ってコンパイラ処理系を書くと、コンパイル速度が100倍遅くなる
かも知れません。これはコンパイル意を作成した経験に基づく話です。
もの凄く厳しい世界が実はまだ沢山残っています。
565:デフォルトの名無しさん
19/11/07 03:55:32.96 +N3PsKU8.net
>>554
誤:かも知れません。これはコンパイル意を作成した経験に基づく話です。
正:かも知れません。これはコンパイラを作成した経験に基づく話です。
566:デフォルトの名無しさん
19/11/07 03:58:19 sEmiRyTj.net
100倍遅くなるなら100倍高速なコンピュータを使えばいいだけ
567:デフォルトの名無しさん
19/11/07 03:58:57 sEmiRyTj.net
今より100倍遅かった時代もあるのに
何を言ってるんだろうか?
それこそ時代遅れの感覚
568:デフォルトの名無しさん
19/11/07 03:59:39 sEmiRyTj.net
あと、「かも知れません。」とかいう推測はどうでもいいから
コンパイラを作り上げた俺が言うのだから
説得力は高いだろうし
569:デフォルトの名無しさん
19/11/07 04:00:34.74 +N3PsKU8.net
>>555
GPGPUなどの世界でも、乗算速度がfloatとdoubleでは、4倍以上も違うような
例も多いのです。また、doubleをサポートして無いGPGPUの場合、doubleの乗算を
floatや整数型などにバラして処理するので数10倍かかります。
なので、慎重になる必要があります。
CPUの場合でもintとdoubleで速度がかなり違うことが多いです。
570:デフォルトの名無しさん
19/11/07 04:02:01.90 sEmiRyTj.net
あと極まれにスピードが重要な部分があるから
全部スピード重要視しろとかいうアホな感覚なw
あれはやめてほしい。
極稀に重要なら、極稀に使うものを作ればいいだけ
よく使うものを短くする。(仕事の)圧縮の鉄則
571:デフォルトの名無しさん
19/11/07 04:02:17.73 +N3PsKU8.net
>>558
あなたより私の方が良いコンパイラを作っている可能性も有りますよね。
572:デフォルトの名無しさん
19/11/07 04:05:54.80 +N3PsKU8.net
>>560
自動化の道は検討の価値はあるでしょう。
しかし、int32型とint10000000型を自動的に取捨選択できるほど、
コンパイラが賢くなるのは恐らく遠い未来です。
どこかで機能制限や精度を人間が指示する必要があると考えられます。
573:デフォルトの名無しさん
19/11/07 04:07:52.13 sEmiRyTj.net
>>561
そういう俺のほうが優れてるとか言う主張をしたいなら、
個人を特定できるような情報をだせ
574:デフォルトの名無しさん
19/11/07 04:08:39 sEmiRyTj.net
>>562
コンパイラが無理なら実行時にメモリ拡張すればいいだけ
そういうことも思いつかないから、その程度止まりなんだよw
575:デフォルトの名無しさん
19/11/07 04:08:50 +N3PsKU8.net
>>563
それはお互い様です。
576:デフォルトの名無しさん
19/11/07 04:11:41.18 +N3PsKU8.net
>>564
それでは明らかに遅く、数値計算、コンパイラ、翻訳、AI、データ処理、
OSなどの作成には向いていない言語になるでしょう。
577:デフォルトの名無しさん
19/11/07 04:12:20.64 sEmiRyTj.net
大胆に変数はすべて128bitしかないという言語だって考えられる
最大 340282366920938463463374607431768211456 までしか扱えないが
578:デフォルトの名無しさん
19/11/07 04:13:03 sEmiRyTj.net
>>566
そんな言語が今はたくさんあり実用化されています。
579:デフォルトの名無しさん
19/11/07 04:17:30.53 +N3PsKU8.net
>>567
64BIT整数ですら効率を考えて使用を躊躇する世界に我々はまだいます。
あなたが普段使っているコンパイラも、非常に細かい高速化を施して
あるので快適に使えているだけで、PythonやJavaScript、Rubyなどの
動的言語では達成できません。
例えば、JavaScriptの遅さは、全てdouble型にして、変数は、全てheapメモリ
から確保することが主原因の一つです。それだけでC++の数十倍以上遅くなっています。
あなたの考えてことは、JavaScriptをさらに遅くするような結果となるでしょう。
580:デフォルトの名無しさん
19/11/07 04:18:51.44 +N3PsKU8.net
>>568
有りますが、C/C++、Java、PythonやJavaScript、Ruby、Java、Kotlinなどの
メジャー言語ではそのような方針はとっていません。
581:デフォルトの名無しさん
19/11/07 04:23:37 +N3PsKU8.net
>>564
「その程度どまり」と言いますけど、あなたは私の作品を全く見てませんね。
全く発表してませんから。
582:デフォルトの名無しさん
19/11/07 05:42:32.39 xrNXmkmc.net
スレ違いのバカ二人はどこかよそに行って気の済むまで殴り合ってきてくれ
583:デフォルトの名無しさん
19/11/07 06:22:21 D8b5RtWG.net
> つまり全体が64bitで、仮数部が52bitです。仮数部が52bitなので、
> Numberを用いて正確に表せる最大の整数は、53bitで表せる数から
> 1引いた数になり、(2^53 ? 1) = 9007199254740991となります。
ひどい説明だな
どのくらいひどいかというと
WM_SYSTEMMENU並み
584:デフォルトの名無しさん
19/11/07 11:03:05.72 JQdG/Jj/.net
公共の場で変数型のピロートークですか
585:デフォルトの名無しさん
19/11/07 11:05:56.88 dB1QBG
586:Xo.net
587:デフォルトの名無しさん
19/11/07 11:27:25.53 nSoHFrko.net
>>575
NULLは0だから~
site_tはどうせintだから~
こういう馬鹿なハケンが一人いると崩壊するよね
588:デフォルトの名無しさん
19/11/07 12:11:51.38 sEmiRyTj.net
とか言うやつほどnullptrのことを知らなそうw
589:デフォルトの名無しさん
19/11/07 12:17:00.95 9pMbL+ZJ.net
(´∀`)<ぬるぽ
590:デフォルトの名無しさん
19/11/07 17:55:20.14 7K0XtVuo.net
#ifdef _WIN64
#define BOOLX64 INT_PTR
#else
#define BOOLX64 BOOL
#endif
BOOLX64 CALLBACK Dlg(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
こうやって回避してるわ
591:デフォルトの名無しさん
19/11/07 18:14:03.25 2gAeIIzZ.net
Windowsのデータ型だけのヘッダファイルって無いかしら?
データ型はあちこちで使わざるを得ないから、あちこちでincludeしたいけど、
APIのヘッダファイルはincludeしたくない。
APIを直接使うのは面倒だから、全部ラップしてるんだよね。
だから他からは使えないようにしたい。
592:デフォルトの名無しさん
19/11/07 19:03:13.60 +mjs9icr.net
データ型もラップしとけよ
593:デフォルトの名無しさん
19/11/07 19:07:36.74 2gAeIIzZ.net
>>581
どうやってラップすればいいですかね?
594:デフォルトの名無しさん
19/11/07 19:16:08.80 2gAeIIzZ.net
なんとなくわかったからいいやw
595:デフォルトの名無しさん
19/11/07 21:31:30.10 6aSe0RTj.net
横にそれるが
データ型もAPIの一部だと思ってるがあってるよな?
596:デフォルトの名無しさん
19/11/07 21:47:07.60 nSoHFrko.net
アプリケーション独自の型なんか知りませんがな
597:デフォルトの名無しさん
19/11/07 23:33:07.15 rEYaLqlI.net
個人的には構造化したほうがやりいいかな
598:デフォルトの名無しさん
19/11/08 03:59:17.05 ksOnEph7.net
お前らMFCでも使ってろ
599:デフォルトの名無しさん
19/11/08 04:54:11 2aYByRbi.net
普通のアプリならMFCが一番だと思うんだがなあ
変に角を丸くするとか透明にするとかされても使いにくいだけだろうに
600:デフォルトの名無しさん
19/11/08 05:57:08.22 bt2cbsd4.net
むしろMFC = 角を丸くするとか透明だろ
MFC以外でそんなの見たことないわw
601:デフォルトの名無しさん
19/11/08 07:30:44.18 D1bzmSlR.net
あんまりMFC関係なくね?
WS_EX_LAYEREDもSetWindowRgnもAPIを陽に意識して使うわけで
MFCはラッパーとしての薄さがありがたいだけやん
602:デフォルトの名無しさん
19/11/08 07:52:07.38 tDaXxZK7.net
MFCはかゆいところに手が届かないからな
廃れたWTLがいい
603:デフォルトの名無しさん
19/11/08 09:32:12.24 MipGbP9q.net
>>591
WTLは廃れてないよ。今もちゃくちゃくと最新コードがコミットされ続けている。現時点で2019年11月3日(日)が最終更新。
URLリンク(git.code.sf.net)
604:デフォルトの名無しさん
19/11/08 11:37:03.54 bt2cbsd4.net
廃れたかどうかは、使ってる人がいるかどうかであって
作っている人がいるかどうかではない
605:デフォルトの名無しさん
19/11/08 12:13:14.99 xtk88Sle.net
俺が使ってるから廃れてないぞ
606:デフォルトの名無しさん
19/11/08 12:17:45.01 2aYByRbi.net
>>594
ちょと見せてみて?
607:デフォルトの名無しさん
19/11/08 13:27:31.55 D1bzmSlR.net
あんまり不人気だと
供給側も撤退を考える要素が色々出てくるだろ
608:デフォルトの名無しさん
19/11/08 13:56:39.50 1R79qYgq.net
ワイの中では永遠の大人気、comctl32.dllをずっとverupして欲しいと願います
1803でも修正するくらいだしさ
609:デフォルトの名無しさん
19/11/08 21:00:43.55 lpVjWTGo.net
TOPMOST ウィンドウがほかのウィンドウの背後に移動してしまう
URLリンク(social.msdn.microsoft.com)
610:デフォルトの名無しさん
19/11/08 21:14:49.46 sQQR9KNr.net
TOPMOST同士があるからな
611:デフォルトの名無しさん
19/11/09 13:55:21.92 hHKZwsDl.net
タスクマネージャもよく後ろに移動する時あるけど何なのあれ
612:デフォルトの名無しさん
19/11/09 14:13:06.87 BZG37V3w.net
API設計が糞だから
皆がみんなTOPを取りたがって
奪い合いになる
613:デフォルトの名無しさん
19/11/09 15:42:27.57 01iIJK4d.net
タスクバーより手前にくる時もある
別件だが
タスクマネージャのCPU使用率が高くなってグラフが高速になるのもある
614:デフォルトの名無しさん
19/11/09 17:34:31.94 GyhiHYRD.net
もう記憶の彼方ですがディスプレイメモリのアドレスって直で取れましたっけ?
毎回メモリ確保してDIB作って画面のHDCからコピーしてっやらないと駄目すかね
それなら諦めてGetPixel使いますが
615:デフォルトの名無しさん
19/11/09 17:44:43.05 HanEs9+F.net
アドレスを直で、の正確な意味がわからんが基本あれGPUにあるからね
Direc3Dテクスチャで良いならIDXGIOutputDuplicationから取れるけど
616:デフォルトの名無しさん
19/11/09 17:56:17.05 HyuDdIlK.net
TOPMOSTなんて思い上がった言葉ですぐ気がつけよ
スレッドの優先度でさえ最優先ではなくタイムクリティカルだろうが
617:デフォルトの名無しさん
19/11/09 18:03:02.50 GyhiHYRD.net
>>604
こりゃ失礼、ありがとうございます
なんか昔いじった気がしたんですが、あれはオフスクリーンバッファだったか……
PC98じゃあるまいし、言われて見りゃ無理くさいすね
画面上の変化を監視して作業自動化する様なのを頼まれたのですが、
監視するべきは数ピクセルなので、おとなしくGetDC(nullptr)からGetPixelします