■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build21
1 名前:デフォルトの名無しさん :04/07/22 00:05
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
ただし、最新スレくらいは質問する前に検索してくれ。というかしろ。

過去スレなどのリンクはたぶん>>2-5くらい

2 名前:デフォルトの名無しさん :04/07/22 00:06
- 過去スレ
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様


3 名前:デフォルトの名無しさん :04/07/22 00:06
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm


4 名前:デフォルトの名無しさん :04/07/22 00:06
>>2-5
(ノ∀`)アチャー

5 名前:デフォルトの名無しさん :04/07/22 01:03
>>1
おつ

6 名前:前991 :04/07/22 02:24
>>前994
ありがとうございました。
しかし2のウィンドウシェードについてはできたのですが、ウィンドウを
移動不可にする方法についてもう少し詳しくお教え頂けないでしょうか。
WM_WINDOWPOSCHANGINGをアプリケーションが処理するならば
0を返すようにとPlatformSDKのドキュメントには書かれていたのですが

case WM_WiNDOWPOSCHANGING:
 return 0;

では移動してしまいました。


7 名前:デフォルトの名無しさん :04/07/22 02:29
>>6
それ、処理してない。

8 名前:前991 :04/07/22 02:32
すいません、とんでもない勘違いでした(汗
送られてくるWINDOWPOS* lParamに対して処理を加えてbreakですね。
申し訳ないです。


9 名前:デフォルトの名無しさん :04/07/22 04:49
>>前スレ974
>WM_NCHITTESTかな?
できました!感謝

Q:
システムボタンをdisableやgrayedにして機能しなくしても、
これだとボタンの上でクリック(ドラッグ)すると、放すまで制御が
WINMAINに戻ってこないんですよね。
ボタンを押されてもMAINのコードが止まらないようにしたい。

A:
WM_NCHITTESTをトラップすればOK

10 名前:デフォルトの名無しさん :04/07/22 10:57
DrawEscape()って、使い道ある?
何のために使うの?


11 名前:デフォルトの名無しさん :04/07/22 11:23
test test


12 名前:デフォルトの名無しさん :04/07/22 12:10
エディットボックスに入力されたキーのうち
特定のキーの入力を無効にしたいと思っています。

エディットボックスをサブクラス化して、WM_KEYDOWNで
例えば 'A' を捕まえた時に、0を返してみました。
しかし上手くいかず、エディットボックスにAがそのまま入力されてしまいます。

キー入力を無効化するには、どうすれば良いのでしょうか。

13 名前:デフォルトの名無しさん :04/07/22 12:23
('A')

14 名前:デフォルトの名無しさん :04/07/22 12:29
>>12
WM_CHAR

15 名前:12 :04/07/22 12:45
>>13
書いたとき少し思いました。

>>14
やった、できました!
謎ですが、WM_KEYDOWNを殺しても、WM_CHARは発生してしまい、
そしてエディットボックス内部で処理されているのはWM_CHARということなのでしょうか。

いずれにせよレスありがとうございました。助かりました。

16 名前:デフォルトの名無しさん :04/07/22 16:24
windowsx.h
ってのは、標準と思っていいのですか?
GetStockBrush()とか、便利なんだけど。


17 名前:デフォルトの名無しさん :04/07/22 16:30
むしろ使用を推奨されてた気がするが > windowsx.h
メッセージクラッカーとか。

18 名前:デフォルトの名無しさん :04/07/22 18:56
デバッグビルドの時には何も起きないのに、リリースビルドにして
引数付きのDLLの関数を、GetProcAddressで呼び出して使うと
「問題が発生したため、XXX.exe を終了します。 ご不便をおかけして申し訳ありません。」
がでてエラーになります
どうしたらいいですか?

19 名前:デフォルトの名無しさん :04/07/22 18:57
>>18
そういう場合、http://www.cmagazine.jp/src/kinjite/c/variable.html←このへんのどれかをやっちゃってる事が多い。

20 名前:デフォルトの名無しさん :04/07/22 19:00
ダイアログベースのプログラムの欠点って何ですか?
欠点がないならGUIが簡単に作れるから全部ダイアログベースで書いちゃえばいいと思うんですが。

21 名前:デフォルトの名無しさん :04/07/22 19:09
>>19
そのページみてvolatileを付けまくってみたらできました
ありがとうございました

22 名前:デフォルトの名無しさん :04/07/22 19:23
と思ったらデバッグビルドになっていて出来ていませんでした

23 名前:デフォルトの名無しさん :04/07/22 19:26
>>20
そうですね。
その通りになさればよろしいと思いますよ。


24 名前:デフォルトの名無しさん :04/07/22 19:35
ダイアログだって、ウィンドウの面倒な部分をかなりラッピングしただけなんだから本質的な違いは無いでしょ

25 名前:デフォルトの名無しさん :04/07/22 20:12
>>20 そういう話はこっちでどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1049790146/

26 名前:デフォルトの名無しさん :04/07/22 22:03
>18 >19 >21 のやり取りを見て疑問に思ったんだけど、
Winだとスレッドやプロセスが切り替わってもレジスタの値は
保存して保護されるんじゃないの?
じゃないと全ての変数にvolatileつけなきゃならないと思うんだが。

27 名前:デフォルトの名無しさん :04/07/22 22:13
>>26
そんなことは当然だがお前はナニを勘違いしてんだ?

28 名前:デフォルトの名無しさん :04/07/22 22:34
>>26
スレッド・プロセスの切替時にレジスタの内容が保存される先は
元の変数のあった場所ではなく、全く無関係な場所。

29 名前:デフォルトの名無しさん :04/07/22 23:00
>>28
レジスタ自体関係ねえよ
馬鹿に馬鹿な回答するなよ

30 名前:26 :04/07/22 23:19
あぁ確かにかんちがいしてたわ、すまん

31 名前:デフォルトの名無しさん :04/07/22 23:21
そもそも、なんでvolatileで解決しようと思ったんだろ…

32 名前:デフォルトの名無しさん :04/07/22 23:21
SHGetFileInfo()のSHGFI_ICONLOCATIONフラグって正常に機能してます?
関数自体は成功してるみたいなんですけど、
szDisplayNameには何も格納されないし・・・。

この現象について知識をお持ちの方、教えて下さい。

33 名前:デフォルトの名無しさん :04/07/23 00:49
>>31
スレッドでも使ってたんじゃないか。

volatile付いたせいでコードが変化しただけで、潜在バグは残ってると思うけどね、俺は。

34 名前:デフォルトの名無しさん :04/07/23 00:55
いや、21と22は連続してると思うんで、潜在どころかこれっぽっちも解決していないと思われ。

35 名前:デフォルトの名無しさん :04/07/23 09:26
バックグラウンドで動くホットキー型のランチャー作りたいんですけど、
普通にシステムトレイに常駐させるつつ、WM_KEYDOWNで入力を待つだけでいいんですか?


36 名前:デフォルトの名無しさん :04/07/23 09:30
WM_KEYDOWN来ない

37 名前:デフォルトの名無しさん :04/07/23 09:32
WM_KEYDOWNだけだと
ウィンドウがアクティブになってないとメッセージを届けてくれないから
別の方法を探すといいかも

これはオープンソースだから参考にしてみるといいかも
ttp://www.nakka.com/soft/nlaunch/

38 名前:デフォルトの名無しさん :04/07/23 10:00
>>35
RegisterHotKey使えや。

39 名前:デフォルトの名無しさん :04/07/23 10:02
ウィンドウを最前面にしたくて、
SetForegroundWindow(Handle);
SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
してますが、
これらの処理中に他画面をクリックすると無効になってしまいます。
どうしたら良いでつか?

40 名前:デフォルトの名無しさん :04/07/23 10:03
C のランタイムライブラリに記録されている関数を使うスレッドは、
CreateThread 関数と ExitThread 関数ではなく、
C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

C のランタイムライブラリはC++のランタイムライブラリも入りますか?

41 名前:デフォルトの名無しさん :04/07/23 10:06
                |
                |
                |
                |
     /V\        ,J
    /◎;;;,;,,,,ヽ
 _ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'

42 名前:デフォルトの名無しさん :04/07/23 10:10
>>39
WM_CREATEの部分で

SetWindowPos (hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

を入れてみ、できるから

43 名前:デフォルトの名無しさん :04/07/23 10:11
>>39
素でワラタ

>SetForegroundWindow(Handle);
でアクティブにしてるのに
>SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
                                                        ↑
                                      アクティブにしないように設定してるとはな

44 名前:デフォルトの名無しさん :04/07/23 10:35
>>43
あ、ホンとだ。SWP_NOACTIVATE消しますた(恥

でも何故か現象は同じでつ。

45 名前:デフォルトの名無しさん :04/07/23 10:46
MSDN のサンプルにある、ntddcdrm.h を見たくて、
Windows NT DDK に含まれていそうなので、MS のサイトへ行ったのですが、
見つかりません。Windows NT DDK は、CD-ROM 購入なのでしょうか。

46 名前:デフォルトの名無しさん :04/07/23 10:51
>>44
>これらの処理中に他画面をクリックすると無効になってしまいます。
>どうしたら良いでつか?

waht do you mean?

47 名前:デフォルトの名無しさん :04/07/23 10:54
SetForegroundWindowが他のウインドーになるとフラッシュになる仕様に変わったのが原因だろ
40の質問もおねがいしますね

48 名前:デフォルトの名無しさん :04/07/23 11:21
>>45
DDKスレにリンクがあるロシアサイトから全部落とせるよ

49 名前:デフォルトの名無しさん :04/07/23 13:14
>>47
C++のランタイムライブラリとは何か、ということを考えれば、自ずと答えは出るだろう。

50 名前:デフォルトの名無しさん :04/07/23 13:49
考えても分かりません
おしえてください

51 名前:デフォルトの名無しさん :04/07/23 14:01
自己解決しました

52 名前:デフォルトの名無しさん :04/07/23 14:11
>>51
何番か言えよ

53 名前:デフォルトの名無しさん :04/07/23 14:14
自己解決しました。ありがとうございました。

54 名前:デフォルトの名無しさん :04/07/23 14:23
勝手に解決しないでください

55 名前:デフォルトの名無しさん :04/07/23 14:29
自己解脱しました。
ありがとうございました。


56 名前:デフォルトの名無しさん :04/07/23 14:30
勝手に解脱しないでください

57 名前:デフォルトの名無しさん :04/07/23 14:31
自己フェラしました。
ありがとうございました。


58 名前:デフォルトの名無しさん :04/07/23 14:52
勝手にセルフェラしないでください

59 名前:デフォルトの名無しさん :04/07/23 15:05
自己マンコしました.
ありがとうございました.

60 名前:デフォルトの名無しさん :04/07/23 15:07
勝手にドリアンしないでください

61 名前:デフォルトの名無しさん :04/07/23 15:09
テレビを昨日家族で見ていた。すると南国の果物特集が始まった。
「マンゴー」が写っていた。で、親父が「これってくさいやつだろ?」
と言った。俺は「それはマンコだろ!」と突っ込んだ。
すると母が「それはドリアンだよ」と一言だけ残し、台所へ去っていった。

62 名前:45 :04/07/23 16:57
>>48
ロシアかどうか分からないままですが、nt4ddk.zip を落として来ました。
ありがとうございました。
中に、ntddcdrm.h があり、欲しい情報は得られましたが、プログラムは
次のエラーが出て、頓挫です。今後とも、よろしく。

63 名前:デフォルトの名無しさん :04/07/23 18:43
流されてしまったのでもう一度お願いします_| ̄|○
C のランタイムライブラリに記録されている関数を使うスレッドは、
CreateThread 関数と ExitThread 関数ではなく、
C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

C のランタイムライブラリはC++のランタイムライブラリも入りますか?


64 名前:デフォルトの名無しさん :04/07/23 18:49
うん

65 名前:デフォルトの名無しさん :04/07/23 18:50
stringもstudio.hもiostreamも全部ランタイムCライブラリーなんですかー
C++なのにどうしてですか、理由を教えてください

66 名前:デフォルトの名無しさん :04/07/23 18:51
>63
>C のランタイムライブラリはC++のランタイムライブラリも入りますか?
意味が解りません。とりあえず日本語の勉強をしてから出直してください。

67 名前:デフォルトの名無しさん :04/07/23 19:03
言い方がまちがってました 分かりやすく説明するとC++ランタイムライブラリのiostreamを使って
CreateTHReadをコールしても僅かなメモリーリークは発生しませんか?

68 名前:デフォルトの名無しさん :04/07/23 19:17
発生する

69 名前:デフォルトの名無しさん :04/07/23 19:49
親ウィンドウでWM_MOUSEMOVEとWM_MOUSELEAVEを使って
ウィンドウの背景色を変えているのですが、子ウィンドウ上にマウス
ポインタが移動した場合もWM_MOUSELEAVEが発生してしまいます。
子ウィンドウ上に移動してもWM_MOUSELEAVEを発生させないよう
にするにはどうすればいいのでしょうか?

親ウィンドウ上にマウスがある→白背景
親ウィンドウからマウスが外れた→黒背景
親ウィンドウ上でかつ子ウィンドウ上にマウスがある→白背景
といったことがしたいのですが…。

70 名前:デフォルトの名無しさん :04/07/23 19:59
子ウィンドウに入ると親ウィンドウの外にあるってなるん?

子ウィンドウのハンドルを取得してるんだし
マウスポインタが子ウィンドウの中にあればTRUEを返す関数とか作ってみたら?

71 名前:デフォルトの名無しさん :04/07/23 21:03
子ウィンドウが右クリックされた時
親ウィンドウが子ウィンドウが右クリックされたと知るにはどうすればいいでしょうか?

72 名前:デフォルトの名無しさん :04/07/23 21:11
子ウインドウが右クリックされたときに適当なメッセージを発するように
すればいいんじゃね。親はそのメッセージを捕まえる。

73 名前:デフォルトの名無しさん :04/07/23 21:15
>>72
書き忘れてすみません
子ウィンドウはListViewですが
COMMONコントロールでは
右クリックが押されたなどの場合に親に何かメッセージを送ってくれるのでしょうか?

「〜の仕方を教えてください」系の質問ではなく
「〜はありますか?」系の質問ですみません。

もし何かメッセージがあるようならば、その名前を教えてください

74 名前:デフォルトの名無しさん :04/07/23 21:26
メッセージはWM_NOTIFY。
CODEはNM_RCLICK。

75 名前:デフォルトの名無しさん :04/07/23 21:47
>>74
出来ました
ありがとうございます

76 名前:69 :04/07/23 21:57
>>70
親ウィンドウ→子ウィンドウに移動したときにどうもWM_MOUSELEAVE
が出てしまうようで、背景が白黒白黒と点滅してしまうのですよ。

> マウスポインタが子ウィンドウの中にあればTRUEを返す関数とか作ってみたら?
とりあえずこの方向で考えてみます…。
ありがとうございました。


77 名前:デフォルトの名無しさん :04/07/23 21:59
>>63
軽く調べてみたらだんだ興味が出てきたので、いろいろ試してみた。

まず事実として、C/C++のランタイムは数種類存在する。MT=マルチスレッドな。
       StaticLink DynamicLink
C      libc.lib   msvcrt.lib
C(MT)   libcmt.lib   ↑
C++    libcp.lib   msvcprt.lib
C++(MT) libcpmt.lib  ↑

要するに、Cランタイムのlibc、C++ランタイムのlibcpがあり、
それぞれにMT対応の「mt」が存在する。msvc系は最初からMT対応なので2種しかない。
なので、「CのランタイムにはC++のランタイムは含まない」。

ただし、これは「C++ランタイムを使う場合に_beginthreadは不要」ということを意味しない。
というのは、C++ランタイムは内部的にCランタイムを使用しているためだ。
(libcp.libのみリンクしてみるれば一目瞭然。関係ないが、Cランタイムはkernel32.libを使用している)
そのため、「C++ランタイムを使用する場合も_beginthreadを使用するべきである」。

ただしこれは手元のVC++6の場合で、他のバージョンでどうなのかは不明だ。
少なくともVC++4.2以前はiostreamはlibcに含まれていたらしいので、環境依存なのは確かだが。
(なお、その古いバージョンのiostreamは、libci.libとしてVC++6にも残っている)

78 名前:デフォルトの名無しさん :04/07/23 23:25
マニュアル持ってないのか?

79 名前:デフォルトの名無しさん :04/07/24 00:14
一つのHWNDに対して
いくつまでHDCを使うことができるんですか?
限界とかありますか?

80 名前:デフォルトの名無しさん :04/07/24 01:06
16bitの頃はあったらしいが

81 名前:デフォルトの名無しさん :04/07/24 01:16
ちょっとスレ違いかもしれませんが、
NT系をシャットダウンさせようと思ったので、その方法について調べていました。


AdjustTokenPrivileges()の引数の、
TOKEN_PRIVILEGES構造体なんですが

#define ANYSIZE_ARRAY 1
/*略*/
typedef struct _TOKEN_PRIVILEGES {
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;

こんな風にwinnt.hに書かれているんです。

このPrivilegesという配列をいくつ使用しても問題が無かったのですが、なぜでしょうか?

82 名前:デフォルトの名無しさん :04/07/24 04:16
PrivilegeCount で指定された値に応じてその先のデータを読むってこと。
配列へのポインタはそれだけだと配列のサイズを渡せないでしょ。

83 名前:デフォルトの名無しさん :04/07/24 11:15
それって、malloc( sizeof( TOKEN_PRIVILEGES) +
PrivilegeCount*sizeof( LUID_AND_ATTRIBUTES ) )とかで
確保する、Cのお約束パターンでないの?自動変数で確保
して、Privileges[2]=...とかやったら、データ破壊だよ。

84 名前:デフォルトの名無しさん :04/07/24 12:34
>>83
MSDNのサンプルでも、Privileges[0]としてしか使っていませんでした。

85 名前:81 :04/07/24 12:35
>>81 == >>84です。

86 名前:デフォルトの名無しさん :04/07/24 13:12
>>84
Privileges[0]は、もともとTOKEN_PRIVILEGESに含まれてるでしょ。

87 名前:デフォルトの名無しさん :04/07/24 13:56
大量のあらかじめフルパスが分かっているファイルのサイズと最終書込日時の取得をしたいのですが、
for(int i=0; i<30000; ++i)
{
WIN32_FIND_DATA fd
HANDLE hf = FindFirstFile(filePath[i].c_str(), &fd);
//fdの中のデータを利用
FindClose(hf);
}
とやると30000ファイルで20秒くらいかかってしまいます。
FindFirstFileを使わずにCreateFile,GetFileSize,GetFileTimeを併用すると
更に1割ほど遅くなってしまうようです。

もっと速い方法は無いでしょうか?

88 名前:デフォルトの名無しさん :04/07/24 14:01
しかし、こんな所でたずねるほうが馬鹿だね。だったら、MSに行け

89 名前:デフォルトの名無しさん :04/07/24 14:03
GetFileAttributesEx だとどうだ?

90 名前:デフォルトの名無しさん :04/07/24 14:07
GetFileAttributesEx使ってみたら?


91 名前:90 :04/07/24 14:08
リロードすれば良かったorz

92 名前:デフォルトの名無しさん :04/07/24 14:09
しかし、Win32APIもいいかげん。もちっと、プロセス、タスクレベルの仕事しっかりしろよ

93 名前:デフォルトの名無しさん :04/07/24 14:15
>>92
(゚Д゚)ハァ?

94 名前:デフォルトの名無しさん :04/07/24 14:19
Direct Input でキー入力とってるアプリに
実際にキーを押さないでキーを押したエミュレートするには
どうしたらいいんでしょうか?
keybd_eventでは駄目でした

95 名前:デフォルトの名無しさん :04/07/24 14:20
>>89-90
FindFirstFile>(5%)>GetFileAttributesEx>(5%)>CreateFileの順でした。
うーん…

96 名前:デフォルトの名無しさん :04/07/24 14:24
Backupオプション使ってディレクトリを開き、読み、自前で解析するとか。

97 名前:デフォルトの名無しさん :04/07/24 14:27
>>87
マルチスレッドにしてみたら?

98 名前:デフォルトの名無しさん :04/07/24 14:28
>>95
ファインドファーストファイル中に、ファイル作っているのはおもしろい、

99 名前:デフォルトの名無しさん :04/07/24 14:33
>>98
それどういう意味??

100 名前:デフォルトの名無しさん :04/07/24 14:34
>>98
無知をさらした瞬間、と取ってよろしいか?


101 名前:デフォルトの名無しさん :04/07/24 14:45
98晒しage

102 名前:デフォルトの名無しさん :04/07/24 14:47
ERROR_NOT_ENOUGH_QUOTAについて質問です

FormatMessageすると、
「このコマンドを実行するのに十分なクォータがありません」
と表示されます。

クォータ(QUOTA)とはどんな資源なんでしょうか?

103 名前:デフォルトの名無しさん :04/07/24 15:10
お帰りください。
http://www.google.com/search?num=50&hl=ja&ie=UTF-8&q=%E3%82%AF%E3%82%A9%E3%83%BC%E3%82%BF+windows&lr=lang_ja

104 名前:デフォルトの名無しさん :04/07/24 15:27
>>103
このエラーの指すところのクォータの意味が知りたかったのですが・・・

グーグルで、このエラーを検索したところ
以下がヒットしました
ttp://www02.so-net.ne.jp/~handa/win32api/ProcessAndThread.html

クォータで一般的にヒットするディスク クォータとは、まるで関係ないように思えます。

105 名前:デフォルトの名無しさん :04/07/24 16:09
>>104
ERROR_NOT_ENOUGH_QUOTAとは何か? とだけ聞かれれば、
何らかの資源不足だ、としか答え様がない。QUOTAは資源ではなく、資源の制限だからだ。
何が不足してるかは俺らにはわからん。お前が何をしてるのか知らんしな。

関係ないと断言するのは勝手だが、関係あるかないかは、お前さんが何をやってるか次第であって、
お前さんが何をしたいかどうかとは、それこそ全く関係がない。

つまり、お前の聞き方が悪い。

106 名前:102 :04/07/24 16:50
順を追って、説明しますと
作成したアプリを実行中に、IEを立ち上げたところ、
IEがこのエラーを出したそうです。

作成したアプリが何らかの資源をリークしてるのか、
それとも、まるで関係ないのかさえ、糸口が掴めない状態です。

そこで、このエラーを発生しうる資源の不足あるいはAPIを調べ、
それらを扱っているコードをチェックしようと思ったのです。

107 名前:デフォルトの名無しさん :04/07/24 17:55
資格も無い奴に原因教えるわけにいかんだろう。このすれ、馬鹿すぎ。

108 名前:デフォルトの名無しさん :04/07/24 18:00
でも、一番の馬鹿は107だと、僕はそう思うよ。

109 名前:デフォルトの名無しさん :04/07/24 18:05
プ、おまえの言ってることは、堂々とセキュリティー破りを聞いていることだろう
市ねよ。おまえを、訴えるかw

110 名前:デフォルトの名無しさん :04/07/24 18:08
また変なのが湧いてきた

111 名前:デフォルトの名無しさん :04/07/24 18:19
馬鹿には絶対教えないことが、セキュリティの向上につながります。
それが結局、お客様の利益を守ることになります。7

112 名前:デフォルトの名無しさん :04/07/24 18:35
QUATAもわからない奴が未だにいるんだ。最悪だな。
外国に頼むのも仕方が無いかも。

113 名前:デフォルトの名無しさん :04/07/24 18:57
やっべ俺も最悪

114 名前:デフォルトの名無しさん :04/07/24 18:59
>>106
ふーん。がんばれよ。

115 名前:デフォルトの名無しさん :04/07/24 19:19
>>102 が知りたいのはQUATAではなくてQUOTA

116 名前:デフォルトの名無しさん :04/07/24 19:27
ログインできないから何でて聞かれても、おまえが馬鹿としか言いようが無い。
まあ、そんなもんだ

117 名前:デフォルトの名無しさん :04/07/24 19:39
コンストラクタでBeginPaint()を行い、デストラクタでEndPaint()をするクラス
を作りました、このクラスをWM_PAINTメッセージを受けたときに定義し、再描画
を行っています、ウィンドウプロシージャ内でこのクラスを使ったときにはうま
く行くのですが、定義したオブジェクトを自作の再描画関数に渡すとうまく行き
ません、(コピーコンストラクタは定義しています)、、理由がわかりません、
どなたか助けてください。

118 名前:デフォルトの名無しさん :04/07/24 19:42
ソース見せろ

119 名前:デフォルトの名無しさん :04/07/24 20:02
すごい。へー、そんなことできるんかいなw、大馬鹿が増えた。
マニュアルよく嫁。

120 名前:デフォルトの名無しさん :04/07/24 20:04
XWindowで勉強しろ

121 名前:デフォルトの名無しさん :04/07/24 20:05
>>117
場合によって動くのなら、APIの問題ではなくクラス設計の問題。C++方面のスレで聞け。

122 名前:デフォルトの名無しさん :04/07/24 20:24
>>117
BeginPaintの説明を穴があくまでよく嫁。

123 名前:デフォルトの名無しさん :04/07/24 21:09
また、自称上級者が調子こいてますな w

124 名前:デフォルトの名無しさん :04/07/24 21:22
うん、馬鹿をからかうのが楽しいが、今回は、重症だな。こりゃ。
>>117
おまえプログラマ向いてないからやめろ。そのほうが日本のためになる。

125 名前:デフォルトの名無しさん :04/07/24 21:27
文字列を検索するにはCあるいはC++ランタイムライブラリを使わないでやるには
自分で作るしかないのですか?

126 名前:デフォルトの名無しさん :04/07/24 21:39
CあるいはC++ランタイムライブラリを使っていない、
他人が作った検索ルーチンを使う

127 名前:デフォルトの名無しさん :04/07/24 21:47
その程度ならその場で書けよ
それすらできんならプログラムングなんてとっとと辞めちまいな


128 名前:デフォルトの名無しさん :04/07/24 22:12
>>125

APIで検索汁


129 名前:デフォルトの名無しさん :04/07/24 22:33
なんだ。無知を指摘されたやつが切れて暴走してるのか。

130 名前:デフォルトの名無しさん :04/07/24 22:58
>>125
このスレでそんなこと聞いてどうするつもりだ?

131 名前:デフォルトの名無しさん :04/07/24 23:17
未経験者可、時給700円とかの仕事をやっていて、仕事って簡単じゃなんて、
思っているのが、増えているんでないかと思う昨今。

132 名前:デフォルトの名無しさん :04/07/24 23:20
>>131
難しい仕事ってどんなことするの?

133 名前:デフォルトの名無しさん :04/07/24 23:21
とみながさんみたいな仕事

134 名前:デフォルトの名無しさん :04/07/24 23:23
>>133
みーな?

135 名前:デフォルトの名無しさん :04/07/24 23:27
いちろうだろう。

136 名前:デフォルトの名無しさん :04/07/24 23:34
中将閣下だろ。

137 名前:デフォルトの名無しさん :04/07/25 00:09
プロセスハンドルからそのプロセスが起動された時の引数を知るにはどうしたら良いのでしょうか?

138 名前:デフォルトの名無しさん :04/07/25 00:30
GetCommandLine()

139 名前:117 :04/07/25 00:40
参照渡しにすることにより解決しました。

140 名前:デフォルトの名無しさん :04/07/25 00:42
>>138
現在のプロセスのコマンドラインしかとれないようです

141 名前:デフォルトの名無しさん :04/07/25 00:42
考えろ

142 名前:デフォルトの名無しさん :04/07/25 01:03
最終手段はフックでターゲットプロセスに入り込んで実行だーね

143 名前:デフォルトの名無しさん :04/07/25 01:15
GetLastErrorのエラーコードからFormatMessageで文字列にすることについてですが
エラーコードによって%1のように文字列を埋め込むところがありますよね。(例えばERROR_WRONG_DISKとか)
この埋め込む文字列はファイル名だったりドライブ名だったりいろいろあるようですが
どんな文字列を渡したらいいのかは、エラーコード毎に調べてやるしかないんでしょうか?

144 名前:デフォルトの名無しさん :04/07/25 01:17
そういう予めエラー種別が予測されるものは通常、エラーコードでswitchさせるなりして
それぞれエラー処理書くでしょ。それに付随させてエラーメッセージフォーマットもしてやれば良いだけ。
質問への答えとしては、yes

145 名前:143 :04/07/25 01:38
>>144
そうなんですか…
APIでエラーが起きたらGetLastError()を例外クラスに突っ込んでthrowして
一箇所でまとめてフォーマット→メッセージ表示させようと思ってたのですが…
エラーコードでswitchさせても、予定外のコードがきたらとか考えると
自分でエラーメッセージ書いたほうがいいような気がしてきました。

146 名前:デフォルトの名無しさん :04/07/25 09:04
エラーなんて気にすんな。
死ぬわけじゃなし。


147 名前:117 :04/07/25 09:40
参照渡しを使わずにオブジェクトを関数に渡すことができるようにすることが
できました。

148 名前:デフォルトの名無しさん :04/07/25 10:43
>>147 が日本語をまともに使えるようになることができるようにしたい。


149 名前:デフォルトの名無しさん :04/07/25 10:50
>>148
スーパークラスかコンストラクタのデバッグが必要と思われ

150 名前:デフォルトの名無しさん :04/07/25 11:03
SDKプログラミングでFlexGridみたいなActiveXコントロールを使ってみたいんですが
それに関する資料のあるサイトとかありませんか?

151 名前:デフォルトの名無しさん :04/07/25 11:38
ランタイムロードのDLLについて質問です。
DLL内部でnewやmallocを使って動的に確保したメモリ領域は、
呼び出し側がFreeLibrary()した時に自動的に解放されるんでしょうか。
それとも明示的な解放が必要ですか?

152 名前:デフォルトの名無しさん :04/07/25 11:40
不必要

153 名前:デフォルトの名無しさん :04/07/25 11:51
>>151
どういうことを言ってるんだ?普通メモリを割り当ててそのポインタを返す場合はポインタもらったほうが開放するもんだし、
DLL内部の関数でメモリ確保して内部で始末するようなのはそこで自己完結してるものだし。



154 名前:151 :04/07/25 12:13
では、FreeLibraryを使っても、LoadLibraryする以前のメモリ使用量に戻らないときは、
どのような原因が考えられますか?

155 名前:デフォルトの名無しさん :04/07/25 12:51
>>148
それは君の知識不足だろ

156 名前:デフォルトの名無しさん :04/07/25 14:13
セマフォやクリティカルセクションとかのスレッド間でのアクセス管理オブジェクトを
使わなくても、DWORDまでの読み書きなら安全か?

157 名前:デフォルトの名無しさん :04/07/25 14:18
グローバルフックをクラスにするときオブジェクトを何個作っても
DLLのグローバルフックが別々になるようにするにはどうしたらよいですか?

158 名前:デフォルトの名無しさん :04/07/25 14:19
>>154
1.DLL内部のメモリ開放のし忘れ
2.メインプログラム内でのメモリ開放し忘れ
3.DLLの外と中でのメモリ割り当て/開放関数使用の不一致
4.君がタスクマネージャの見方を知らない

漏れは4が怪しいと思う。仮想メモリ使用量の表示は見たか?

159 名前:デフォルトの名無しさん :04/07/25 15:16
AlwaysUnloadDLLっていうレジストリ値使っている人いるのかな。

160 名前:デフォルトの名無しさん :04/07/25 15:53
>>156
1CPUなら平気だが2CPU以上の場合は駄目
だったような気がする。

161 名前:デフォルトの名無しさん :04/07/25 15:59
>>160
2CPUでもアクセス管理してるから同一メモリアドレスに同時にアクセスはできなくない?

162 名前:デフォルトの名無しさん :04/07/25 16:42
APIスレなんだから、Interlocked*を使う話じゃないのか?

163 名前:デフォルトの名無しさん :04/07/25 16:47
1CPUでも安全な保証はないだろ。

164 名前:デフォルトの名無しさん :04/07/25 18:09
>>156
処理によってはたまたま安全な場合もあるが、基本的には危険と思っておくべき。

165 名前:デフォルトの名無しさん :04/07/25 18:21
なんか156みたいな質問って定期的に出てくるけど何なんだろうね?

>>156
よかったら、その疑問をもった経緯をおしえてくれないか?

166 名前:デフォルトの名無しさん :04/07/25 18:58
>>165
毎回イベントやらクリティカルセクションやらを仕掛けるのが面倒だったんで、
CPUのバス長未満の読み書きなら安全かな?と。安全なら省けるなと思ったもので。
効率的にも仕掛けなくて済むなら、向上しそうですし。

167 名前:デフォルトの名無しさん :04/07/25 19:49
C のランタイムライブラリに記録されている関数を使うスレッドは、
CreateThread 関数と ExitThread 関数ではなく、
C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

ウィンドーズのアプリケーションを作る場合
CランタイムライブラリのLIBC.LIB LIBCMT.LIB MSVCRT.LIB LIBCD.LIB LIBCMTD.LIB MSVCRTD.LIB
のどれかが絶対リンクされるということは、Cのランタイムライブラリに記録されている関数を使う事にはなりませんか?

168 名前:デフォルトの名無しさん :04/07/25 19:58
>>167
>>77

どっかの宿題か?

169 名前:デフォルトの名無しさん :04/07/25 20:04
>>167
VC++を使った場合はね

170 名前:デフォルトの名無しさん :04/07/25 21:57
SHGetFileInfoで取得したアイコンは削除する必要がありますか?
それともシステムのアイコンハンドルだから削除してはいけないのでしょうか?


171 名前:デフォルトの名無しさん :04/07/25 22:15
自己解決しますた。


172 名前:デフォルトの名無しさん :04/07/25 22:21
>>171
結局どっちでしたか?

173 名前:デフォルトの名無しさん :04/07/25 22:22
>>156
シングルプロセサでかつアライメントが適切 (例: DWORD なら 32bit 境界に整合している) なら、大丈夫。
ちなみに、Pentium プロセサなら 64bit まで大丈夫。

ただし、>>160 が言うようにマルチプロセサなら駄目。
その時は、LOCK プリフィックスとか XCHG 命令とかでバスをロックする必要がある。

>>161
例えば、inc 命令は、メモリからデータを読み込んで +1 してメモリに書き込むから、その間に他のプロセサが割り込んでしまうことがありえる。
割り込まれないようにするために、バスロック機能がついている。

>>163
保証がないわけではない、インテルのマニュアルを読むべし。

インテル・アーキテクチャ ソフトウェア・ディベロッパーズ・マニュアル
下巻:システム・プログラミング・ガイド
7.1. ロックされたアトミック操作

このマニュアルを読んでよくわからないなら、>>164 の言うように考えておくべし。⇒ >>156=>>166

>>166
上に書いたのは、あくまでも1命令内での話だから、C なんかで書く場合は気をつけてね。 

174 名前:デフォルトの名無しさん :04/07/25 22:23
>>170
GetStockObjectで入手したハンドルを削除するかどうか考えれば解る。
答えは否

175 名前:デフォルトの名無しさん :04/07/25 22:32
削除すんでしょ?
http://forums.belution.com/ja/vc/000/215/21.shtml

176 名前:デフォルトの名無しさん :04/07/25 22:43
知ったかすみませんでした

177 名前:デフォルトの名無しさん :04/07/25 22:56
>>173
とても詳しい説明をありがとうございました

178 名前:デフォルトの名無しさん :04/07/26 02:05
GetKeyboardStateってCreateThreadで作ったスレッド内で動作しないの?

179 名前:デフォルトの名無しさん :04/07/26 07:13
キーボードの入力状態はスレッド別
共有したいならAttachThreadInputすればいいんじゃない

180 名前:デフォルトの名無しさん :04/07/26 10:33
>>178
GetKeyboardStateの情報は、メッセージキューからメッセージを取得したときに更新されたような気がする。
つかMSDNに書いてあるじゃん。


181 名前:デフォルトの名無しさん :04/07/26 11:29
フォルダの情報、例えばファイルが増えたとか減ったとかいうのが変更されたとき
リアルタイムでそれを知るにはどうすればいいでしょうか?

182 名前:デフォルトの名無しさん :04/07/26 12:26
>>181
FindFirstChangeNotification

183 名前:デフォルトの名無しさん :04/07/26 16:50
>>178
ありがとうございます。自由になりましたら早速試して見ます。
>>179
そのようなことが書いてあったので、とりあえずウインドウプロシージャで
GetKeyboardStateを使ってみると正常に動きました。
なので、別スレッド(メッセージを取得しないスレッド)では動作しないのかなと思ったわけです。

184 名前:デフォルトの名無しさん :04/07/27 00:14
Windowsプログラムの初心者です。
標準Cとほとんど(全く?)同じ関数とか型とかありますよね?
strcmp()とlstrcmp()やintとINTみたいに。

Windowsの関数や型を使うと何かいいことがあるのでしょうか?
特に違いがないのであれば、慣れている方を使いたいのですが。

後、malloc()とかを使うとまずいんですかね?

185 名前:デフォルトの名無しさん :04/07/27 00:17
コンパイラやWindowsのバージョンなどに依存しないコードがかけます。

186 名前:デフォルトの名無しさん :04/07/27 00:33
TCHAR対応のとき、strlenは_tcslenとかになって鬱陶しい。
lstrlenはそのままなので安心、とか。

187 名前:デフォルトの名無しさん :04/07/27 00:35
lstr〜はstr〜に比べて全然少ないので、一貫性をとるためにはCライブラリで統一せざるを得ないとか。

188 名前:デフォルトの名無しさん :04/07/27 00:46
>>184程度質問する奴に
コンパイラやWindowsのバージョンなどに依存しないコードがかけてなになる?

189 名前:デフォルトの名無しさん :04/07/27 01:05
なになる?と訊かれても困っちゃいます。

190 名前:デフォルトの名無しさん :04/07/27 01:07
なったーなったーなになった
当家の婿どのなになった

191 名前:デフォルトの名無しさん :04/07/27 03:11
Windows2000でATAPIのDVD-Rにアクセスしたい。
が、DeviceIoControlを発行するところで、アクセスを拒否されてしまう。
http://support.microsoft.com/?kbid=241374
↑によると管理者特権を取れというのだが、どの特権を取ればいいのかわからない。
教えてエロい人。


192 名前:デフォルトの名無しさん :04/07/27 08:00
>>191
アドミニストレータで実行すればいい。

193 名前:191 :04/07/27 09:07
>>192
すでにAdministratorです。
じゃあほかのエラーでしょうか?


194 名前:デフォルトの名無しさん :04/07/27 09:23
>>184
INTだけは他との一貫性のためだけにあるみたい。
MSDN読むとわかるけどLONGとSHORTは使うけど、UINTも使うけど、INTはどこにもでてこない。
いつも小文字のint。

195 名前:デフォルトの名無しさん :04/07/27 09:36
Alt キーが離されたことを通知してもらうためのよい方法はないでしょうか。
例えば

Alt 押す / Alt 離す
と入力された場合は「Alt 離す」のところで WM_SYSKEYUP が送られてくるのですが、

Alt 押す / X 押す / X 離す / Alt 離す
と入力された場合、
「X 離す」のところで WM_SYSKEYUP が送られてきますが、
「Alt 離す」のところでは送られてきません。

後者の方の「Alt 離す」を知るにはどうすればよいでしょうか。

フック (WH_KEYBOARD_LL) を使えばできると思うのですが、9x 系では使えません。
何か他に方法がないでしょうか。
無理ならおとなしくフック使います。

196 名前:195 :04/07/27 09:40
_no

後者の方の入力例ですが、
「Alt 離す」のところで WM_KEYUP が送られてくるので、これで判断できますね。

197 名前:デフォルトの名無しさん :04/07/27 12:40
>>184
mallocの代わりにAPIのGlobalAlloc系を使えば、キャッシュへの退避をコントロールできる。
別にmalloc使っても問題はないし、ほかの人もいってるけどそのほうが環境に依存しない
ので、用途で使い分けるよろし。

Winと心中する覚悟があるなら可能な限りWin32APIで書くのもありかもね。

198 名前:デフォルトの名無しさん :04/07/27 12:43
どうせWin32用に書いたアプリを移植するには物凄い苦痛が伴うんだから、別にいいじゃんHeapAllocで

199 名前:デフォルトの名無しさん :04/07/27 15:04
>>184
ANSI 関数使わないと、その関係のライブラリがリンクされなかった気がする。
wsprintf() は sprintf() より機能が狭いなど制約はある。
細かい話だが、stdio.h を入れると、4098 のバッファが付いて来る。
今は問題にすることはなくなったが、フロッピーに入れたいがため、4K 程度
のサイズでも気にするときは、使わないとかしていたな。
なんせ、cp/m 上がりなもんで。

200 名前:デフォルトの名無しさん :04/07/27 16:08
パフォーマンスあげようとして malloc の代わりに
GlobalAlloc や HeapAlloc を使うのは本末転倒。
小さいブロックを大量に確保/開放するときは
malloc/free の方が大抵早いよ。

GlobalAlloc や HeapAlloc を使うなら
自前でメモリマネージャを用意して
大きいブロックを確保した中から
小さいブロックを allocate しないと
APIのオーバーヘッドがでかいので性能上がらんよ。
ってかそこまでしたら malloc/free じゃん?(w

とマジレス。

201 名前:デフォルトの名無しさん :04/07/27 16:34
malloc()/free()だってWindows上では・・・

void* malloc(size_t _size)
{
 return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _size);
}


ReactOSの例だけどね。

202 名前:デフォルトの名無しさん :04/07/27 16:36
>>201
VC++.NET2003で、
mallocの中見ても最終的にはHeapAlloc呼んでる

203 名前:デフォルトの名無しさん :04/07/27 16:40
>>201
バグみっけ。malloc()で確保されたメモリは0クリアされないから、HEAP_ZERO_MEMORYを指定するのはおかしい。
void* malloc(size_t _size)
{
 return HeapAlloc(hHeap, 0, _size);
}
が正しい実装のはず。誰かパッチ投げといて

204 名前:デフォルトの名無しさん :04/07/27 16:42
HeapAlloc呼んでるのは確かだけどいつもHeapAlloc呼んでる訳じゃなくて、
自前で管理してるメモリブロックの空きが足りない時に呼んでるだけ。

205 名前:デフォルトの名無しさん :04/07/27 16:43
>>203
別にゼロクリアしてもいいじゃん。

206 名前:デフォルトの名無しさん :04/07/27 16:46
>>205
K&Rにも、manにもその他の文献(Web上)にも「初期化されていないメモリへのポインタを返す」とある以上、
それに従わない実装はまずいだろう。ゼロフィルを行わない事を前提にシビアなタイミングで動くプログラムが
あるかもしれないし。

207 名前:デフォルトの名無しさん :04/07/27 16:55
>>206
ゼロクリアすることで動かなくなったら、それは間違いなく呼出し側の
バグだってば…

ちなみに、HeapAlloc() そのものはカーネルモードに入る必要はないの
でさほどオーバヘッドはないと思う。たまに VirtualAlloc() は呼ぶだ
ろうけど。



208 名前:デフォルトの名無しさん :04/07/27 17:02
>>207
「ゼロで埋める時間ですらもったいない」ということでは?

209 名前:デフォルトの名無しさん :04/07/27 17:10
>ゼロフィルを行わない事を前提にシビアなタイミングで動くプログラムが あるかもしれないし。
そんなコードは間違いなくWinじゃ動かないだろうな。

210 名前:デフォルトの名無しさん :04/07/27 17:13
>>206
未定義の場合はそれがどうなっていても構わない。
ランダムなバイト列だろうが、
0でクリアされようがVC++のデバッグモードのように特定のビット列で初期化されようが、
"逝ってよし"でfillされようが問題無い。

同様に未定義の操作をした場合HDDが初期化されようが、PCが火を噴こうが構わない。

211 名前:デフォルトの名無しさん :04/07/27 17:16
deadbeef!

212 名前:デフォルトの名無しさん :04/07/27 17:18
>206
それは単に、メモリの内容は保証されない程度の意味だと思うのだが。
あとシビアなタイミングが必要なら、
mallocを使わずに自前でメモリを管理するべきだし。

213 名前:デフォルトの名無しさん :04/07/27 17:20
つーかmallocはスレ違い

214 名前:デフォルトの名無しさん :04/07/27 17:23
mallocか、HeapAllocかって話だからあながちスレ違いでもない

215 名前:デフォルトの名無しさん :04/07/27 17:26
alloca最強

216 名前:デフォルトの名無しさん :04/07/27 18:00
「初期化されていないメモリへのポインタを返す」という仕様だから
ゼロクリアするのはバグって、
凄いなおい。

217 名前:デフォルトの名無しさん :04/07/27 18:02
ReactOSの方針からすると、Windowsと違う実装はバグ
問題は、WindowsがmallocからHeapAllocにどんな引数を渡してるか、だな

218 名前:デフォルトの名無しさん :04/07/27 18:05
それはCRTの仕事でないの?

219 名前:デフォルトの名無しさん :04/07/27 18:08
WindowsにmallocなんてAPIあるのか?

220 名前:デフォルトの名無しさん :04/07/27 18:08
ん?MSVCRT内のmalloc実装の話をしてるんでしょ。
MinGWを使った場合も結局それが呼ばれるんだし。

221 名前:デフォルトの名無しさん :04/07/27 18:17
LARGE_INTEGER同士で四則演算をするAPIってありませんか?

222 名前:デフォルトの名無しさん :04/07/27 18:33
>>221
テケトーにマクロで書いとけ。

223 名前:デフォルトの名無しさん :04/07/27 19:47
>>221
__int64 にキャストして普通の演算式を書いて、後はコンパイラに任せる。


224 名前:デフォルトの名無しさん :04/07/27 19:50
>>221
メンバのQuadPartに対して演算しろ

225 名前:デフォルトの名無しさん :04/07/27 21:05
mallocつかうとCreateThreadをつかった時にメモリーリーク起こすから使わないほうがいい

226 名前:デフォルトの名無しさん :04/07/27 21:17
>>__int64 にキャストして普通の演算式を書いて、後はコンパイラに任せる。

VC6.X の頃はこれで盛大にバグった結果が出てたから注意。
.Net 2003 では未確認。
心配なら単なる加減算でも llMulDiv とか使ったほうがいいよ。

227 名前:デフォルトの名無しさん :04/07/27 21:37
ローカルフック使えばウインドプロシジャー使わなくてもどんなプログラムでもつくれますよね?

228 名前:184 :04/07/27 22:09
みなさん、レスありがとうございます。


>>185
つまり、特に困らないのであればANSI Cで問題ないということでしょうか?

malloc()についてはみなさん使用されているのでしょうか?
オーバーヘッドが少なくてむしろ早いなんて意見もありますが、>>225みたいな
意見もありますし。。

229 名前:デフォルトの名無しさん :04/07/27 22:23
_beginthread使えばいいじゃn

230 名前:デフォルトの名無しさん :04/07/28 01:00
>>225
CreateThreadなんか使うなよ

231 名前:デフォルトの名無しさん :04/07/28 01:14
>>230
なんかまずいの?

232 名前:200 :04/07/28 01:35
>>231
CRTを一つも使わんというなら使ってもいいが
libc*.lib とか msvcrt*.lib とかリンクするなら
CreatThread は使わんのが身のため。

_beginthread 系が面倒見てくれる。
っていうかお前ら VS.NET とかの crt\src 見てないの?

233 名前:デフォルトの名無しさん :04/07/28 01:57
ここはVS等の特定の開発プラットフォームを対象とした環境依存スレではありません。


234 名前:デフォルトの名無しさん :04/07/28 02:34
「とか」
どのコンパイラにもたいていランタイムのソースくらいついてるだろ

235 名前:デフォルトの名無しさん :04/07/28 03:12
BC++にはないけどな

236 名前:デフォルトの名無しさん :04/07/28 03:14
C++Builderにはついてるよ(Pro以上)

237 名前:デフォルトの名無しさん :04/07/28 09:18
CreateThread で作成したスレッドの中で処理が完結していて、かつ
そのスレッドで CRT を一切使用していなければ、
_beginthread 系 API を使う必要もないと思うのだけれども、間違っている?

238 名前:デフォルトの名無しさん :04/07/28 10:03
>>237
そもそもマルチスレッドだよね?

239 名前:デフォルトの名無しさん :04/07/28 10:30
>>237
そうだけど
静的インスタンスのコンストラクタ・デストラクタなどもCRTがらみなので要注意

240 名前:デフォルトの名無しさん :04/07/28 10:41
>ランタイムライブラリに記録されている関数を使うスレッドは

記録されているクラスはいいけど関数を使ってはいけないのではないのですか?
ところでNEWはつかってもメモリーリークおきませんか?

241 名前:デフォルトの名無しさん :04/07/28 11:14
>>239
ローカルインスタンスのコンストラクタ・デストラクタはOK?

242 名前:デフォルトの名無しさん :04/07/28 13:15
225が言ってるのは、スレッド使うならマルチスレッド用のライブラリを使えということ。
同じスレッドでfree()するか、プロセス終了までfree()しなければ良いという考え方もある。

243 名前:デフォルトの名無しさん :04/07/28 16:12
夏来ぬと目にはさやかに見えねども厨のレスにぞ驚かれぬる

244 名前:200 :04/07/28 17:17
>>242
っていうか CreateThread 使うと
マルチスレッド用のライブラリの malloc を使おうが使わなおうが
メモリリークのもとなんだがなー。


245 名前:デフォルトの名無しさん :04/07/28 18:28
原理の分かってない奴はゴタク並べてないで素直に_beginthread使えっての。
議論・討論したきゃ↓へ行け。いくらでも相手してやる。
http://pc5.2ch.net/test/read.cgi/tech/1049790146/

246 名前:デフォルトの名無しさん :04/07/28 21:07
 ↑
あそこは初心者しか居ないよ。
MFCかSDKかとか、ダイアログベースかクライアント領域に描くかとか、
そういう議論ばっかw

247 名前:デフォルトの名無しさん :04/07/28 21:52
>244-245
CreateThread()でメモリがリークするとお悩みの皆さんは、
他のリソースもがんがん洩らして、さぞお困りでしょう。

スレッドの状態はメッセージで把握しましょう。
ハンドルはちゃんと閉じましょう。
リンクすべきライブラリはマニュアルで確認しましょう。

248 名前:デフォルトの名無しさん :04/07/28 22:36
CreateThreadを使おうと考えてる香具師は逆に何で_beginthreadがいやなんだ?
だいたい_beginthreadexならCreateThreadとほぼ同じ動作をしてくれるやん。

249 名前:デフォルトの名無しさん :04/07/28 22:40
>>246
まるでここなら玄人がいるかのようだな

250 名前:デフォルトの名無しさん :04/07/28 23:04
>>248
小文字やアンダースコアで始まる関数呼ぶと死んじゃうやつがいるんだよ。


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.