5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Windows Programing for C/C++(Not MFC)

1 :1:02/04/08 13:14
似たようなスレで「WIN32API 質問箱」がありますが
Windowsプログラムを作るにあたって、API以外の疑問や質問を
ぶつける為に作りました。

自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。
質問や疑問以外にも、プログラミングしていて気付いた事や発見等も
書き込んでくれると有難いです。

あ、自分の開発環境はVisualC++でMFCを使ってないので
C/C++でMFC無しの方向でお願いします。

2 :1:02/04/08 13:21
さて、自分でスレ立てておいて、昔から疑問に思ってる事があります。
それは、最初に渡されるHINSTANCEの扱いです。
Windowsプログラム等を見ると、迷わずグローバル変数を使ってますよね。
最近までは、グローバル変数を定義して、渡された瞬間に値を代入してましたが
最近は、GetWindowLongを使ってウィンドウハンドルから求めてグローバル変数を
使わない方向にしています。皆さんは、どうされてますか?


3 :デフォルトの名無しさん:02/04/08 13:21
2げとずざ。
MFCなしでC++って人いるの?

4 :デフォルトの名無しさん:02/04/08 13:21
2ゲトー

5 :1:02/04/08 13:22
>>2

>Windowsプログラム等を
Windowsプログラムのサンプル等を

6 :1:02/04/08 13:25
>>3
自分はMFC無しでC++でプログラムしてます。
やはり、CよりC++の方が慣れてくると色々と
便利ですし…(その分…いや倍位、短所もあるけど)

どちらかというと、不満無くMFCを使ってる人の方が不思議です。

7 :デフォルトの名無しさん:02/04/08 13:38
>>2
漏れはグローバル変数に入れてしまってるが、確かにグローバル変数は使わない方向で逝きたい…。
が、ウィンドウハンドルから取得って、そのウィンドウハンドルは、何処から取得するの?

8 :デフォルトの名無しさん:02/04/08 13:40
>>6
誰も不満無くMFCを使ってる奴なんかいねーよ。
みんな、不満言いながらMFC使ってんだよ。

9 :デフォルトの名無しさん:02/04/08 13:41
GetInstance()

10 :3(まぼろしの2):02/04/08 17:29
>>8 わらた。はげど。

11 :デフォルトの名無しさん:02/04/08 20:47
>>10
禿同。
MFCだけでなく、Windows自体が…(以下略)

12 :デフォルトの名無しさん:02/04/08 20:55
>>2
オレの記憶違いでなければ、Win32以降のWinMainに渡されるHINSTANCの値は
ともに無意味だっと思うが。だからオレは固定にしている。


13 :デフォルトの名無しさん:02/04/08 20:57
>12
今まで無事でよかったね。

14 :デフォルトの名無しさん:02/04/08 20:58
>>8に激しく同意。

15 :デフォルトの名無しさん:02/04/08 20:59
>>13 ん゛HINSTANCの値が何を示しているのかわかかって使用してい
るつもりだがなにか問題があるか? 具体例を示してくれ。

16 :デフォルトの名無しさん:02/04/08 21:12
理解してんならいんじゃないの

17 :デフォルトの名無しさん:02/04/08 21:29
俺も早く>>8みたいなかっこいいレス付けれるようになりたいよ

18 :1:02/04/08 23:32
>>12
>>13
>>15

なんとなく、わかってたんだけど、実験してみて初めて知った。

BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam){
 TCHAR szWindowText[200], szBuff[300];
 GetWindowText(hWnd,szWindowText,200);
 if(szWindowText[0]==0) return TRUE;
 sprintf(szBuff, "%s - %08x",szWindowText,GetWindowLong(hWnd,GWL_HINSTANCE));
 SendMessage((HWND)lParam,LB_ADDSTRING,0,(long)szBuff);
 return TRUE;
}
LRESULT CALLBACK TestWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
 static HWND hList;
 switch(uMsg){
  case WM_CREATE:
   hList = CreateWindow(TEXT("LISTBOX"),NULL,WS_CHILD|WS_VISIBLE|LBS_STANDARD,0,0,0,0,hWnd,NULL,(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),NULL);
   EnumWindows(EnumWindowsProc , (LPARAM)hList);
   return 0;

19 :デフォルトの名無しさん:02/04/08 23:34
おもいっきり WIN32API とかぶってるじゃないか


20 :デフォルトの名無しさん:02/04/08 23:38
かぶってますね。続きは WIN32API でどうぞ。

http://pc.2ch.net/test/read.cgi/tech/1017072275


21 :1:02/04/08 23:39
>>8
>>10
>>11
>>14
>>17
皆さん、Windowsプログラムは仕事でしてるんでしょうか?
自分の場合は仕事でする場合は1人か、複数人でも幸運にも
MFCを使わない場合が多いのです。
あとは、趣味でプログラムをする時ですが、
この時はもちろん、MFC無しです。

仕様とかで「MFCを使う事」とかになってるんでしょうか?
それとも、もともとMFCを使って組んであって、それを引き継いだとか??


22 :デフォルトの名無しさん:02/04/09 00:15
>>1 よ、スレタイトルと趣旨が異なっているぞ。

「C/C++で Windows programming をサポートするフレームワーク/ライブラリって知りませんか?
 有名なやつはいいです」

という質問なら理解できる。あるかどうか知らんけど。GTKがあるか。

> Windowsプログラムを作るにあたって、API以外の疑問や質問を
> ぶつける為に作りました。
> 自分もMSの摩訶不思議な規則や仕様(バグ)等に悩まされてます。

摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
にもかかわらずAPI以外という限定は理解できん。

それから >>2 は明らかに WIN32API 逝きだ。

>>21
MFC使いに苛められたのか?

23 :12:02/04/09 01:46
12=14=15 なんだが。
>>21
わしは、仕事の関係でMFCを使用している。既存のコードがMFCなんでね。
その改修をやると仕方なしにMFCを使用せざるえない。

個人では、自作のライブラリーを利用している。

>>22
>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>もかかわらずAPI以外という限定は理解できん
一部同意、確かにほとんどは、APIの実行結果に互換性がなく発生することが
多いな。
 ただ、ヘッダーファイルの構造体の定義の一部変更でおかしくなることもあるね。
わしが最近はまったのは、フリーの3Dライブラリーをわしのライブラリーで
使用としたらリンクが出来なかったことがあった。
リンクできないのは、3Dライブラリーで「#define STRICT」が定義していな
かったせいなのだが、最新のwindows.hでは「STRICT」を使用していない可
能性も考えられる。
そういうことを1は知りたいのではないか?と勝手に憶測するがね。

 















24 :デフォルトの名無しさん:02/04/09 02:07
(余分な改行が説得力の無さを示してるようで…)

25 :1:02/04/09 02:30
>>22
そうですね。スレの趣旨とズレた方向に話を持っていってしまったみたいですね。
スレ立てた本人が、スレの趣旨と違う事を書いてたら駄目ですね…。申し訳ない。

ここのスレの趣旨はAPI以外のWindowsProgramに関する事、全てです。
言語はC/C++で非MFCという事で。別にMFC使いに苛められたい訳では無いです。
…が、書き方がソレっぽくなっちゃいましたね。

今、直ぐに「コレ」といった例が思いつかないのですが、プログラムを
していると、APIの純粋な疑問よりも、バージョンの違いから来る
動作の違いや、定義の違い等がありますよね?

あと、サンプル等ではAPIの動きを説明する為に、それに特化した不自然な
プログラムが載っている事が多々あります。しかし、Windowsプログラムには
独特のクセ等が多く、それを自然なプログラムだと自分で思っていて、後で
それが不自然なプログラムだった事に気付いたりする事は多いのではないでしょうか?

そういう疑問を質問して答える場が無いなー。と思ってスレ立ててみました。
>>2では、「HINSTANCEをどういう風に扱っていますか?」という疑問で
「HINSTANCEをどう取得すれば良いか?」という結果重視の質問ではありません。
その辺が「WIN32 APIスレ」と違う所だと自分で思っているのですが…。


26 :デフォルトの名無しさん:02/04/09 04:05
>>1
MFC使ってるけど、GetWindowLong()使ってるYO!
それ以前にHWND hWnd = GetSafeHwnd();ってやって、Win32APIで処理してる。
単なるラッパならラッパ関数呼ばなくなった分だけ早くなんねーかな? とか思ってんだけど、実際はあまり変わんねー。
でもやる(藁


27 :12:02/04/09 08:32
>>24
ああ確かに、逝って来るわ。


28 :デフォルトの名無しさん:02/04/09 14:11
>>22

>摩訶不思議な挙動はAPIの実装あるいは仕様が引き起こすものだ。
>にもかかわらずAPI以外という限定は理解できん。

漏れが思うに「WIN32API質問箱」の方も定義がいまいちだと思うYO!
例えば、ウィンドウの最大化ボタンとクローズボックスを非表示にして
最小化ボタンだけ表示させたい時に、質問するのは「WIN32API質問箱」か?
質問しても、「WM_NCPAINTを捕まえて自前で処理しろ!」と言われるのが
オチだろう。確かに、そうだけど実際それを実行するのは難しいし
質問者は、むしろ、「どう自前で処理をすれば良いのか?」という疑問に
進む事は当然だろう。しかし、それを質問すると「質問厨」とか言われて
おしまいだろう。

もしかしたら、他の意外な方法(効率とかは抜きで)があるかもしれないし
そういうAPIやメッセージを駆使して実現する事は、APIの質問からズレて
いるような気がする。

ここは、そういう趣旨のスレなのでは?…と勝手に漏れは推測する。
…というか、願う。漏れも、この手の疑問はいっぱいあるから。


29 :デフォルトの名無しさん:02/04/09 14:50
>>22の言う
「C/C++で Windows programming を(略)」なスレなら(・∀・)イイ!。

マイナーな奴でこんなのはどう?

SOL++
http://home.att.ne.jp/green/atlan/sol2000/library.html

Motifにバイアスがかかってる感じのクラスライブラリ。

もう手に入らないけど、ソフトバンクから出てた
「Windows 95 SUPER CLASS LIBRARY」って本に
ついてたやつの最新版みたい。


30 :デフォルトの名無しさん:02/04/09 15:26
>>1に質問だが
GetModuleHandle(NULL);でいけない理由は?
たとえば、ウインドウを持たないdllのインスタンスハンドルを得るにはどうしてる?

31 :1:02/04/09 19:52
>>30
特にGetModuleHandleでは、いけない理由はありません。

…というか、今までグローバル変数を定義して、
渡された瞬間に値を代入してました。Windowsのサンプルプログラムでは
ほとんどが、この方法になってると思います。(Windows APIバイブル等)

しかし、そうじゃなくてGetWindowLongを使った方がグローバル変数なんか
定義しなくても良いんじゃないのか?と、最近思った訳です。

GetModuleHandleですか…。それは気付きませんでした。
確かに、こっちの方がスマートかもしれませんね。
もしかして、GetModuleHandleでHINSTANCEを取得している方って多いんでしょうか?
それとも常識??自分が今まで気付かなかっただけ???


32 :デフォルトの名無しさん:02/04/09 20:37
とりあえず、>>1のコテハンはやめてくれ。


33 :デフォルトの名無しさん:02/04/09 20:53
http://www.asahi-net.or.jp/~cv8t-hdk/fox/fox-doc.ja/fox.ja.html
http://www.fox-toolkit.org/
こういうのは?

34 :デフォルトの名無しさん:02/04/09 20:59
俺は逆にグローバル変数(って実際にはクラスでラップしたメンバー
だったりするが)を見直してる。

昔はグローバル変数等で管理している状態?と実際の状態がバグで
食い違ったり、APIで取れる情報を変数に抑えておくと、同じ情報を
二重に持っているみたいで嫌だったんで、APIで取得できる情報は
変数に押さえるのを極力やめていた...

が、しかし、パフォーマンスがでないんよ。結構頻繁に使用する
情報だったりすると、ちょっとした連想配列使った情報検索
なんかよりAPI呼び出しの方が高価みたい。

が、HINSTANCEは頻繁庭使わんか。

35 :デフォルトの名無しさん:02/04/09 21:49
>>34
普通は頻繁に使う/ループ内で使う値は自動変数に一時的に保存するだろ。

36 :デフォルトの名無しさん:02/04/09 22:00
HINSTANCEのやうなプログラムそのものが持つてゐる性質は、
グローバル變數になつて問題は無い、と思つてをります。

問題となる使ひ方は、処理の簡略化のため、データのやり取りに使ふ、
というやうな場合ではないですか?

37 :34:02/04/09 22:05
>>35
大体においてローカルで済ませられるならそのほうがいいでしょ。

でもwindowsのGUIはメッセージループに戻る必要があるでしょ。
でね、それをウィンドウ矩形毎回取得したり、GetWindowLong使ったり、
IsWindowVisible使ったり...つまりはそういうAPI叩きは遅いって事。

実際には独自HashMapでHWNDと関連づけたデータ構造から状態取得
したほうがえらく速かったという。

MFCとか使ってるならCWnd派生クラスのメンバ変数でも良いが、
MFCはメッセージループからしてとろいからなー。

38 :デフォルトの名無しさん:02/04/09 22:36
>>37
まぁ、悪いとは言わないけどね。
外部アプリから勝手にウインドウスタイル変更されたりした場合に、
内部の状態と食い違いが生じてくるでしょ。

39 :34:02/04/10 01:16
>>38
そうなのよねー、そこらへんが悩みどころ。
性能とのトレードオフっちゅー事でしょーか。
かといって昔の俺の様に、何でもかんでもグローバル
データや情報の二重管理は良くないって思っている人結構
いないですか?

実際にはバグ以外では有り得ないって事は言えないですが、
子ウィンドウが外部アプリで勝手にクローズされたり等
対話アプリとして作っている以上きりがないので
(そんな事コーディングで毎回チェックしてられねーっ
ちゅうねん)俺は使用頻度が高い情報はオフラインキャッシュ
とゆーか、プログラムのメモリに置くのもOKだと思う。

#DBのファイルを稼動中に書き換えて、DBのメモリ内のキャッシュ
とファイル内の情報が食い違うようなものだと思うが。

MSのアプリや市販ソフトも自作アプリからスタイル変更したり
SW_HIDE等しても無視されちゃってるしね-。
#逆に不正操作(チート)防止の為にわざとやってるとしか思えない
様な挙動をしたりして。


40 :1:02/04/10 02:03
>>32
了解です。スレの趣旨がわかった方が少数でもいるみたいなので、
>>1は、ここで消えます。(何か自分に対する質問があれば別ですが)
次回からの自分の書き込みは「デフォルトの名無しさん」という事で…。


41 :デフォルトの名無しさん:02/04/10 02:29
普段からあらゆる状況を想定して、ウインドウが閉じられても自動リカバリしたり、
スタイルもきっちり規定のものに戻すコードを書いているんだが、くどいのかな、やっぱり。

42 :デフォルトの名無しさん:02/04/10 02:53
ウィンドウの属性が実行中に強引に変えられたり
するものは考えなくて良いと思うのだが、
最近、思ったのは「ウィンドウの境界の幅」。
結構、かなりのアプリが対応してない。
今まではデフォルトの幅が1だったけど、
XPのデフォルトの幅が5位(詳細忘れた)になってるので
気付いて慌てて直したアプリも多い筈…。

43 :デフォルトの名無しさん:02/04/10 03:00
> ウィンドウの属性が実行中に強引に変えられたり
> するものは考えなくて良いと思うのだが、

考えろよ… 対した作業量じゃないだろ。
いくつかのメッセージに反応すればいいだけだし。

44 :デフォルトの名無しさん:02/04/10 03:07
>>34-39
俺は、グローバル変数は極力使わない。
なんでもAPI等を使って取得するようにしてる。
確かにパフォーマンスは悪い。

どうしても遅さが気になる時はその部分だけ一時的に
グローバル変数を使用している。
後々、PCのパフォーマンスが上がり、その遅さが
気にならない程度になってきた時にバージョンUPの時等に
APIの取得に切り替える。

そういう切り替えが楽にできるような書き方をしている。


45 :デフォルトの名無しさん:02/04/10 03:13
>>43
いくつかのメッセージと言われてもcase by caseだからなぁ…。
当然、システム標準で変えられるような属性(画面のプロパティ等で)は
対応しないとマズイと思うのだが、それ以外は無視している。
昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
落ちるというバグが報告されたが、無視した。
そんなの、システム標準のツールじゃできない事だし。

>>43の言う「いくつかのメッセージ」というのは例えばどんなんだ?


46 :43:02/04/10 03:17
>>45

> 昔、自分の作ったアプリで、子ウィンドウにWM_DESTROYを投げると
> 落ちるというバグが報告されたが、無視した。
すげーなぁ。そんなこと言ってくる奴がいるのか…
そりゃ無視だろ。

いや俺が言ってるのも、システム標準で変えられるような属性(画面のプロパティ等)
って奴だよ。 >>42の話の中でWindowの幅とか出てたから。

47 :41:02/04/10 03:22
>>45
43じゃないが。
システムでいろ設定を変えたりするとWM_SYSCOLORCHANGEが投げられてくるが、
3D ColorChanger 3000とかを使って色を変えると、
投げられるのはWM_NCPAINTとWM_PAINTだけだったり、

どんなときに変更されるか予測がつかないから、はっきり言って全部に対応するのは面倒だね。
俺の場合は、
WM_PAINT/WM_NCPAINT/WM_NCACTIVATE/WM_NCHITTEST/WM_SIZE/WM_MOVE/WM_STYLECHANGING
でシステムの設定やスタイルをチェックして、さらにタイマーを使って5秒ごとに監視してる。

48 :デフォルトの名無しさん:02/04/10 03:28
>47
随分手が込んでるな。デスクトップマスコット系アプリ?

49 :デフォルトの名無しさん:02/04/10 03:42
>>47
仕事だったら「WM_SYSCOLORCHANGEを投げてこないアプリが悪い」と言って
無視するなぁ。それに対応する為に色々な事やって、パフォーマンスの低下や
新たなバグを生む原因にしたくないし…。

そもそも>>47は、グローバル変数にシステム情報等を格納している方向なのか?
それなら、その位の対応も納得なのだが…。
タイマーは、ちょっと手が込んでる気がするが…(^^;

50 :デフォルトの名無しさん:02/04/10 03:51
>>46
42=45だが、システムで変えられる情報の中でもウィンドウの境界の幅は
今まで、誰も気付かなかったような項目だから…って話だったんだけど
説明がわかりにくくてスマソ。


51 :43:02/04/10 03:59
>>50
そうだったか。要は同じような事を言ってたんだな。失礼しますた。

52 :デフォルトの名無しさん:02/04/10 04:10
>>50じゃないが、確かにウィンドウの境界の幅は今まで1とかだったから
GetClientRectとGetWindowRectの幅と高さの差(高さは結構あるか…)は
そんなに違いが無くて、ウィンドウのサイズ制限するプログラムとかで
GetWindowRectとか、WM_SIZEメッセージで返ってくるLPARAMの
値を使って制限してると問題が出るね。(後者の方は結構多いと思う)

53 :デフォルトの名無しさん:02/04/10 19:20
一般的には、ウィンドウサイズの固定はWM_GETMINMAXINFOでやらない?
それに幅は、GetSystemMetricsで取得すればよいと思うが違うのか。


54 :デフォルトの名無しさん:02/04/10 20:03
>>53
まさに>>50,52の言っていた例のレスだな。
つまり、WM_GETMINMAXINFOメッセージで処理するという事は
LPMINMAXINFO構造体でウィンドウサイズを制御するという事だよね?
その時にptMinTrackSizeに最小値を入れろ…と。
しかし、それではいかんのだよ。わかるかな?>>53よ。
>>50,52の言っている事を良く考えてみよう。
GetSystemMetricsで幅を取得するのも同じだ。

55 :デフォルトの名無しさん:02/04/10 20:44
このスレとAPIスレ統合して、Windows Programming 相談室にしねーか?
どっちも閑古鳥が鳴いてるし

56 :デフォルトの名無しさん:02/04/10 20:45
GetSystemMetricsはokじゃね?

57 :デフォルトの名無しさん:02/04/10 21:03
GetSystemMetricsでウィンドウの幅とかを取得しまくるのもOKだと思うが
素直にGetWindowRectとGetClientRectのサイズの差を求めて、最小サイズに
したい値に、その差とクライアントウィンドウのサイズを足したものにするのが
一番良いと思う。GetSystemMetricsでウィンドウの幅とかを取得しまくると
メニューなんかが2行になった時等に対応するのが辛いよ。

58 :デフォルトの名無しさん:02/04/10 21:04
>>55
別に2つあっても良いんじゃない?

59 :デフォルトの名無しさん:02/04/10 21:05
>55,58
ここが、part2かAPIスレがbuild3になったら、統合しよう。
いつになる事やら…。

60 :戸尾理縋り:02/04/10 21:06
外側の幅に合わしてサイズ計算してたら、
中身が
「小っちぇーよ!(三村調)」
枠幅変更をわざわざ考慮してたものはXP以前にゃ
あまりないだろうということだろう

61 :50:02/04/10 21:08
>>60
そういう事。

62 :デフォルトの名無しさん:02/04/10 21:09
>>57
クライアントサイズとウインドウサイズの差というのは落とし穴があるよ。
たとえば、WS_EX_CLIENTEDGEスタイルを持った子ウインドウを
幅高さともに0で作ると、GetClientRect/GetWindowRectが同じサイズ{0, 0}を返すので、
差が求められない。
実際にこれでハマったことあるし。
#論理レイアウトマネージャにウインドウのサイズの管理を任せたりするときにこれにハマった

じゃぁ、最低いくつで作ればいいのかという話になるが、
それこそボーダーの太さに事実上上限が設定されていないので、
どのサイズで作っても保証が無くなる

それこそ、縦横ともにサイズにずれが生じるまでループするしかない。
もっともほぼ無いと言ってもいいようなレアケースだけどね。

63 :デフォルトの名無しさん:02/04/10 21:12
ってか、この枠の太さって、Win3.0/3.1位の頃から開発してた人は、
きっちりGetSystemMetricsで取ってくるんじゃないか?

64 :デフォルトの名無しさん:02/04/10 21:26
自分はWin3.1から開発してましたが、>>50のように
GetClientRectとGetWindowRectで求めてましたが…。

65 :デフォルトの名無しさん:02/04/10 21:35
SIZEのcx,cyのcって何よ?(マヂで

66 :デフォルトの名無しさん:02/04/10 21:38
coordinate

67 :デフォルトの名無しさん:02/04/10 22:07
サンクス

68 :デフォルトの名無しさん:02/04/10 23:07
システムトレイをいじくるソフトあるよね。
トレイのアイコン取得する方法教えてください。


69 :デフォルトの名無しさん:02/04/11 01:08
みんなはAPIとCRTとどっちが好み?

70 :デフォルトの名無しさん:02/04/11 02:01
好みって何だよ
APIとC-runtimeは包括範囲が違うだろ

71 :デフォルトの名無しさん:02/04/11 02:17
結局ここはMFC or API以外のWindows Programingスレになったの?

こんなの見つけたからage
http://www.fltk.org
かなりマルチプラットフォーム化されてるしGUIビルダもある
Qtはでか過ぎてイヤンという人にお勧めできるんじゃなかろうか
ちなみにC++

72 :デフォルトの名無しさん:02/04/11 02:20
本来はWindowsプログラムをする上でのドキュメント化されていないノウハウを語りたかったんじゃないの?

73 :69:02/04/11 02:36
>>70
いやー、結構重複してる部分あるじゃない。
 CreateFile ≒ open
 CreateProcess ≒ execXX
   …
ぼくはAPI派なんだけど、害虫さんはCRT派でね、
ちなみにGUIアプリでWin以外への移植は無しなの。

どっちが多数派かなーって思って。

74 :デフォルトの名無しさん:02/04/11 02:43
どうしても実行ファイルのサイズを小さくしたい場合、
細かくアクセスコントロールを行う場合など、
特殊な状況じゃなければ標準ライブラリを利用する。

APIを使うと引数の数が平気で10個あったり、
いちいち構造体使ったり面倒だから。



75 :デフォルトの名無しさん:02/04/11 02:49
誰かに渡したりするのはCRTの方が良いと思うが
それ以外はAPIを使ってるなー。長年Windowsプログラムをしてると
ある程度のパターンができてくるから、APIの引数とかも気にならないし…。
ところで、HINSTANCEの話がでてきて思ったんだけど、グローバル変数を
使ってる場合は、他にはどんなグローバル変数を使ってる?

漏れは…ウィンドウクラス名とかかなぁ…。

76 :デフォルトの名無しさん:02/04/11 02:51
グローバル・・・
システムの情報は格納しないな。
アプリケーションの設定を専用クラスでグローバルに置くくらいかな。
文字関係は全部リソースに置いておくし。

77 :デフォルトの名無しさん:02/04/11 03:25
素朴な疑問。
なんでウインドウクラス名ってグローバル変数なの?
どの本見てもそうなってるけど。
まだ本格的にWin32やってないから、これがグローバルである意味が
よくわかんない。
知ってる人いたら教えて。

78 :デフォルトの名無しさん:02/04/11 03:30
その方がお気楽だから。
まぁ、defineでもいいんだけどね。

79 :デフォルトの名無しさん:02/04/11 15:25
>>77
別にローカル変数でもいいよ?
つーかそれよりRegisterClass呼んでるのに
なんでUnregisterClassは呼ばないのか疑問。
別に

80 :デフォルトの名無しさん:02/04/11 15:33
>別に
余分だった。


81 :デフォルトの名無しさん:02/04/11 23:35
mallocしたのをfreeしないでexitだな

82 :デフォルトの名無しさん:02/04/11 23:46
なんでMFC以外のWindows ProgramingでVCLが
一度も出てこないんだ、ゴラァと言ってみるテスト


83 :デフォルトの名無しさん:02/04/12 00:11
>>79
必要ないから。
プロセス終了時に解放されることが保証されている

84 :デフォルトの名無しさん:02/04/13 15:53
最近むかついてしょうがないんですけど、
LoadImageやCreateWindowはウィンドウズヘッダ内でマクロとして定義されてるんですよね。
だからメンバ関数にLoadImageなんて名前付けるとLoadImageAに変わってしまったり、
CreateWindowなんかコンパイルエラーになってしまいます。
何でインライン関数使わないんだよぉ!
何のための名前空間、何のためのクラスだと思ってんだ。

85 :デフォルトの名無しさん:02/04/13 15:57
Ruby >>>>>>>>>>>>>>C++

86 :デフォルトの名無しさん:02/04/13 16:01
>>84
元々C互換APIだから。
C++でもっとも顕著なのは、STLのstd::min/maxかな。

それから、LoadImageなんてセンスのない名前付けるな

87 :旧MS-Cユーザ:02/04/13 16:05
LoadImageの方がinline、namespaceより古いから。
名前空間なんかつい最近できたばかりじゃないか。

88 :デフォルトの名無しさん:02/04/13 17:31
気持ちはわかるが、>>84は自己中なやつなのだろうな。

89 :デフォルトの名無しさん:02/05/01 17:56
age

90 :ショシンs:02/05/02 01:43
ウィンドウ内に自分でボタンのようなものを作りたいと思い
メッセージプロシージャ関数内の
case WM_LBUTTONDOWN:
の下で現在のマウス位置を取得して
そのあと条件式で自分が指定した矩形領域内でボタンが押されたならば
という形でボタン機能を実現したいと思っているのですが
マウス位置を取得する関数がよくわかりません。
それともlParamかwParamを使えば同じことができるのでしょうか

91 :デフォルトの名無しさん:02/05/02 01:45
WM_LBUTTONDOWNメッセージを調べてみる
GetCursorPosを調べてみる

92 :ショシンs:02/05/02 03:52
アドバイスありがとうございます
最初
case WM_LBUTTONDOWN:
LPPOINT MSpoint;
long msx,msy;
GetCursorPos(MSpoint);
msx=MSpoint->x;
msy=MSpoint->y;
とやったらGetCursorPosの時点でエラーが出てシャットダウンしてしまいました。
その後いろいろと調べたところ
int x,y;
x=LOWORD(lParam);
y=HIWORD(lParam);
とやったらうまくいきました。
とりあえず解決できたのですがなんか複雑な気分です。

93 :デフォルトの名無しさん:02/05/02 03:53
なめてんのか?

94 :ショシンs:02/05/02 03:58
いや、なめてないですよ。
DirectXの勉強を始めたばかりのものでしていまだ使えこなせずにいます。やっぱひとつWINDOWSAPIの説明がいろいろと書いてある本を
買ったほうがいいのですかね。

95 :デフォルトの名無しさん:02/05/02 04:23
マジレスするとNE
>LPPOINT MSpoint;
>GetCursorPos(MSpoint);

POINT MSpoint;
GetCursorPos(&MSpoint);
じゃないとだめだYO

それと、GetCursorPosはそのときのカーソルの位置を
かえすけど、lParamはボタンの押された位置がかえるYO
若干ちがくなることがあるので気をつけてね。
あとクライアント座標とかスクリーン座標とかにも気をつけてね。

>WINDOWSAPIの説明がいろいろと書いてある本を
>買ったほうがいいのですかね。
あとDEEPなCの本もNE

96 :デフォルトの名無しさん:02/05/02 06:21
>あとDEEPなCの本もNE

いつから、ポインタの基礎・FAQが、DEEPなCの本の扱いに
なったのでしょうか。私は、日本のソフトウエア業界の
逝く末を心配したくなりました。

97 :デフォルトの名無しさん:02/05/02 07:38
でたよC厨、
くだらないことで話し広げようとしないでくれる?
C厨が集まっちゃうとスレが死ぬから。

どうせ広げるなら、
「GetMessagePosとかもあるYO。とか」
「これを使えば、コントロールからの通知とかでもちゃんとした
座標が取れる?」とか技術的なコトにしてクンナイ?

98 ::02/05/02 13:39
win32sdkで
まず、メモリ上に描写を行って、そのあと1度に画面に表示させる。
方法を教えて、

99 :t=98:02/05/02 13:40
>>DirectX は除く

100 :デフォルトの名無しさん:02/05/02 13:42
>>97
GetMessagePosなら、lParamの方がよっぽどいい。

101 :デフォルトの名無しさん:02/05/02 13:46
>>99
んじゃ、GDIでやれ。

RECT ClientRect;
::GetClientRect(&ClientRect);
HDC WindowDC = ::GetDC(hwnd);
HDC MemDC = ::CreateCompatibleDC(hdc);
HBITMAP BackBuffer = ::CreateCompatibleBitmap(WindowDC, ClientRect.right, ClientRect.bottom);
HBITMAP OriginalBmp = static_cast<HBITMAP>(::SelectObject(MemDC, BackBuffer));

::DeleteObject(::SelectObject(MemDC, OriginalBmp));
::DeleteDC(MemDC);
::ReleaseDC(WindowDC);

102 :t:02/05/02 13:49
>>101
それ、面倒なのでもっと簡単な方法教えてください

103 :t==98:02/05/02 13:51
>>101
thanks

104 :デフォルトの名無しさん:02/05/02 21:20
CreateDIBSection、とかもあるけど?

105 :デフォルトの名無しさん:02/05/03 11:35
age

106 :デフォルトの名無しさん:02/05/04 20:30
age

107 :デフォルトの名無しさん:02/05/04 20:42
>>102

一番簡単なのはDIB。メモリ上に任意の形式(32bppが扱いやすい)で
フレームバッファを作成して、あとはBITMAPINFO構造体とともにGDI
(SetDIBitsToDevice/StretchDIBits)に渡せば描画できる。


108 :デフォルトの名無しさん:02/05/05 14:20
現在Windows向けの言語を作っているのですが、
構造体のアラインメントの規則に関する情報ってどこかにないですか?

109 :デフォルトの名無しさん:02/05/05 14:23
>>108
Intel のサイトに行って、プロセッサのデータシート見るべし。

110 :デフォルトの名無しさん:02/05/05 14:31
>>109
アラインメントじゃなくてパディングって言うのかな?
構造体の中に入る詰め物の情報が知りたいのです。
全部、pack1を期待してもいいのかな、と思いまして。

111 :デフォルトの名無しさん:02/05/05 14:47
>>109
その程度の知識で、言語を作る...。何でアライメントするか知ってるか ?

112 :デフォルトの名無しさん:02/05/05 14:57
>>111
誤爆?
SSEとかで16byte alignを要求する命令があるてのは知ってますが。
どうしてとかそんなことはあんまり気にしたこと無かったです。

で、今回のはアラインメントとは違ったみたいだけど、
>>110に書いたような構造体の詰め物について知りたいんです。
構造体を引数に取るAPIがどんな並びを期待しているのか。
MSDNを眺めてみたけど、メモリ配置についての情報が、
関数呼び出しの引数などのスタックについてしか見つけられなかったので、
規則がどこかに書いてないのかな、と。

ユーザーdllでは(VCを使った方法しか知りませんが)
#pragma pack(1)
とかでパディングを0にしている物とか、デフォルトのまま利用している物とか、
いろいろあるので、少なくともWindowsのAPIについてはドキュメント化されてないのかな
って思ったわけです。

113 :デフォルトの名無しさん:02/05/05 15:07
>>112
ならはじめからそう書いてくれ。言語を作ろうとする奴が、アライメントの
必要性も知らないのはちょっと痛いぞ。まあ、スクリプト言語ぐらいなら
いいのかも知れんがな。

普通、構造体を引数にとる API は、パディングが入らないように構造体を
宣言している。

114 :デフォルトの名無しさん:02/05/05 15:10
>>113
ありがとうございます。
PlatformSDKのヘッダを機械翻訳するしかないのかなって思ってたのですが、
いろいろ問題がありそうだったので。

言語と言っても、cへのトランスレータなので、
PCのアーキテクチャについてはあんまり詳しくなくてもいいとか勝手に思ってるんです。

115 :デフォルトの名無しさん:02/05/05 15:22
>>114
Win32 API 使おうと思うなら、それ(C のパーサー)は用意した方が良いと
思うぞ。

116 :デフォルトの名無しさん:02/05/05 23:00
>>84

古い話題ですが。


API関数
ナニをアレする();

クラスのメンバ関数
class ナニ {
アレする();
};

ぶつかりようがない。ふつうは。


117 :デフォルトの名無しさん:02/05/05 23:30
引数も異なるからなかなかぶつからないね。

windows.hがnamespace全然考えてないのは別問題だが、
歴史的経緯というやつでほがもげ

118 :デフォルトの名無しさん:02/05/07 18:08
age

119 :デフォルトの名無しさん:02/05/07 18:56
>>116 は、ちゃんとまともなこと言ってるのに、>>117 の知ったか厨房が
台無しにしてるな。

120 :デフォルトの名無しさん:02/05/07 21:26
>>1116
漏れ、興奮してきたYO!!!

121 :デフォルトの名無しさん:02/05/11 00:35
あげ

122 :デフォルトの名無しさん:02/05/11 00:56
1116のレスに期待age

123 :デフォルトの名無しさん:02/05/11 08:38
>>116
十分ぶつかるよ。
Abstruct FactoryなんかじゃCreateWindowは当たり前に使うし。

124 :デフォルトの名無しさん:02/05/11 13:26
VC++ 使って CPU 使用率を取得してみようと↓のページの DispTime() を
コピペして main() から呼び出してみたんだが:

http://tokyo.cool.ne.jp/masapico/api_sample_pdh03_c.html

int main(void){
 DispTime();
  return;
}

今度はプログラムが終了しなくなってしまった。ブレークかけてみたら
exit(int) ⇒ dosexit(int,int,int) ⇒ KERNEL32 の中で止まってるみたい。
何か終了処理とか必要なのかな。それとも何かコンパイルオプションが必要?

環境は WinXP Pro, VC++ 6.0 で Win32 Console Application プロジェクトを
新規に作っています。原因分かる人居られますか?

125 :デフォルトの名無しさん:02/05/11 17:41
int main()なのに値を返してないから?(ちょっと自信ない)

126 :116:02/05/11 22:28

>>119
別に117はおかしくないんじゃない?
元の話にはあってないと思うけど。

>>123

いや。俺はそうゆうので困ったことないってだけで、
ぶつかるってんなら文句ゆうつもりはないんだけど...

staitc Window* Window::Create();

なんて書き方じゃ出来ない事をおやりになってるんでしょうねえ。


127 :デフォルトの名無しさん:02/05/11 23:17
static WindowFactory::CreateWindow()
なんでないの?(藁

128 :デフォルトの名無しさん:02/05/12 06:05
C++使ってるならグローバル関数は1つも使う必要がない。
よって::LoadImageでオケ。

129 :デフォルトの名無しさん:02/05/12 06:15
>>124
Win2000ですが、全然問題なしですた。

130 :デフォルトの名無しさん:02/05/12 06:15
俺がやったときは

struct IEditor
{
 virtual IWindow* CreateWindow() = 0;
 virtual IDocument* CreateDocument() = 0;
 // 以下略
};

でぶつかったよ。

131 :デフォルトの名無しさん:02/05/12 06:19
>>128
mainもでつか?

132 :デフォルトの名無しさん:02/05/12 09:32
>>128
sprintf() とか sqrt() とかも使わないのですか?

133 :デフォルトの名無しさん:02/05/12 11:22
LoadImageみたいなのはグローバル関数って言わないの?
(LoadImageがマクロなことはおいといて)

134 :124:02/05/12 12:52
>>125
すまん、たった 4 行だったので油断して鬱氏間違えた。

return EXIT_SUCCESS;

>>129
どうもありがとう。やっぱり XP なのかな。

135 :デフォルトの名無しさん:02/05/13 03:13
>>131-132
文脈からわかれ。
自分で作る必要がないということだ。
よって少なくとも、自作ライブラリと衝突する可能性はない。

136 :デフォルトの名無しさん:02/05/13 05:16
俺は自作クラスのメソッド名は動詞部分を小文字にしてる。
まあAPIとぶつかることはないだろうし。
loadImage
createWindow


137 :デフォルトの名無しさん:02/05/13 06:24
それはちょっtJavaっぽくてダサイかも

138 :デフォルトの名無しさん:02/05/13 07:37
その命名法キモイ


139 :デフォルトの名無しさん:02/05/13 07:37
らくだキモイ

140 :デフォルトの名無しさん:02/05/13 07:40
>>136
おれもおれも(゚∀゚)
ハッタリッシュ大好きなので(笑

あそこ、もう更新ないのかなぁ…。

141 :デフォルトの名無しさん:02/05/18 21:30
>>124
「おー、そんな物もあるんだー」と気になって
自分も試してみたが、
リンカがエラーを吐いてくれた。
#include <pdh.h>はしたんだけど
他にも何か必要なの?

えらーとは
test.obj : error LNK2001: 外部シンボル "_PdhCloseQuery@4" は未解決です
とかいう奴が5個ほどです。


142 :デフォルトの名無しさん:02/05/18 21:52
age

143 :デフォルトの名無しさん:02/05/18 22:05
pdh.lib

なんでライブラリを知らない奴がこんなに多いんだ?
あっちこっちのスレで似たような質問があるが

144 :デフォルトの名無しさん:02/05/18 22:08
win32 apiスレに行けば済む話だと思うんだが、なんでこんなところで
やってるんだろうね。

145 :141:02/05/18 22:10
>>143
すんまそん。それは自分がドキュソだからだと思います。

ちなみに、色々と検索しているときにこんな物見付けました。
>>124さんには役立つでしょうか?
http://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2fJAPAN%2fsupport%2fkb%2farticles%2fjp312%2f1%2f13.ASP


146 :124:02/05/31 19:11
>>145
サンクス。環境的に多分それが当たり。
Win2k でやってみたけど、今度は終了時の kernel32 で Access Violation だと… (鬱


147 :デフォルトの名無しさん:02/05/31 19:22
windows2kのコマンドプロンプトで cl.exeを使ってCのコンパイルをしています。
main()でエラーとか正常終了の戻り値を1とか0とか設定してますが
このmain()に戻った値を確認するためにはどうしたらよいでしょうか?


148 :デフォルトの名無しさん:02/05/31 19:25
>>147
C:\hoge> echo %ERRORLEVEL%

149 :デフォルトの名無しさん:02/06/01 13:10
>148
うまく行きました。
どうもありがとうございました。

150 :デフォルトの名無しさん:02/06/10 07:29
WTLって使ってるやつおる?
どっかにいい解説ない?

あれはソースが読めないやつは使うなということなのか...

151 :デフォルトの名無しさん:02/06/10 07:51
つかったYO.
でも僕のパソンコんてね、すごく遅いからね、
コンパイルンにイパイ時間がかかて、モウ使わないもアン
っておもったYO!

152 : ◆namco08. :02/06/10 17:01
>>150
俺は WTL 使ってるけど。

> あれはソースが読めないやつは使うなということなのか...
そんな気がする。

CWindow, CWindowImpl とかは ATL の範疇なので、書籍「ATL インターナル」
とか MSDN Library に解説がある。あとは WTL のウィザードにソースを吐かせ
て、それを読みつつお勉強、でした。

153 :デフォルトの名無しさん:02/06/10 19:43
if (!GetMessage(&msg, NULL, 0, 0))
 return msg.wParam;

if(msg.message == WM_QUIT)
 break;

どう違うんですか?

154 :デフォルトの名無しさん:02/06/10 19:52
>>153
GetMessageするか、何もしないでMSG構造体を覗くか

155 :デフォルトの名無しさん:02/06/10 20:06
>>153
どうでも良いが GetMessage() はエラー時に -1 を返すので

 !GetMessage()

だと無限ループにハマる可能性があるぞ。

156 :デフォルトの名無しさん:02/06/14 11:43
Windowsプログラムするときのプログラムの仕組みを教えてください。
メッセージがきて、それに対応するメンバ関数が呼ばれて、メンバ関数で動作を決めて、
みたいなWindowsプログラムのロジックを教えてください。
よろしくお願いいたします。

157 :デフォルトの名無しさん:02/06/14 17:34
使用しているWindowsのバージョンを返すWin32APIなんてありますかね?
こういうのって普通どうやって調べるんですか?レジストリ?

158 :デフォルトの名無しさん:02/06/14 17:37
GetVersionInfoExダッケ

159 :デフォルトの名無しさん:02/06/14 17:39
_windver
GetVersionEx()


160 :157:02/06/14 17:41
うおっ即レスありがとうございます!!

161 :デフォルトの名無しさん:02/06/14 22:13
>>156
とりあえず Petzold 本を熟読。

162 :デフォルトの名無しさん:02/06/14 22:15
>>156
メンバ関数って言葉が出る当たり、少々誤解してるな。

コントロールはwindowだ。 CreateWindow( )で作ることが出来る。
作ったコントロールは SendMessage( ) 等で操作することが出来る。例えば
SendMessage(editbox_hwnd, WM_UNDO, 0, 0); // edit_box を Undo させる
という感じで。

メッセージは親Windowに届く。届いたメッセージを、if / switch で
分岐させて、処理を行う。例えば
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message){
        case WM_COMMAND:
            switch(LOWORD(wParam)){
                case BUTTON1:
                    // BUTTON1を押したときの処理
                    break;
                case BUTTON2:
                // 以下略

MFC等は、この CreateWindow, SendMessage, 巨大に成るswitch を
ラップしたものだ。
メンバ関数がどうとか言うのは、ラップした後のものについての考えで、
基本的にはもっとフラットな実装だぞ。

163 :デフォルトの名無しさん:02/06/14 22:20
このスレにいる人たちは、MFCなんて馬鹿らしくて使いませんか?

164 :デフォルトの名無しさん:02/06/14 22:21
>>163
便利だとは思うがプログラミングスタイルを固定されるのが好きくない。
OWLの方が良いね。その点では。

165 :163:02/06/14 22:23
>>164
早速ありがとうございます。
しかし、スタイルが固定されるとはどういうことですか?
M$の方言に悩まされるとかでしょうか?

166 :デフォルトの名無しさん:02/06/14 22:25
>>165
ドキュメントビューアーキテクチャとか。
最近は外せるけど。
後、初期化のタイミングが複数あってくはぁ・・・。

167 :デフォルト名無しさん:02/06/14 22:26
ここに書いてもいいのかよくわからないのですが、
いろいろやっていたらコマンドプロンプトの表示がすこし変になってしまいました。
\が/と表示されてたりアルファベットもどき(a等の上に変な印)が表示され、
日本語が表示できなくなったりしました・・・
戻すことはできますか?


168 :デフォルト名無しさん:02/06/14 22:27
いろいろやっていたらコマンドプロンプトの表示がすこし変になってしまいました。
\が/と表示されてたりアルファベットもどき(a等の上に変な印)が表示され、
日本語が表示できなくなりました・・・
戻すことはできますか?

169 :163:02/06/14 22:29
>ドキュメントビューアーキテクチャとか。
OWLなら関係ないようですが、MFCならこれは確かにそうですね。
初期化はInitInstance()とかですか。
まだまだ私は修行が足りません。


170 :デフォルトの名無しさん:02/06/14 22:37
>>167-168
おもいっきり板違いだが、他の板やスレを汚されても困るので、答えてやろう。
jp[enter]
これで直る

171 :デフォルトの名無しさん:02/06/14 22:45
>>163
MFCは、CStringを要求するので嫌い。
stlと親和性の高いライブラリがあれば使うかも。

172 :デフォルト名無しさん:02/06/14 22:50
>>170
現在のコードページ:932
と出て一時は直るのですが、
一度プロンプト閉じてもう一度起動すると
元に戻ってます。永続的にはできないのでしょうか?
スレ違いすみません。

173 :デフォルトの名無しさん:02/06/14 22:50
class StdString : public CString, public std::string {};
これ使え

174 :デフォルトの名無しさん:02/06/14 22:51
>>172
コマンドプロンプトのプロパティを開いて、
オプションタブの現在のコードページで932を選択。

175 :デフォルト名無しさん:02/06/14 22:54
>>174
ありがとうございます。直りました。
本当に感謝します。

176 :デフォルトの名無しさん:02/06/15 15:33
ユーザーのドラッグによるWindowサイズの変更をなくしたいのですが、どのようにすればよろしいのでしょうか。
よろしくお願いします。

177 :デフォルトの名無しさん:02/06/15 15:38
hit

178 :デフォルトの名無しさん:02/06/15 15:49
>>176
そういうwindowを作るか、サイズが変更されたらすぐさま戻す。

自由な形のwindowってどうすればいいんでしょうか?
たとえば文字の形とか。

179 :デフォルトの名無しさん:02/06/15 15:50
SetWindowRgn

180 :デフォルトの名無しさん:02/06/15 15:51
>>178
リージョン切ってSetWindowRgn()

181 :因幡:02/06/15 16:12
>>179,178
どうもですわ。


182 :デフォルトの名無しさん:02/06/15 16:15
VC++では標準C++ライブラリは日本語で見れないのですか?
英語読むしかないですか?


183 :182:02/06/15 16:17
VC++.netです。

184 :デフォルトの名無しさん:02/06/15 16:24
>>182
恐らくC++言語で見られると思います。

185 :デフォルトの名無しさん:02/06/15 18:02
>>182
VC++を使って標準C+;+を見ることはできません。

186 :デフォルトの名無しさん:02/06/15 19:22
MSDNの2002/4には
Standard C++ Library Reference
というリンクがあるのですが、そこの先が英語なのです。
日本語で書いてあるページはないのですか?
探してないからないのか...

187 :デフォルトの名無しさん:02/06/15 19:54
>>186
−・


VC++では標準C++ライブラリは日本語で見れないのですか?
英語読むしかないですか?

      | |
      | |

MSDNの2002/4には
Standard C++ Library Reference
というリンクがあるのですが、そこの先が英語なのです。
日本語で書いてあるページはないのですか?
探してないからないのか...

188 :デフォルトの名無しさん:02/06/15 22:26
>>187
なんでやすか

189 :デフォルトの名無しさん:02/06/15 23:09
>>178
> そういうwindowを作るか、サイズが変更されたらすぐさま戻す。
WM_MINMAXINFO 捕まえて、ウィンドウサイズを上書きするのがスマート
だと思う。これだと描画されないし。

190 :デフォルトの名無しさん:02/06/16 00:22
WS_DLGFRAMEとかで作る方がスマートだろ。
制限じゃなくてサイズ変更不可なんだから。

191 :KK:02/06/18 00:20
Visual C++ 6.0(SDK) / Windows98SE でプログラム作ってます。
みなさん、メモリリークとかの対策はどのようにやってますか?

Purify と BoundsChecker 以外のメモリリークを検出できるツールを
紹介してください。プロセス&スレッドの表示ツールならフリーであるん
ですが、メモリリークまで検出できません。


192 :デフォルトの名無しさん:02/06/18 00:29
>>191
_CrtSetDbgFlag()

193 :デフォルトの名無しさん:02/06/18 00:33
なんでPurifyやBCじゃダメなの?
漏れはBCを激推奨するが。

194 :デフォルトの名無しさん:02/06/18 00:46
>>193
もってないからでわ


195 :KK:02/06/18 01:30
>>192
ソフトウェアを使うのではなく、プログラムに関数を組み込んで
調べるのですね。どうもありがとうございます。

>>193-194
2〜3万円台の買い求めやすいシェアがあるのかと思いまして。
WWWで一応調べたんですが、適当なのがありませんでした。

今はBCの体験版をDLして使っていますが、個人で購入するとなると
やっぱり高くつきます。Purify:120,000円 BC:80,000円
会社とか研究室で買うならともかく。


196 :デフォルトの名無しさん:02/06/18 01:54
しかし、BCもPurifyも高いな。
これらを長く使っていると、自然とリークするコードをあまり書かなくなってくるので、
出番も少なくなってくる。
まぁ、万が一のために持っておくのは良いことだが。
VS.NETとかBCB/DelのProを買うなら、バージョンを一つ飛ばしてでもBCを買っておくと良いと思うが、
そもそも.NETへの転換期なので有効活用できるかどうかは微妙かも。

197 :KK:02/06/18 02:33
>>196
貴重な意見ありがとうございます。

> これらを長く使っていると、自然とリークするコードを
> あまり書かなくなってくるので出番も少なくなってくる。

ただ、最初のうちはどの箇所に問題があるのか見当もつきません。
慣れれば自ずとなくなるありきたりなミスがほとんどだと思うのですが。

作成したプログラムをBCの体験版でチェックしてみたところ、HBRUSHに関連する
コードに問題があり、リソースリークを起こしていました。
これもWWWを調べたらすぐに見つかりました。

> そもそも.NETへの転換期なので

VC++に固執しないで、色んな開発環境を試してみるのもいいですね。


198 :デフォルトの名無しさん:02/06/20 18:18
TCP/IP通信をするプログラムを書きたいんですけど、いい解説ページを知りませんか?
書籍紹介、言語違い、OS違い、あるいはMFCなページは簡単に見つかるんですが。

199 :>198:02/06/20 18:20
WinSock2.0の書籍はだめなんですか?
VC++スレの紹介書籍では?

200 :デフォルトの名無しさん:02/06/20 18:27
ただで済まそうとせずに、本買えや。

201 :デフォルトの名無しさん:02/06/20 18:28
>>199
それはそうなんですけど、貧乏臭くとりあえず聞いてみました。

まあ、Webにまとまった資料が無いようなら、とりあえず気合で情報集めて
気合でエラーメッセージ読んで、それでもダメなら書籍を買います。

202 :デフォルトの名無しさん:02/06/20 18:34
WinSock2.0の書籍買ってきたけど、あれってかなり前のものなんですよね。
WinSockはあれくらいしか見ないから、あれは本当に定番なんだと思う。
EmuTermの作者が書いたのだから損はないと思うけど?

203 :198:02/06/20 21:44
全会一致で買え、ですね。どうもありがとうございます。
下手に(V)C++の知識とネットワークの知識があると、その中間を埋める書籍の金が惜しくなって。

何とかなるさ、とサンプルを読みつつWinSock2でデタラメにプログラムを
組み始めたのはいいが、DirectPlayの存在に気づく。
どんなものか殆ど知らないけど、元プログラムがDirect3D使っているので
使ってもいいかなと思ったり……。徐々にスレ違い。
(ボヤキsage。でも何かアドバイスあったらありがたく頂きます)

204 :デフォルトの名無しさん:02/06/20 21:53
>>203
この人、デムパだね。


205 :デフォルトの名無しさん:02/06/20 23:15
>>204 暇そうだね

206 :デフォルトの名無しさん:02/06/20 23:51
つーか、何でSocketの本なんて買うんだ?
普通のsocketの使い方+初期化&終了(WSAStartup/WSACleanup)だけっしょ?

207 :デフォルトの名無しさん:02/06/27 17:43
>>206
WinSockは、ブロッキングとかいうややこしぃ問題があるから
普通にはいかないと思うが。

208 :デフォルトの名無しさん:02/07/14 20:01
保守には安芸が一番

209 :デフォルトの名無しさん:02/07/15 10:03

質問です。

MFC, WTL の CString と、 std::basic_string<TCHAR>
は、どちらのほうが使い勝手がいいですか?

210 :デフォルトの名無しさん:02/07/15 11:31
basic_string。
STLのアルゴリズムと組み合わせ安い

211 :デフォルトの名無しさん:02/07/16 11:09
>> 210

ありがとう。

57 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)