アカウント名:
パスワード:
If the application has created an IME window, it should call ImmIsUIMessage. Otherwise, it should pass this message to DefWindowProc.
最終的には物理法則(とってもオープン)に突き当たるので、なんとかなるかも。
物理法則ライセンスはオープンソースライセンスの一種とはみなせません。
物理のソースコード (物理法則) をほしがっているユーザーはいくらでもいるのに、僕の知る限り、ベンダー (神、知的なんとか、スパゲッティーなんとか等) からソースコードが公開されたことは一度もありません。
むしろ、ブラックボックステスト (黒体輻射の実験、という意味ではない) しかできない上に、ブラックボックステスト自体大変なこともある状況で、一部のマニア (←失礼) が知恵を絞ってリバースエンジニアリングをしてきたのだと思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stableって古いって意味だっけ? -- Debian初級
使い回した開発者のミス? (スコア:0)
いや、おかしいなって気づいてもよほどあからさまな間違いでもない限り、そのやり方が正しいやり方なんだって思うだろ、普通。サンプルコードとはそういうもの。常考。
Re:使い回した開発者のミス? (スコア:3, すばらしい洞察)
WM_IME_SETCONTEXTのヘルプ [microsoft.com]には、 とあります。
例示されたサンプルはなにもせずにreturnしているので、明らかにウィンドウメッセージのヘルプと矛盾しているんですよね。
ただ、WM_IME_???系の処理を行ったことがない方だと、気付けないのもやむなしかもしれませんが……。
Re:使い回した開発者のミス? (スコア:1)
本当は、このメソッドを呼び出した呼び出し元WindowProcの
lParamを書き換えて、呼び出し元のWindowProcに制御を返したいわけです。
呼び出し元がWM_IME_*に対して何か処理をしている可能性もありますので。
return falseはおそらく、デフォルトの処理を行うことをあらわしています。
このサンプルを書いた人は、lParamを書き換えておけば
return後に呼び出されるDefWindowProc相当関数のパラメータも
変更されて呼び出されると(無意識のうちに)考えてしまったのでしょう。
とはいえ、DefWindowProcを呼び出すようなコードは、
後で修正がしにくくなるでしょう。
DefWindowProcを呼びだしてデフォルトの処理を避ける(return true)のは、
あくまでも次善の策です。
Re:使い回した開発者のミス? (スコア:1, すばらしい洞察)
サンプルコードとはそういうもの、常考。
Re:使い回した開発者のミス? (スコア:2, おもしろおかしい)
そして、原文(英語)のドキュメントを頑張って読んでみるけど、日本語訳が間違いとは思えない。しかしそれ以上に自分の語学力にも自信がない。
「オレはC言語と英語ではC言語のほうが得意だ」ということで、自分が英語のドキュメントも正確に読めなかったと思ってしまう。
そして「このサンプルは正しいはずだ」と思ってしまう…
…オレだけか。
Re:使い回した開発者のミス? (スコア:1, すばらしい洞察)
それなら話は早いです。
コードを検証しましょう!!
#たいていの場合、プログラムは書いてあるとおりに動きます
Re:使い回した開発者のミス? (スコア:1, すばらしい洞察)
ソースが(自分から見て)公開されてるわけでもないライブラリが介在すると、
この発想は破綻します。
どうしてもブラックボックスの振る舞いを「推測」せざるを得なくなってしまう。
読めば判るという大原則が機能しない。
…だからこそ優秀な人々は、オープンソース(誰にでも公開)だの、アジャイル(チームメートには公開)だの、といった開かれた開発形態が必要だと理解している。
引用と同じような台詞を例えば「matz氏が」言うのには意味も価値も十分有る。
MSの中の人が言ったら笑い話になってしまう。
(でも数年前にゲイツが来日し某大学で講演したとき、「他人のソース嫁。それがタメになる」と言ったんだよね。そう言うんだったらMSのソースも確認させてほしいもんだが…)
Re:使い回した開発者のミス? (スコア:1)
たいていの場合と書いてありますが?
そしてたいていの場合以外というのは、おっしゃるとおりライブラリやOSのバグだったりもするんですが、ハードウェアのバグなどもあったりします。
中の方をどんどん追っていっても、いずれはブラックボックスに突き当たるので(ICの中の実装まで追う人は少数派でしょ)、振る舞いを推測することはとても重要です。
いずれはどこかでブラックボックスに突き当たるのであれば、これを基にオープンソースの重要性を説くのはちと苦しいですね。
Re:使い回した開発者のミス? (スコア:1)
問題は神のヤツがヘタレエンジニアなせいで、不可解な実装が多いところ。
物理法則がオープンだって? (Re:使い回した開発者のミス?) (スコア:1)
物理法則ライセンスはオープンソースライセンスの一種とはみなせません。
物理のソースコード (物理法則) をほしがっているユーザーはいくらでもいるのに、僕の知る限り、ベンダー (神、知的なんとか、スパゲッティーなんとか等) からソースコードが公開されたことは一度もありません。
むしろ、ブラックボックステスト (黒体輻射の実験、という意味ではない) しかできない上に、ブラックボックステスト自体大変なこともある状況で、一部のマニア (←失礼) が知恵を絞ってリバースエンジニアリングをしてきたのだと思います。
Re:使い回した開発者のミス? (スコア:1)
もしやっているという人がいるならこう言いたい。
「そんな暇があったら仕事しろ。」
Re:使い回した開発者のミス? (スコア:1, すばらしい洞察)
ライブラリの話は関係ないでしょう。
コードが見えてるんですから、おかしい事は気付きますよ。
Re:使い回した開発者のミス? (スコア:0)
>ライブラリの話は関係ないでしょう。
そのサンプルコードを呼び出してるのは何?
OSという名のブラックボックス化されているライブラリの
挙動が変わって初めてバグが顕在化したんでしょ?
Re:使い回した開発者のミス? (スコア:0)
自分ひとりで全部書ける程度の規模ならいざしらず。
Re:使い回した開発者のミス? (スコア:0)
問題は、コピペした人がすでに居なくなってることが多いことだよね。
Re:使い回した開発者のミス? (スコア:0)
(Borlandが)何でそんなにバグを認めるのがいやだったのか、今でも不明。
--
誰を信じちゃいけない、裏切られるから。
私も信じないで、貴方を裏切ってしまうから。
Re:使い回した開発者のミス? (スコア:1, 参考になる)
それはですね。Microsoft 提供の windowsx.h に
#define GetFirstChild(hwnd) GetTopWindow(hwnd)
ってのがあるため、VCL の GetFirstChild が勝手に置き換わってしまう問題を回避するための苦肉の策なのですよ。
幸い、VCL / PASCAL 言語は大文字小文字を同じとみなしますからね。
Microsoft も反省したのか、その後のヘッダーファイルでは
#define IAccessibleWinSAT_get_accChildCount(This,pcountChildren)
こんな感じに、簡単には衝突しないように配慮しているようです。
Re:使い回した開発者のミス? (スコア:0)
C++ Builderの人は無視ですか。そうですか。
なら、『VCLヘルプに「Get~Child」と書くな』と思うCB使い。
このストーリーのごとく「コピペしても動かないサンプル」となる。
しかも(VCLライブラリの)TreeViewクラスメソッド(だった気がする)なのに、windows.hと名前が衝突するのか?
Re:使い回した開発者のミス? (スコア:0)
グローバルなコンテキストで #define されちゃ、回避しようがないでしょう?
マクロ展開はクラスメソッドかなんだか判断せずに文字列置換。ですよ。
Re:使い回した開発者のミス? (スコア:0)
最近c#ばっかりだから、c/c++はもう忘却の彼方だ。
では、Microsoftのwindows.hの仕様不良&Borlandのマニュアル不備って事で
Re:使い回した開発者のミス?(オフトピック) (スコア:1)
他人の署名をモジったのを見たのは何度かあったが自分のを見たのは初めてだ。
# セルフマイナスモデのためにACにしようかと思ったけどIDで。
Re:使い回した開発者のミス? (スコア:0)
とりあえず「ある程度実績のあるコード」としてコピペ元に使っちゃうもんな。
やっぱ自分で動かしてみないと駄目なんだろうけど、ほかの誰かがチェックしているであろう
ものをチェックしても2度手間になっちゃうからちょっとねえ。