X



UNIXプログラマの為のWindows入門
0001なんだ、こりゃ!!垢版NGNG
いつも、Solaris,HP-UX,FreeBSD等でプログラムを作っています。
最近、業務上、どうしてもWindows上でのプログラムを作らなくては
いけない状況になりつつあります。
UNIXに慣れてしまったこの体、なんでいまさらWindowsって感じですが、
ここは一発、頑張りましょう。
って事で、UNIXプログラマの為の、Windowsプログラミングの手引き
のようなスレです。
UNIXの良き伝統に則り、みんなで知識を共有しませんか?
0003名無しさん@Emacs垢版NGNG
あくまでUNIX文化圏の発想を持ったままWindowsプログラミングを探検
するならいいネタじゃない?

とりあえず漏れのWindows体験。仕事上VBでプログラム作らなきゃいけ
なくなってCOMを触ってたんだけど、Collectionオブジェクトの実体が
さっぱり分からず気持悪い思いをした。ヘルプ見ても非プログラマ向け
の説明をタライ回しで読まされるだけだった。

IDLかC++のヘッダが見てえ! でも必死でGoogleしても見つからねえ!
こんな時UNIXなら「分からない事はソースに聞け」で解決なのに!
って感じで地獄でした。陸に上がった魚の気分。

何を探せばよかったですか?
0005なんだ、こりゃ!!垢版NGNG
WindowsっていうOSの根本思想というか、設計思想、アーキテクチャって
なんなんでしょう?
UNIXって、とりあえず、ファイル。
何をするにも、ファイル、ioctl ってイメージがあるんだけど。
0006なんだ、こりゃ!!垢版NGNG
あと、なんであんなにプログラム作るのが複雑なんだろう。
Visualなツール使ってみんなプログラム作ってるけど、
Visualなツールが自動的にやってることって、みんな理解してるのかな?
わたし、サパリわからないです。
0007名無しさん@お腹いっぱい。垢版NGNG
それって、VBのことですか?
0008名無しさん@お腹いっぱい。垢版NGNG
>5
MS Winつまりマイクロソフトが儲かる為のOS
0009なんだ、こりゃ!!垢版NGNG
VBに至っては、何がどうなってるのかサパリわからんです。
大体、main はどこ?って感じです。
VCだと、最初にプロジェクトを選択するじゃないですか。
んでもって、なんちゃらーってプロジェクトを選ぶと、テンプレート
が作成されますよね。
なんじゃコリャって感じなんです。
0011なんだ、こりゃ!!垢版NGNG
>>8
それは確かに正論です。
でも、これからWindowsを無視しては食っていけないと、危機感をもっています。
といっても、身についたUNIX的考えかたって、悪くはないと思うんです。
いかにして、発想の転換を行えばいいのか。(UNIX->Windows)
これが、問題です。(私にとってはね。)
0012名無しさん@お腹いっぱい。垢版NGNG
Delphiが良いですよ。わかりやすくて。
MSの余計で汚い部分はuses節で見えませんし、Visualとの関連もわかりやすいです。
linuxに逆に移植できるし。
0013なんだ、こりゃ!!垢版NGNG
>10
私も、あの統合環境は良く出来てると思います。
その反面、あの環境でないとプログラムを作れない自分にいらだちます。
00143垢版NGNG
>>5
とりあえず「何でもオブジェクト(コンポーネント)」じゃないかな。オ
ブジェクト指向マンセ-の漏れとしては、その点はうらやましい。この辺の
事情は「Rubyを256倍使うための本 邪道編」が参考になる。
0015なんだ、こりゃ!!垢版NGNG
Windowsのプログラミングの肝って、Win32APIじゃないんでしょうか?
いわゆる、UNIXでいうシステムコール。
まず、システムコールを通して、OSの作りや、動作を理解していく。
それが出来て初めて、そのOSに合ったプログラムが作れる。
と思っているのですが。
00163垢版NGNG
>>15
今のWindowsはWin32 APIを包み隠す方向に進んでるように見える(外か
らは)。.NET時代には邪魔な存在だろうし、オブジェクト指向の世界と
馴染まないよね。>Win32 API
0017名無しさん@お腹いっぱい。垢版NGNG
Visualのほうは、オブジェクトがWin32APIに包まれて隠れているので気にしなくても良いのでは?
必要なときだけ呼び出せば作れる。
問題なのはMSのバグがオブジェクトに隠れているのできちんと動いてくれないことが多いところ。
0018なんだ、こりゃ!!垢版NGNG
>14
MFCとかの本を読んでると、なんとなくオブジェクトのイメージが
沸いてくるのですが、Win32APIの本を読んでるとオブジェクト指向的な
考えが全く感じられません。
私って、逝ってよし?
001917垢版NGNG
(正)Win32APIがオブジェクトに包まれて隠れているので
00203垢版NGNG
>>18
単純に、先に存在していた古くて汚いWin32 APIを後の時代にオブジェ
クトの皮で隠蔽しただけだと思うよ。だからMSはWin32 APIを消したい
と思ってると思うんだけど。個人的に。
0021名無しさん@お腹いっぱい。垢版NGNG
とりあえず、.NETを用意してくれたんだから、
Win32APIやMFCのことは忘れようぜ。
そんなもんこれからやるのは馬鹿らしい。
まぁ適当に関わっていくならいいかもしれないけどね。
0022なんだ、こりゃ!!垢版NGNG
>17
そこなんですよ。
現在のUNIXって、統一的なオブジェクト指向なIFってないですよね。
(いわゆるクラスライブラリっていうのかな。)
OSへのIFがクラスの中に閉じ込められてるのが許せないってのがそもそもの間違い
なのかな?
00233垢版NGNG
>>22
> OSへのIFがクラスの中に閉じ込められてる
これどういう意味? ちとわかんない。
00243垢版NGNG
>>23
ああごめん、Win32 APIがMFCに閉じ込められてるって事か。その上の文
のUNIXの話の続きだと思った。
0025なんだ、こりゃ!!垢版NGNG
今後のMSの方針を考えると、Win32APIを直接使うプログラムは、
推奨しないということになっていくのでしょうか?
002617垢版NGNG
そこら辺は諦めましょう。慣れだと思います。たかがWINDOWSなんですから。
私みたいなやつが多いから、こんな糞OSをみんな使わざるをえないのはしゃくですが
0027なんだ、こりゃ!!垢版NGNG
>>21
まだ、Windowsのプログラムを作り始めて数ヶ月です。
不勉強で申し訳ないのですが、.NETってなんですか?
もちろん、言葉は聞いたことがあるのですが、イメージが
全くつかめません。
イメージだけで結構です。教えていただけませんか?
00283垢版NGNG
では、「UNIXプログラマが新しめのオブジェクト指向環境でWindowsプ
ログラミングする話」にしちゃってOK?
0030なんだ、こりゃ!!垢版NGNG
>>28
OKです。
UNIXプログラマがWindowsでプログラムを作らざるをえなくなったとき、
どういう風に今までの考え方を変化させていかなければいけないか、
という部分について議論できれば最高です。
00343垢版NGNG
>>30
んじゃ遠慮なく。

まず変わらざるをえないのが情報の探し方だよね。

UNIXの場合はソースという一次情報源があって、正確な情報が知りたけ
ればソースを読むって手が使える。楽に済ませる場合はドキュメントや
MLの情報をあさるけど、真実が知りたきゃソースを読むしかない。後は
信憑性と時間コストのトレードオフでどの情報源を使うか決めるだけ。

でもWindowsプログラミングでは大抵のソースは読めない。MSのドキュ
メントや一般開発者のメモ等の二次情報をあさったり、ブラックボック
スをいじり回す事になる。

UNIXのソースに相当するような信頼性の高い情報はどうやって得たらい
いのか? ってのが俺の課題かな。
0035名無しさん@お腹いっぱい。垢版NGNG
かーごめかごめ かーごのなーかのとーりーはー いーついーつーでーやーるー

STABLEじゃないと思うぞ.NET
しかもOPENSOURCEでも、「常識ですね」でもない世界。
あの環境の呪縛から逃げるには、やっぱWin32APIしかないと思うのだが。
0037名無しさん@お腹いっぱい。垢版NGNG
>>36
う〜ん だってあれってj2ee+CORBAでもなんとかなっちゃいそうなんだもん
MSの通信系ってDOSの頃から信用してねーもん
0038名無しさん@お腹いっぱい。垢版NGNG
>>34
MSにお布施しまくって常に最新のMSDNとかMSJとかを読みまくる。
位しかないんじゃない?

俺なんかも含め、びんぼー人は
>MSのドキュメントや一般開発者のメモ等の二次情報をあさったり、ブラック
>ボックスをいじり回す事になる。
しかないと思うけど。

# だから中途半端な金持ちはMSまんせーになりがちなのかね
003938垢版NGNG
あ、最後の1行が意味不明だった。
まんせーっていうか質問しても「MSDN見ればいいんじゃないですか?」
しか言わないやなやろーが多い(と思う)ってことで。

まぁhelpはPlatform SDK落とせばいいだけだけど、MSJに載ってる
ような技術資料は会員にならないと見れないし。
0041名無しさん@お腹いっぱい。垢版NGNG
>>34
Windowsプログラミングの場合、その2次情報が多いし。
いいんじゃない?

ソースが常にある環境は確かにうらやましいけど
最終的にソースに 頼る のはプログラマとしては
前時代的で長い目で見た場合の効率はよくないと思ってる。

だって、何のためのドキュメントなのよ。
man ls が信用ならないからってソースを見る人もいないしね。
0042名無しさん@お腹いっぱい。垢版NGNG
>>41
ごめん・・・みてたm(_ _)m < lsのソース
0043名無しさん@お腹いっぱい。垢版NGNG
>41
そのドキュメントが信頼置けんからな…
バージョンによる挙動の違いをMSDNからは読み取れないと思うけど?
# immとかwininetとか悲惨の一言。使う奴が馬鹿だって? そりゃないよ…
0045名無しさん@お腹いっぱい。垢版NGNG
>>43
そうなると信用できそうなのはlibcとWin32APIくらいになっちまうのよな。
(ん?Windowsではlibcっていわずに標準Cライブラリって呼ばんといかんかったか)
004641垢版NGNG
>>42
あーおれも見たことあるや。すまん。
標準出力とリダイレクトの動作の違いがマニュアルから読み取れなくて・・・
0047名無しさん@お腹いっぱい。垢版NGNG
だいたいUNIX系のはマニュアルがしょぼい。
「ボランティアで書いてんだからしょーがねーだろ」
「これで判らなかったらソース見ろバーカ」
っていう態度がありありと見てとれて、むかつく。
0049名無しさん@お腹いっぱい。垢版NGNG
>47
MSDNに金払ったところで、この内容で判るかボケって感じだよな。
結局動かしてみて挙動を追うしかない、ソースがあるとないとでは大違い。
0050名無しさん@お腹いっぱい。垢版NGNG
MFC使ってみようと思ってMSDNのドキュメントとか読んだが、
結局わからなくてソースを読んだ。
マニュアルがあるに越したことはないが、
やはり最後はソースだと。
0051垢版NGNG
ソースがあっても、果たして理解できるんだろうか?
> Windows
だいたい、Win32APIって何種類ぐらいあるんだろ?
どんどん増えていってるのか?もしかして。

あと、INVALID_SOCKETはやめれ。
ソケットIFぐらい周りとあわせろ。
0052名無しさん@お腹いっぱい。垢版NGNG
age
0054名無しさん@お腹いっぱい。垢版NGNG
>>51
構わず -1 使ってますが何か?

というか むしろ WSA 系の方を使ってほしいんでは。
0057名無しさん@お腹いっぱい。垢版NGNG
>>56
Win32プログラムの基本的な構造は今も変わっていないから
これから始めるのなら一読の価値あり。
0058名無しさん@お腹いっぱい。垢版NGNG
56>>57 んじゃ勿体無いので読みます。しかし分厚いから読みにくいんだなこれが。
005957垢版NGNG
>>58
読んでおくべきなのは頭から1/3ぐらいまで。
後は必要に応じて拾い読み。

今の版は2分冊になっているから、読みにくかったらそっちを買えば
少しは薄くなって読みやすくなるんでない? (藁
0060名無しさん@XEmacs垢版NGNG
> ソースがあっても、果たして理解できるんだろうか?
> > Windows

普通無理だな。
Windows向けのCのソース見てると混乱する。
お前どこからでてきたねん! って感じで。
UNIXでのプログラミングに比べて数段難しい。

多分GUIはWinの方が楽なんだろうけど。
0061垢版NGNG
>>54
-1 で、ちゃんと動いてる?
Winsock1.1使って、VC++でDLL作って、それを
VBから使ってたんです。
ずーっと動かしてるとだんだん重ーくなってくるんよ。
何回も、何回も、繋いで、切ってってやってるとね。
んで、-1 やめたら、なんか直ったみたい。

0063名無しさん@Emacs垢版NGNG
VC++の起動時のTipsで
「VC++はVC++で開発されました」
と書いてあったんだけど「だから何?」と思った

というか最初のVC++はMS-Cで書いたと思われた
あまりにもUNIXから離れたのでsage
0064某国製品の奴隷垢版NGNG
>63
DelphiもObjective PascalだしJbuilderもJavaで開発されてますな。
あ、どっちも IDEだけだけど。

ほんとにどうでもいい話だが。
0065名無しさん@お腹いっぱい。垢版NGNG
ところで皆さん、ハンガリー記法ってどうですか?
変数名のプレフィクスに i だの lp だのと型名をつけるやつ。

漏れは覚えたのがWindows→UNIXだったもんで、ついUNIXでも
ハンガリー記法で書いてしまうですよ・・・鬱。
でもって、他のソース読むときも「変数名にプレフィクスつけて
くれないかな」と思ってしまう始末。

すっかりシモニーたんに支配されてます。うぅ・・・
0067名無しさん@お腹いっぱい。垢版NGNG
漏れは、最近Windowsプログラマーから、UNIXプログラマに転向した。
正直言って、カルチャーショックだね。
UNIXのシステムコールの少なさに唖然。
Win32APIなんか1000個くらいあるが、漏れほぼ全部わかる。でも人生の無駄だった。
ネットワーク系のプログラムや、サービス(デーモン)のプログラムなんか、Windowsはめちゃ難しくて手間がかかる。
そんなにUNIX詳しくないので、えらそーなことは言えんが、
システムコールやライブラリレベルで、Windowsが明らかに勝っているのは、
ACL, SAM, ファイルロックくらいかな。
それ以外は、UNIXマンセーだね。
WindowsでSTLなんて使おうとしたら、ブービートラップがいっぱい。
正直、WindowsでSTLは使いものにならない上に、意図的に隠されている。
MFCのCStringクラスや、CArrayクラスなんか、STLを覚えた今の頭で考えると、もう最悪。
今では、STLを隠されていたいたことに怒り爆裂だ。
0068名無しさん@お腹いっぱい。垢版NGNG
>>67
スレッド周りもWin32の方が扱いやすいと思うなぁ。
mutex, semaphore, eventいずれも区別無しでWaitFor〜()で待ち合わせ
できるし。socket descriptorがハブにされてるのはアホだけど。
レスを投稿する


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