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


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

Win32API質問箱 Build37
501 名前:デフォルトの名無しさん :2005/11/25(金) 00:35:31
空欄IDならいいけど。

502 名前:デフォルトの名無しさん :2005/11/25(金) 00:58:18
あるアプリがCreateProcessでプロセスを起動したとします。
そのプロセスを同アプリから必要なくなった時に強制終了させる事はできますか?

LinuxだとプロセスIDを検索してkillするような処理が可能ですが
それと同じような事をしたいのですが。

503 名前:デフォルトの名無しさん :2005/11/25(金) 01:11:13
>>502
強制終了させたいというなら、TerminateProcess()
その起動するプロセスも自分のものなら、
何らかのプロセス間通信で終了させたほうがいいけどね、

504 名前:デフォルトの名無しさん :2005/11/25(金) 01:23:45
>>502
同じような事はできます。

505 名前:デフォルトの名無しさん :2005/11/25(金) 01:35:29
>>502
自分で起動したプロセスなら検索しなくてもハンドルわかるだろ

506 名前:デフォルトの名無しさん :2005/11/25(金) 01:55:38
イヤです

507 名前:デフォルトの名無しさん :2005/11/25(金) 01:57:55
会話になってません

508 名前:デフォルトの名無しさん :2005/11/25(金) 02:12:57
>>502
もしWM_CLOSEで終了してくれるプログラムなら
WM_CLOSEの方がいいかもしれん。
強制終了じゃなくて、自主的に終了してくれるようにお願いする、
みたいな感じだけど。

509 名前:デフォルトの名無しさん :2005/11/25(金) 02:18:36
便乗質問だけどwindowsのタスクマネージャの「プロセスを終了」ボタン
押して強制終了させんのはやっぱTerminateProcessしてんのかな

510 名前:デフォルトの名無しさん :2005/11/25(金) 02:23:10
>>509
MSしか知らない「裏技」だったしてなwww

511 名前:デフォルトの名無しさん :2005/11/25(金) 02:27:02
>>509
APIにフックかけて確認してみるとか

512 名前:デフォルトの名無しさん :2005/11/25(金) 03:25:35
デバッガで覗いたらTerminateProcessだった。

513 名前:デフォルトの名無しさん :2005/11/25(金) 05:19:33
>>427に答えろやカスども(^o^)

514 名前:デフォルトの名無しさん :2005/11/25(金) 06:59:40
>>427
全部同じに見えるんだが。


515 名前:デフォルトの名無しさん :2005/11/25(金) 07:24:37
>>427
>>513
通報しました

516 名前:デフォルトの名無しさん :2005/11/25(金) 07:30:06
>>513
お断りだゴキブリ野郎(^o^)

517 名前:デフォルトの名無しさん :2005/11/25(金) 08:52:17
ダメです

518 名前:デフォルトの名無しさん :2005/11/25(金) 11:16:08
>>513
さっさと首吊って死ねやうんこちゃん(^o^)

519 名前:デフォルトの名無しさん :2005/11/25(金) 11:16:46
イヤです。

520 名前:デフォルトの名無しさん :2005/11/25(金) 12:24:53
#include <dshow.h> としてlstrcpyを加えたコードを
bcc32でコンパイルするとエラーが出ます。他にも色々使えない関数が出てきました。
---------------------------------------------
#include <windows.h>
#include <dshow.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){
TCHAR ore[64];
lstrcpy(ore,TEXT("こんにちは"));
return 0;
}
---------------------------------------------
bcc32 -I"C:\Borland\Bcc55\Include" -L"C:\Borland\Bcc55\Lib"
-I"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include" -L"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Lib" -I"C:\Program Files\Microsoft Platform SDK\Include"
-L"C:\Program Files\Microsoft Platform SDK\Lib" -W test.cpp
---------------------------------------------
エラー E2451 test.cpp 7: 未定義のシンボル lstrcpy_instead_use_StringCbCopy_or_St
ringCchCopy(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )

もし解決方をご存知の方がいらっしゃいましたらご教授なにとぞお願い致します。

521 名前:デフォルトの名無しさん :2005/11/25(金) 12:29:27
>>520
書いてある通りにすればいいんじゃない?
つまり、lstrcpy()を使うのをやめてかわりにStringCbCopy()か
StringCchCopy()を使う。


522 名前:デフォルトの名無しさん :2005/11/25(金) 12:32:04
>>520

>-L"C:\Program Files\Microsoft Platform SDK\Lib"

    _, ._
  ( ゚ Д゚)   ガシャ
  ( つ O. __
  と_)_) (__()、;.o:。
          ゚*・:.。



523 名前:520 :2005/11/25(金) 12:41:49
>>521
有難うございます。すぐ出来ました!
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/stringcchcopy.asp?
本当に助かりました。

524 名前:495 :2005/11/25(金) 13:28:38
>>520
マルチおつ。

525 名前:デフォルトの名無しさん :2005/11/25(金) 16:28:10
isdigitの代わりになるAPIを教えておくれ

526 名前:デフォルトの名無しさん :2005/11/25(金) 16:29:02
ねぇよ
それくらい自分で判定しな

527 名前:デフォルトの名無しさん :2005/11/25(金) 16:53:38
>>525
isdigit()の何が不満だ?

528 名前:デフォルトの名無しさん :2005/11/25(金) 18:00:25
あるウィンドウにメッセージをおくりたい。
ただし、そのウィンドウが既になくなっている場合は送れなくても問題はない。
という状況で、以下のようにしました。

if(IsWindow(hWnd)) PostMessage(hWnd, WM_MESSAGE, 0, 0);

この場合IsWindowで分岐させなくても問題なく動くのですが
パフォーマンス・安定性・SDKの仕様などの観点からはどちらのほうがよいのでしょうか?
また、同様にSendMessageの場合はどうでしょうか?

529 名前:デフォルトの名無しさん :2005/11/25(金) 18:42:20
>>528
まだ勉強中の俺だから間違ってるかも知れないが
MSDN見た限りだと、PostMessage/SendMessage共に消えたウインドウのハンドルを
渡したときにどうなるかって事については明記されてなかった

使わない砲がいいんじゃまいか?

530 名前:デフォルトの名無しさん :2005/11/25(金) 18:57:38
同じウィンドウハンドルが全然違うウィンドウに使いまわされると言うことはアウトオブ眼中ですか?

531 名前:デフォルトの名無しさん :2005/11/25(金) 19:09:15
IsWindowがtrueを返した瞬間、ウィンドウがなくなる可能性も?

532 名前:528 :2005/11/25(金) 19:14:35
>>529,>>530レスありがとうございます。
>同じウィンドウハンドルが全然違うウィンドウに使いまわされると
その可能性もありますね;
プロセスIDなどを取っておいて毎回照合すべきでしょうか。
>>531
頭が痛くなってきましたorz

533 名前:デフォルトの名無しさん :2005/11/25(金) 19:44:03
>>532

SendMessage()/PostMessage()に限らず、API呼び出しはAtomicな処理では
ないので、>>529-531が言ってるようなことは気にする必要はない。

SendMessage()を呼び出した時にはウィンドウが存在しても、システムがAPI
処理中に、ウィンドウが消えてしまう場合もあれば、PostMessage()が正常
終了しても、ポストしたメッセージより先に相手のメッセージキューに
WM_CLOSEが溜まっている場合もありうる。

確実にメッセージを届けたかったら、ミューテックスとか、共有メモリなど
を使ってプロセス/スレッド間で同期をとる必要がある。

534 名前:デフォルトの名無しさん :2005/11/25(金) 19:49:25
>>533
目的のウィンドウが、自分が作ったものじゃない時はヌルーですか?

535 名前:デフォルトの名無しさん :2005/11/25(金) 20:21:12
別のソフトのある入力フォームに数字を入力してEnterキーを押す、
といったような操作を行うにはどうすればいいのでしょう?
Googleで検索するにも取っ掛かりが掴めなくて困っています。
メッセージのフックとは異なるでしょうし。


536 名前:デフォルトの名無しさん :2005/11/25(金) 20:35:00
>>535
上で出てるSendMessageとかPostMessageでいけるんじゃない?

537 名前:528 :2005/11/25(金) 20:41:51
>>533
解説ありがとうございました。
ウィンドウがなければメッセージは届かなくても良いので、いきなりSendMessageを呼んでいいのですね。
ただ>>530は低い確率かもしれませんが、起こりえるのではないかと思うのですがどうなのでしょう?

538 名前:デフォルトの名無しさん :2005/11/25(金) 20:49:48
ウィンドウの特定方法による

ウィンドウタイトルとかわかってるならFindWindowしる

539 名前:デフォルトの名無しさん :2005/11/25(金) 21:05:32
>>535
ありがとうございます。よく考えればそうですね。

>>538
ありがとうございます。

540 名前:デフォルトの名無しさん :2005/11/25(金) 22:31:31
>>509
WM_CLOSEを送ってシカトされたらTerminateProcess()してるんだとおも。

541 名前:WM_CLOSE :2005/11/25(金) 23:02:14
私の話を聞いてっ!無視するなんてヒドイ><

542 名前:デフォルトの名無しさん :2005/11/26(土) 00:14:24
>>534
自分(のプロセス内)で作っても、別スレッドで作成されたウィンドウの場合、
メッセージループが独立しているので、プライマリスレッドがウィンドウの
消滅を知らずに、SendMessage()/PostMessage()する場合もある。


543 名前:デフォルトの名無しさん :2005/11/26(土) 00:37:05
__cdeclとか__stdcallとか関数呼び出し規約が複数あるのには
何か特別な理由があるんでしょうか?
こんなもん1つあれば十分な気がするのですが・・・
WINAPIとかCALLBACKとかいちいち書かなくていいし。
教えてエロイ人。

544 名前:デフォルトの名無しさん :2005/11/26(土) 00:39:00
>>541
死ねやウンコ野郎

545 名前:デフォルトの名無しさん :2005/11/26(土) 00:40:13
>>543
他言語と呼び出し規約を合わせる気は無しですか

546 名前:543 :2005/11/26(土) 00:43:41
>>545
あー、そういう理由があったんですか。
勉強になりました。ありがとうございます。

547 名前:デフォルトの名無しさん :2005/11/26(土) 07:54:48
>>542
そういう意味じゃないし

548 名前:デフォルトの名無しさん :2005/11/26(土) 08:31:42
>>546
「そういう理由」じゃないし

549 名前:デフォルトの名無しさん :2005/11/26(土) 12:28:14
そういう理由じゃないんですか?

550 名前:デフォルトの名無しさん :2005/11/26(土) 13:15:17
cdeclは呼び出した側が引数の後片付けをし,可変個引数が使える。
stdcallは呼び出された側が引数の後片付けをする。
(ちなみにVCではfastcallとthiscallもある)

x86ではユーザーモードからカーネルモードへ行く処理の途中で引数はカーネルのメモリへコピーされ,
元のは片付けられてしまうのでstdcall(/pascal)形式にするしかない,という話を聞いたことがある。
なので他の関数も全てstdcall(/pascal)に統一したのではないだろうかと俺は思っている。

551 名前:デフォルトの名無しさん :2005/11/26(土) 18:58:17
システム情報を更新するみたいなAPIってありましたっけ?
なんかあったような気がするんだけど見つからない。

XPにSP2入れたら起動直後にSUBSTしたドライブが、
マイコンピュータ上でF5押さないと認識しなくなってしまったのでした。

552 名前:デフォルトの名無しさん :2005/11/26(土) 19:04:56
ヒント:SPI

553 名前:470 :2005/11/26(土) 21:31:04
>>473
ありがとうございます。message-only windowというやつですね。
もうちょっと調べてみます。
(web上にはMFCのサンプルコードは沢山あるようですが…)


554 名前:デフォルトの名無しさん :2005/11/26(土) 21:40:08
>>553
是非、調べるといいと思う。

Windowsでソケットを扱う場合にも重宝するよ。
メッセージループを使わずにselect()で実装して痛い目に遭う人は多い。
特にUnix出身者。ほぼ間違いなく嵌る罠。

555 名前:デフォルトの名無しさん :2005/11/26(土) 22:20:11
>>554
もちっと詳しく。
ポインタだけでもお願いします。


556 名前:デフォルトの名無しさん :2005/11/26(土) 22:30:01
>>555
WSAAsyncSelect()

目に見えるウィンドウだけがウィンドウじゃない。
むしろウィンドウの本質はメッセージ処理の受け皿であること。

コンソールアプリでもメッセージ処理用のウィンドウは作成できる。
というか、必要になる場面が結構多い。

557 名前:デフォルトの名無しさん :2005/11/26(土) 22:30:35
>>555
知りたいことを書きなさい。

558 名前:デフォルトの名無しさん :2005/11/26(土) 22:43:56
>>556
便乗質問ですが、コンソールアプリでそうしたウィンドウが必要になる場面って
どういうものがあるんでしょうか?

559 名前:デフォルトの名無しさん :2005/11/26(土) 22:46:15
サービス系のプログラムとかかな
コンソールアプリとは言わんかも試練が

560 名前:デフォルトの名無しさん :2005/11/26(土) 23:02:21
サービスの設定項目に、「デスクトップとの対話をサービスに許可」というチェック項目がある。
デフォルトではチェックされていない。
この項目が必要なのは、サービスプロセスがメッセージ処理を行っているからだ。

通常、メッセージは、シグナルなどのHANDLEオブジェクトと違いアクセス権限を設定できない。
そのため、ユーザのメッセージ送信から完全に遮断された領域でサービスプロセスが動いている。

561 名前:560 :2005/11/26(土) 23:05:57
訂正

×:この項目が必要なのは、サービスプロセスがメッセージ処理を行っているからだ。 
○:この項目が必要なのは、サービスプロセスのメッセージ処理を想定しているからだ。

562 名前:デフォルトの名無しさん :2005/11/26(土) 23:10:18
一瞬誤爆かモノローグかと思った。

563 名前:デフォルトの名無しさん :2005/11/26(土) 23:52:03
コンソール含めてウィンドウが全く必要ないアプリだったら、
そのアプリからスレッド一個作って、そこでソケット開いて送受信させれば
いいだけじゃないの? 

564 名前:デフォルトの名無しさん :2005/11/26(土) 23:52:18
いや、どっからどうみてもモノローグだろ。

565 名前:デフォルトの名無しさん :2005/11/26(土) 23:53:17
>>563
少なくとも >>470 はスレッドを使いたくないと言っていた

566 名前:デフォルトの名無しさん :2005/11/27(日) 00:09:56
>>554
select()で合う痛い目は具体的には?

567 名前:デフォルトの名無しさん :2005/11/27(日) 00:16:14
俺も>>554の痛い目に興味ある。
返値ハンドリングがヘタレだとまずいってのは常識として
それ以外に何かあるのか?

568 名前:デフォルトの名無しさん :2005/11/27(日) 00:18:49
名前なしパイプとの互換性が一切ない。
作成できるソケット数に制限がある。

569 名前:デフォルトの名無しさん :2005/11/27(日) 00:21:52
先に判っている事は痛い目ではなかろ

570 名前:デフォルトの名無しさん :2005/11/27(日) 00:41:36
アフォですか?

571 名前:デフォルトの名無しさん :2005/11/27(日) 00:49:35
照れるな

だがあちこちに同じ一言レスしてるお前ほどじゃないけどな

572 名前:551 :2005/11/27(日) 05:08:32
>>552
↓これでできました。
PostMessage(HWND_BROADCAST,WM_COMMAND,0x0001A220,0x00000000);

SPIってのはSystemParametersInfo関数ですよね?
でもこれだと最初にパラメータに何が適当か不明でした。

573 名前:デフォルトの名無しさん :2005/11/27(日) 07:12:12
C++室から案内されてきました。

CreateProcess()でプログラムが終了するまで次の処理を待つように
しているのですが、
リダイレクトしようとしても、実行されません。
if( !CreateProcess( NULL,
"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) )

どうすれば、リダイレクトされるのでしょうか?

574 名前:デフォルトの名無しさん :2005/11/27(日) 09:05:41
リダイレクトはできねぇだろ?
そこに記述するのは、第一引数がNULLの時の実行するモジュールと、そのプログラムに与えるコマンドライン引数だし
リダイレクトはシステムの機能だし

575 名前:デフォルトの名無しさん :2005/11/27(日) 09:18:56
>>573
cmd.exe /C
とか
command.exe /C
使ったら?

つーか最後のπってなんだ…

576 名前:デフォルトの名無しさん :2005/11/27(日) 09:21:48
>>573
STARTUPINFOのメンバにそれらしきものがある。

577 名前:デフォルトの名無しさん :2005/11/27(日) 09:28:01
バッチファイルを作成して起動!!!
cmd /c のほうがマシか

578 名前:573 :2005/11/27(日) 09:59:41
cmd /C を見てみたのですが
if( !CreateProcess( NULL,
"cmd.exe /C 'C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml'",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) )
でも、変化がありませんでした。

579 名前:デフォルトの名無しさん :2005/11/27(日) 10:18:14
リダイレクトは標準出力から自前でやれと

580 名前:デフォルトの名無しさん :2005/11/27(日) 12:00:10
system関数でも行ける気がする。コマンドプロンプト出るけど。

581 名前:デフォルトの名無しさん :2005/11/27(日) 12:38:48
>>572
SHChangeNotifyで同じことができるかもしれない。

>>578
手元にWindows環境がなくて試せないのだけど、
cmd.exeってシングルクォーテーションでパス囲めるのだっけ?

あと、CreateProcessは成功してるのかどうか。
失敗してたらGetLastErrorは何返してるか。
成功してるのに動作しないなら、同じコマンドラインでシェルから実行出来るか。
などなど、ある程度自力で切り分けも。

582 名前:デフォルトの名無しさん :2005/11/27(日) 12:56:20
>>566-567
alarm()がないのに仕様がalarm()の存在を前提としている。
gethostbyname()の非同期版がBSDソケットにはないとか。
つーかマジでIPv6の名前解決をタイムアウトするにはどうしたらいいのか
教えてくれ。スレッド使うしかないのか?

583 名前:デフォルトの名無しさん :2005/11/27(日) 12:56:50
>>575
command.com /C
でしょ

584 名前:デフォルトの名無しさん :2005/11/27(日) 13:01:47
>>568
デフォルトのソケット数の上限が64個なだけで変更は出来るが。。

585 名前:デフォルトの名無しさん :2005/11/27(日) 14:06:49
>>578
"cmd.exe /C \"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\" > results.xml"
じゃねーの?試してないが。

586 名前:デフォルトの名無しさん :2005/11/27(日) 14:40:12
"cmd.exe /C \"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml\""
だろう

587 名前:デフォルトの名無しさん :2005/11/27(日) 15:50:17
>>586
それだとC:\Programという実行ファイルを実行しようとしてエラーだろ。

588 名前:デフォルトの名無しさん :2005/11/27(日) 16:08:57
でも>>585じゃリダイレクトを処理できない。リダイレクトを解釈してるのも
cmd.exeだから。
もしかして二重に囲む必要があるのか?
"cmd.exe /C \"\\\"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\\\" > results.xml\""

589 名前:デフォルトの名無しさん :2005/11/27(日) 16:28:35
いやおまえ、その\の付け方おかしいだろ

"cmd.exe /C \"\"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\" > results.xml\""
やるならこうだべ

590 名前:デフォルトの名無しさん :2005/11/27(日) 16:44:26
>>589
それじゃcmd.exeに渡されるコマンドラインは
""C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe" > results.xml"
つまり第一パラメータ=「」(空文字列)、第二パラメータ=「C:\Program」、…最終パラメータ=「 > results.xml」
になっちゃわないか?
内側の""は\でエスケープしなきゃならないはず。つまり
"\"C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe\" > results.xml"
これをC言語の文字列リテラルの形式にしたら>>588になる

591 名前:デフォルトの名無しさん :2005/11/27(日) 16:46:35
まさに明後日の方向だな

592 名前:デフォルトの名無しさん :2005/11/27(日) 16:47:17
それともcmd.exeは/C以降はすべて一続きのコマンドラインとして解釈したりして
>>585でいいってオチだったりするのかな?

593 名前:デフォルトの名無しさん :2005/11/27(日) 18:56:30
まぁ、やってみりゃわかるだろ

594 名前:デフォルトの名無しさん :2005/11/27(日) 18:59:20
reopen


595 名前:デフォルトの名無しさん :2005/11/27(日) 22:47:51
INT26H で直接セクタ書込をしようと思うんだけど、手順はどうすればいいの?
LOCK レベルとか解説して遅れ。

596 名前:デフォルトの名無しさん :2005/11/27(日) 22:52:34
>>595
Win95系?

597 名前:デフォルトの名無しさん :2005/11/27(日) 23:19:30
そう。DOS Mode

598 名前:デフォルトの名無しさん :2005/11/27(日) 23:43:28
>>596
一応、VWIN32.VDX をオープンして、その後の話。

599 名前:デフォルトの名無しさん :2005/11/28(月) 00:04:15
ここはどう?
http://web.archive.org/web/20030220194124/tech.millto.net/~morry/vwin32/adio/

600 名前:573 :2005/11/28(月) 00:13:28
レス遅れてすみません。
>>585で動きました。
>>586,588では動きませんでした。
>>589で動きました。

C:\の前に\が必要なことを知りませんでした。
皆様、どうもありがとうございました。

601 名前:デフォルトの名無しさん :2005/11/28(月) 02:03:12
>>583-590
なんだこの流れ
ワロスwwwww

602 名前:デフォルトの名無しさん :2005/11/28(月) 03:15:55
> C:\の前に\が必要なことを知りませんでした。
最終的にこうなったのが何ともいえず面白いな

603 名前:デフォルトの名無しさん :2005/11/28(月) 03:53:44
\" の意味を分かってないんだな。

604 名前:デフォルトの名無しさん :2005/11/28(月) 04:15:49
CreateFont等によって取得された論理フォント等のハンドルは
プロシージャが終了する前にDeleteObjectしなきゃだめですか?
static変数に保存して次回使ったりしても問題ありませんか?

605 名前:デフォルトの名無しさん :2005/11/28(月) 04:22:48
毎回返した方が良いです

ハンドルは勝手に捨てられたり入れ替えられたりするので
同一性が保障されるのはプロシジャ内だけだと思った方が良いでしょう


606 名前:604 :2005/11/28(月) 04:26:11
>>605

わかりました!
ありがとうございます!

607 名前:デフォルトの名無しさん :2005/11/28(月) 05:19:58
XmlTextReaderみたいなのは、ASPでありますか?

608 名前:デフォルトの名無しさん :2005/11/28(月) 05:32:39
http://www.ailight.jp/blog/kazuk/articles/6313.aspx

609 名前:デフォルトの名無しさん :2005/11/28(月) 06:00:21
C++でxmlを操作することは可能でしょうか?

610 名前:デフォルトの名無しさん :2005/11/28(月) 06:05:26
>609
誤爆?

611 名前:デフォルトの名無しさん :2005/11/28(月) 06:58:51
MSXML

612 名前:デフォルトの名無しさん :2005/11/28(月) 08:59:13
>>597-598
DOSモードかWin32なのかはっきりしる!
Win9x/2Kならこんなのとか。(ロックはあまりちゃんとやってないようだが。)
ttp://homepage3.nifty.com/k-takata/mysoft/rwfd.html

613 名前:デフォルトの名無しさん :2005/11/28(月) 14:48:21
CreatePipe()の第四引数について質問です。

nSize
パイプのバッファのサイズをバイト単位で指定します。
このサイズは、参考として使われるだけです。
システムはこの値を使って、適切なバッファリングメカニズムを決定します。
このパラメータで 0 を指定すると、既定のバッファサイズが割り当てられます。

なんてマニュアルには書いてあるんだけども、0を指定したときの
規定のバッファサイズってどこ見たら分かる?
#自分で設定しても参考値にしかならんみたいだけど……どんな仕様だよ。

614 名前:デフォルトの名無しさん :2005/11/28(月) 15:45:05
>>604
問題ない。ファイルハンドルも、GDIオブジェクトのハンドルも基本的には同じ。
MFCのCFontクラスやCBrushクラスは、オブジェクト内の変数としてGDIオブジェ
クトのハンドルを保持している。

自身のプログラムのバグを含めて意図的にDeleteObject()しない限り、少なく
ともシステム側で勝手に捨てられたり入れ替えられたりすることはない。

615 名前:デフォルトの名無しさん :2005/11/28(月) 19:09:24
>>613
中の人もそれはそれで大変なんだよ。
察してやれ。

616 名前:デフォルトの名無しさん :2005/11/28(月) 20:29:34
タブを複数行にしたときに、
選択するタブを変えても
表示される行が変わらないようにするには
どうすればいいでしょうか?

617 名前:デフォルトの名無しさん :2005/11/28(月) 21:07:35
選んだタブを前に出す仕様だから

618 名前:616 :2005/11/28(月) 21:14:05
自作するしかないということですか?

619 名前:デフォルトの名無しさん :2005/11/28(月) 21:14:48
タブをボタンにすれば

620 名前:デフォルトの名無しさん :2005/11/28(月) 21:20:10
それはイヤです

621 名前:616(≠620) :2005/11/28(月) 22:00:51
>>617>>619
回答ありがとうございました。
ボタンと自作、両方試してみます

622 名前:デフォルトの名無しさん :2005/11/28(月) 22:28:54
ダメでした。

623 名前:デフォルトの名無しさん :2005/11/28(月) 22:51:10
奇遇ですね
私もダメでした

624 名前:デフォルトの名無しさん :2005/11/28(月) 23:41:33
TerminateProcess()の第二引数って、検索すると0を与えてたり0xFFFFFF与えてたりするんですが
使い方が良く判りません。何を指定すべきでしょうか?

625 名前:デフォルトの名無しさん :2005/11/28(月) 23:48:00
>>624
好きな値

626 名前:デフォルトの名無しさん :2005/11/29(火) 00:04:17
>0xFFFFFF
なんでまたそんな中途半端な……

627 名前:デフォルトの名無しさん :2005/11/29(火) 13:34:47
>>612
WIN32の方です。

単純なセクタライトの場合、
(1) ロックレベル=1,アクセス権=0x0002 で論理ドライブをロック
(2) DeviceIOControl の INT26H
(3) アンロック
(4) ドライブのリセット

の手順でよか?


あと、アクセス権のbit1とかbit3、ロックレベルがなんで0とか3とかあんのか、それも和下欄。

628 名前:デフォルトの名無しさん :2005/11/29(火) 14:35:28
あるコンソールプログラムを外部から利用したいと考えています。
具体的にはCraftyというチェスのプログラムで、普通に起動すると

[7六歩]
move 3四歩
[2六歩]
move 8四歩
...

という形で対戦することが可能なチェスソフトです(実際はチェスの棋譜を返してきます)。
入力は標準入力、出力は標準出力です。
[括弧]の中にあるのはこちらかの入力で、move xxxがコンピュータからの返答です。

これを外部の、例えばグラフィカルなGUIを提供するプログラムから呼び出して
操作してやりたいのですが、具体的にどのAPIを使って通信すればよいのかわかりません。

どなたかAPIの名前だけでも結構ですので助言いただけませんか?よろしくお願いします。

629 名前:デフォルトの名無しさん :2005/11/29(火) 14:53:56
>>627
Win32アプリからはドライブのリセットのファンクションコール(int 21h ax=710Dh)は呼び出せないはず。

他のアプリが同時にそのドライブにアクセスしないのならそれで十分だろう。
あるいはロックレベル0の方がいいのかもしれない。
defragのようなことをやるのならロックレベル2,3も必要。詳細は↓
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/win9x/excluse_2inb.asp
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/win9x/excluse_406f.asp
ロックレベルが上がるにつれて、他のアプリのディスクへの書き込み、読み出し、
ファイルの作成などが制限されるようになる。

630 名前:デフォルトの名無しさん :2005/11/29(火) 15:42:19
>>628
パイプ、リダイレクト

631 名前:デフォルトの名無しさん :2005/11/29(火) 15:46:44
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100013.txt
このやりとりを参考に、自作のファイル管理ソフトに
エクスプローラの「元に戻す」を実装してみたんですが、
Win2kでは正常に動作するものの、XPではまったく無反応です。

XPで上手く動作させる方法、もしくは別な方法があれば教示願います。

632 名前:609 :2005/11/29(火) 17:54:53
すいません、誤爆じゃないです。
C++ .net を使っているのですが、XmlTextReaderというAPIを
使うにはどうすればいいのでしょうか?

633 名前:デフォルトの名無しさん :2005/11/29(火) 18:10:24
スレ違い

634 名前:デフォルトの名無しさん :2005/11/29(火) 18:22:43
XmlTextReaderなんていうAPIはありません
はい終了

635 名前:609 :2005/11/29(火) 18:34:33
どう見ても .NET Framewarkのクラスです
本当にありがとうございました

636 名前:デフォルトの名無しさん :2005/11/29(火) 19:21:54
>>628
APIはCreateProcess()
Yahooで
STARTF_USESTDHANDLES
で検索すれば、サンプルいっぱい。


637 名前:デフォルトの名無しさん :2005/11/29(火) 21:12:31
>>631
ファイルのプロパティでWin2000互換モードにする

638 名前:デフォルトの名無しさん :2005/11/29(火) 21:13:40
それはいやです

639 名前:デフォルトの名無しさん :2005/11/29(火) 21:17:24
WM_CREATEとか
WM_DESTROYとか
WM_PAINTとか
WM_LBUTTONDBLCLKとか
WM_COMMANDとか
いろいろメッセージがあるけれど、

自分でメッセージを送信しなかったとして、
通常ウィンドウプロシージャに運ばれてくるメッセージの一覧を教えて下さい。

http://www7.plala.or.jp/keny01/windows/win32/#sub1-6
こんな代表的な者の他に…

640 名前:デフォルトの名無しさん :2005/11/29(火) 21:18:37
それもいやです

641 名前:639 :2005/11/29(火) 21:21:05
   Σ (゚Д ゚ ;)/
>>640に断られた…orz

642 名前:デフォルトの名無しさん :2005/11/29(火) 21:29:22
SPY使ってください

643 名前:デフォルトの名無しさん :2005/11/29(火) 22:12:37
>>636
ありがとうございます。早速調べてみます

644 名前:デフォルトの名無しさん :2005/11/29(火) 22:42:27
>>639
ttp://www.winapi-database.com/Message/WM/

645 名前:デフォルトの名無しさん :2005/11/29(火) 23:26:33
>>629
ありがと。安心したわ。


646 名前:デフォルトの名無しさん :2005/11/29(火) 23:59:10
>>644
サンクス

647 名前:デフォルトの名無しさん :2005/11/30(水) 11:58:41
CreateProcessでアプリケーションを起動しているのですが、このときに
SHIFTキーを押してアプリケーションを起動したように振舞いたいのですが
どのようにすればいいのでしょうか?
例えば、AccessをSHIFTキー押しながら立ち上げたときのようにしたいのです。


648 名前:デフォルトの名無しさん :2005/11/30(水) 12:49:18
ACCESS起動時にパラメータ渡せば?


649 名前:デフォルトの名無しさん :2005/11/30(水) 12:53:15
>>648
Accessに限った話しでなくてSHIFTキー押しながら起動すると振る舞いの変わる
アプリケーション全般に使いたいと思っています。


650 名前:デフォルトの名無しさん :2005/11/30(水) 12:58:08
ttp://fukkey.dyndns.org/pins/acc/040630/89656.html


651 名前:デフォルトの名無しさん :2005/11/30(水) 13:01:59
>>647
立ち上がる時にSHIFTキーを押して貰えばいい

652 名前:647 :2005/11/30(水) 13:12:50
>>651
現在はそういう運用になっていますが使いにくいという意見が出ていまして
改良できるならしてみたいと思っています。


653 名前:デフォルトの名無しさん :2005/11/30(水) 13:19:09
>>653
SHIFTキーを押しているときと同じ効用を持たせるコマンドラインオプションを設けて
ショートカットでも作ればええやん。

654 名前:デフォルトの名無しさん :2005/11/30(水) 13:21:54
事故参照乙

655 名前:647 :2005/11/30(水) 13:29:14
>>653
起動先のアプリケーションはこちらで作成したものではなく一般にあるアプリケーションに
なりますので、パラメータを用意してもらうことはできないんです。


656 名前:653 :2005/11/30(水) 13:37:22
やってまったがや。

一般にあるアプリケーションの使い勝手を変更するのはそのアプリケーションの
著作権者に対するデザインの侵害につながるので勝手にやってはいけません。
#ってことはないだろうか。

冗談さておき、もう少し情報欲しいな。
#もしかして、「例えば」じゃなくて実際にAccessの話だったりしてw

657 名前:デフォルトの名無しさん :2005/11/30(水) 13:43:32
サスペンド状態で起動してグローバルフックかな

658 名前:647 :2005/11/30(水) 14:09:38
>>656
本当にAccessに限らないんです。

>>657
グローバルフックですか。。。
dll作ってとか結構大そうな感じになりますよね。
やはり簡単にはできそうにないんですね。


659 名前:デフォルトの名無しさん :2005/11/30(水) 14:15:32
まさかとは思うが、Shiftキーをロックできるのは知っているよな?

660 名前:デフォルトの名無しさん :2005/11/30(水) 14:16:43
Alt+半角/全角 押してローマ字入力モードにして
キー押すと
ウィンドウ左上に文字が出てくるんだが、これを非表示にする方法無い?

661 名前:デフォルトの名無しさん :2005/11/30(水) 14:27:29
>>660
IMEの設定でもいじれ

662 名前:647 :2005/11/30(水) 14:30:19
>>659
keybd_eventを使うんですね。
試したところ上手くいきました。
ありがとうございます!

663 名前:デフォルトの名無しさん :2005/11/30(水) 14:43:37
自作のクラス内でスレッドを作成する際、現在スレッドプロシージャ
はクラス外に定義して、パラメータとしてクラスのポインタを渡して
制御する方法をとっているのですが、この場合スレッドプロシージャ
内で使用するメンバ変数は全てpublic定義にしなければいけません。

上記手法ではクラス化の意味が薄れてしまうため、スレッドプロシ
ージャをクラス内にstatic定義してCreateThreadしてみたところ、正
常に動作していますが、処理に自信が持てません。

Win32というよりはC++についての質問になってしまうのですが、この
ようなケースでは、どちらが正攻法でしょうか?


664 名前:デフォルトの名無しさん :2005/11/30(水) 14:48:27
>Win32というよりはC++についての質問になってしまうのですが
分かってて何故こっちに来る・・・

665 名前:デフォルトの名無しさん :2005/11/30(水) 14:55:39
>>661
いや、APIで解決したい。
ImmSetCompositionWindow使うと、場所移動できるのはわかった

666 名前:デフォルトの名無しさん :2005/11/30(水) 15:00:18
>647
それは、Access側で、起動時のShift状態を見て、
動作を変えてるんじゃなかろうか。
試してないけど、
SendInputでVK_SHIFTのDOWN
→ターゲット起動、Idleまで待つ。
→SendInputでVK_SHIFTのUP
でどう?

667 名前:デフォルトの名無しさん :2005/11/30(水) 16:18:10
グローバルフックとかしなくても、ホットキーでよくないか?

668 名前:667 :2005/11/30(水) 16:19:30
ちなみにDLL作成しなくてもグローバルフックは可能。

669 名前:デフォルトの名無しさん :2005/11/30(水) 16:38:55
>>668
ノ 先生!方法を教えてください!

670 名前:デフォルトの名無しさん :2005/11/30(水) 16:47:33
>>663
それであってる

671 名前:667 :2005/11/30(水) 16:58:05
>>669
つWH_JOURNALRECORD

672 名前:デフォルトの名無しさん :2005/11/30(水) 18:01:37
>>665
ImmSetConversionStatus

673 名前:デフォルトの名無しさん :2005/11/30(水) 23:12:22
MUTEXの一覧を烈拳するAPIを教えてください?

674 名前:デフォルトの名無しさん :2005/11/30(水) 23:28:02
DDKを使えば出来そうです。
DDKのAPIでカーネルオブジェクトテーブルの取得が
出来るっぽいです。

675 名前:デフォルトの名無しさん :2005/11/30(水) 23:49:40
列挙
烈拳

676 名前:デフォルトの名無しさん :2005/12/01(木) 00:10:24
北斗百裂拳って、原作では最初の方にちょろっと出ただけで、全然奥義っぽくないよね

677 名前:デフォルトの名無しさん :2005/12/01(木) 01:32:52
そもそも奥義なのか?>百裂拳

678 名前:663 :2005/12/01(木) 08:57:05
>>664>>670
遅くなりましたけれど、レスありがとうございました。


679 名前:デフォルトの名無しさん :2005/12/01(木) 09:52:11
>>678
友達は?


額面どおりの意味不明な一行レスとして受け取るなよ。
ヒントが書かれている。

680 名前:663 :2005/12/01(木) 10:19:54
>>679
ソレダ…って勉強が足りてないです。
スレ汚し失礼しました。

681 名前:デフォルトの名無しさん :2005/12/01(木) 10:27:37
679みたいのはさすがに寒いな…

682 名前:デフォルトの名無しさん :2005/12/01(木) 18:37:21
>>673

総当りで作ってみる
エラーが起きた名前は存在する
以上

683 名前:デフォルトの名無しさん :2005/12/01(木) 19:31:47
Visual Studio.net 2003からデバッグモードで起動すると問題なく起動できて
デバッグ無しだと起動に失敗してエラー報告ダイアログが出てきます。
んで、ダイアログ内のデバッグボタンを押すと

hoge.exe の 0x7c9514b6 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00d5503d に書き込み中にアクセス違反が発生しました。 。

と表示されてxstringの605行に緑の|>が表示されるのですが何事かわかる人いたりしますか?
デバッグ無しでもWin95/98/ME/NT互換モードだと起動できます。

684 名前:683 :2005/12/01(木) 19:33:45
ああ、すみません。開発環境はWindowsXP SP2+Visual Studio.net 2003で言語はC++です。

685 名前:デフォルトの名無しさん :2005/12/01(木) 19:35:49
どっか初期化し忘れがあるんじゃねーの

686 名前:デフォルトの名無しさん :2005/12/01(木) 19:47:34
とりあえず確実なのはスレ違いってことだ。

687 名前:デフォルトの名無しさん :2005/12/01(木) 20:17:52
スレ違いでしたか。すみません。しかも自己解決してしまいました。
以前動いていた状態に少しずつ近づけてみた結果
MultiByteToWideCharを使用していた部分をCA2Wに直すと動くようになることがわかりました。
お騒がせしました。原因は今のところよくわかりませんが。

CHAR* mtext = "test";
WCHAR* wtext = NULL;
int nSize = MultiByteToWideChar(CP_ACP, 0, mtext, -1, wtext, 0);
wtext = (WCHAR *)malloc(nSize);
MultiByteToWideChar(CP_ACP, 0, mtext, -1, wtext, nSize);

688 名前:デフォルトの名無しさん :2005/12/01(木) 20:22:55
>wtext = (WCHAR *)malloc(nSize);
wtext = (WCHAR *)malloc(nSize*sizeof(WCHAR));

689 名前:デフォルトの名無しさん :2005/12/01(木) 20:28:05
>>688
!!!!
動きました!ありがとうございます!
MultiByteToWideChar()の戻り値って必要なバイト数じゃなくて文字数なんですね…。
勘違いしていました。本当にありがとうございました。

690 名前:デフォルトの名無しさん :2005/12/01(木) 20:39:14
>>689
このスレで聞いてよかったね(^_^)

691 名前:デフォルトの名無しさん :2005/12/01(木) 20:44:34
>>690
はい、本当にありがとうございました。

692 名前:デフォルトの名無しさん :2005/12/01(木) 21:44:13
でもATL::CA2Wを使い続けたほうが便利だよ。

693 名前:デフォルトの名無しさん :2005/12/01(木) 22:29:02
メモリ管理がちょっと楽になるぐらいじゃねーの?

694 名前:デフォルトの名無しさん :2005/12/01(木) 22:47:11
>>687方式よりはるかにシンプルに(というか1行で)書けて
しかも例外安全だが?
どーしてもATL使いたくないんなら、必要なクラス/テンプレートだけでも
パクれば?と言いたい。せっかくC++使ってるんだから。

695 名前:デフォルトの名無しさん :2005/12/01(木) 22:54:47
それはいやです

696 名前:デフォルトの名無しさん :2005/12/01(木) 23:11:49
ダメです

697 名前:デフォルトの名無しさん :2005/12/01(木) 23:45:45
ATL使うデメリットって何かあるの?

698 名前:デフォルトの名無しさん :2005/12/01(木) 23:46:23
おっと、スレ違いか、スマン

699 名前:デフォルトの名無しさん :2005/12/01(木) 23:52:50
つか、C++で必要も無いところでchar*だのwchar_t*だの扱ってるのは
糞コードだろ。
って、スレ違いだけどな。

700 名前:デフォルトの名無しさん :2005/12/02(金) 00:06:25
>>697
使えない人には使えない

701 名前:デフォルトの名無しさん :2005/12/02(金) 01:00:02
>>699
普通は何をつかうんじゃー!

702 名前:デフォルトの名無しさん :2005/12/02(金) 01:10:36
>>701
std::basic_string<T>でもCString<T>でも好きなモン使えよ
生char*とか使うよりはマシだから

703 名前:デフォルトの名無しさん :2005/12/02(金) 01:27:12
>>702
なにそれ?どうなんの?
ユニコード使う奴とにてんね。

704 名前:デフォルトの名無しさん :2005/12/02(金) 10:55:09
sprintfの使えない文字列クラスはウンコーヽ(・∀・)ノ

705 名前:デフォルトの名無しさん :2005/12/02(金) 11:27:42
CStringの切り貼りが遅すぎて、わざわざTCHAR *で書き直した俺が来ましたよ。

706 名前:デフォルトの名無しさん :2005/12/02(金) 12:27:49
> CStringの切り貼りが遅すぎて、わざわざTCHAR *で書き直した
そういうシビアな速度要求はまだ存在するんだねぇ。

因みに自分は(必要時以外の)TCHAR*は怖くて使えない。絶対解放し忘れる。

707 名前:デフォルトの名無しさん :2005/12/02(金) 12:40:30
>>704
スレ的には _sntprintf()。wsprintf()がギリギリ。
sprintf() を素で使う人にはグーでパンチするべきだろう。

708 名前:704 :2005/12/02(金) 12:46:17
>>707
AnsiString::sprintf()使いだから大丈夫

709 名前:デフォルトの名無しさん :2005/12/02(金) 12:54:37
>>704
std::basic_stringに対しての発言ならboost::formatがあると返す。

710 名前:デフォルトの名無しさん :2005/12/02(金) 14:12:21
boost::formatは最強だな

711 名前:デフォルトの名無しさん :2005/12/02(金) 15:14:57
ここはapiスレ

712 名前:デフォルトの名無しさん :2005/12/02(金) 15:47:45
スレッドの内部で
そのスレッドを Create したときの
ハンドルを知る方法はありますか?

713 名前:デフォルトの名無しさん :2005/12/02(金) 15:50:46
マイクロ秒単位でポートの監視をするプログラムを
作成したいのですが、
Windowsで
QueryPerformanceCounter()
QueryPerformanceFrequency()
を使った場合、環境によって取得間隔がことなってしまうのでしょうか?

また マイクロ秒単位で動かすプログラムは、
ウインドウズアプリケーションで作成は、可能なのでしょうか?



714 名前:デフォルトの名無しさん :2005/12/02(金) 15:50:50
GetCurrentThread

715 名前:デフォルトの名無しさん :2005/12/02(金) 17:00:33
>>704
CStringT<>にはそのものズバリのFormat()があるでよ。
std::basic_string<>の場合はstd::stringstreamを使うか
>>709の言うように、boost::format使え。

sprintf()はバッファオーバーフローの危険性がある最悪関数。
非標準だがsnprintf()の類が使えるならそちらを使うべき。
でも、C++のフォーマッタの方が、文字列長に限界が無いし、
下らないメモリ管理に関する心配が不要だからずっといい。

C++使っておきながらchar*とsprintf()族を無意味に使ってる奴は
ただの馬鹿。



716 名前:デフォルトの名無しさん :2005/12/02(金) 17:07:26
sprintfでバッファオーバーフローと言い出すのは
sprintfの使い方さえろくに知らないバカ

717 名前:デフォルトの名無しさん :2005/12/02(金) 17:11:59
ここは何のスレですか?

718 名前:デフォルトの名無しさん :2005/12/02(金) 17:25:38
>>716
そうだな。長さは数えようと思えば数えられる。だが、それは面倒で誤りの多いコードになりがちだから
非常に多くのCプログラムでそうしたことが省かれるし、それがCプログラムのセキュリティホールを
産んで来た。
わざわざsnprintf()なんてものが導入されたのはそのためであって、そうした歴史を無視して
語ったところで無知が露呈するだけだぞ。

それにくらべてCStringT<>::Format()のようなものがいかに便利であることか。


719 名前:デフォルトの名無しさん :2005/12/02(金) 17:26:14
>>716
きちんと使えるようになってもうっかり間違えることはあるさ。

720 名前:デフォルトの名無しさん :2005/12/02(金) 17:31:57
何いってんだ
char buff[200];
sprintf(buff, "%.180s", s);
とかの「すごく簡単で基本的な使い方」すら知らないのか?

721 名前:デフォルトの名無しさん :2005/12/02(金) 17:34:03
>>720
きちんと使えるようになってもうっかり間違えることはあるさ。

722 名前:デフォルトの名無しさん :2005/12/02(金) 17:35:16
>>720
あんたは意図的に物事を単純化している。
%.180のように「勝手に切り詰めてもいい」場合だけじゃないだろ。
切り詰めては駄目な場合は、フォーマット後の長さを数えるしかない。


723 名前:712 :2005/12/02(金) 17:36:31
>>714
GetCurrentThread で得られるのは
擬似ハンドルですよね?
本当のハンドルを得ることはできないのでしょうか?

724 名前:デフォルトの名無しさん :2005/12/02(金) 17:37:02
は?

「バッファオーバーフローの危険」の話をしてるんじゃないの?

725 名前:デフォルトの名無しさん :2005/12/02(金) 17:37:39
フォーマットに必要なバッファを自動的にアロケートしてくれる
asprintf()のようなものが使えるシステムもある。
これは後でfree()しなければならないことを除けば、大変便利だ。
が、無論C++ならば不要なものでもある。

726 名前:デフォルトの名無しさん :2005/12/02(金) 17:38:53
>>724
そのとおりだが、セキュリティホール塞ぎは仕様を捻じ曲げて達成するものではない。

727 名前:デフォルトの名無しさん :2005/12/02(金) 17:39:06
それと、sprintfは、「書き込んだ文字数を返す」んだよ。
戻り値が「バッファが足りないっぽい」数字だったら
改めてバッファを広げて呼び直せばいいだけの話。
(snprintfなら、必要なバッファサイズもわかるけどね)

728 名前:デフォルトの名無しさん :2005/12/02(金) 17:41:05
やっぱ勉強不足を屁理屈でごまかしてる奴ばっかじゃん。

729 名前:デフォルトの名無しさん :2005/12/02(金) 17:41:44
>>727
えーと、sprintf()の場合、平気でバッファを超えて書き込んで(メモリを破壊し)、その値を返すわけですが。

730 名前:デフォルトの名無しさん :2005/12/02(金) 17:42:51
>>723
DuplicateHandle()

731 名前:デフォルトの名無しさん :2005/12/02(金) 17:43:02
>>728
「誰が」勉強不足なの?
C++使ってるくせにstd::stringstreamやboost::formatやCString<>::Format()のような便利なものを
使わない人たちだよね?w


732 名前:デフォルトの名無しさん :2005/12/02(金) 17:43:29
>>726
必要があるところでなら、そのような処理をすればすれば良いだけ。
大抵のところでは、その程度で充分だよ。
例えばファイル名の長さとかに制限を設けて仕様としても問題はない。
内部処理ならなおさら。

そして、sprintfには「バッファオーバーフローの危険」はない。

733 名前:デフォルトの名無しさん :2005/12/02(金) 17:45:36
>>732
>sprintfには「バッファオーバーフローの危険」はない。
「正しく使えば」が抜けている。だが、それは意外に難しい。

実のところ別に無能なわけでもなんでもないCプログラマたちが作ったレガシープログラム群
の多くにそのようなセキュリティホールが発見されているのだ。


734 名前:デフォルトの名無しさん :2005/12/02(金) 17:45:49
>>729
sprintf(buff, "%.180s", s) が179を返した場合の話なんですが
その程度も推察できないのですか?

735 名前:デフォルトの名無しさん :2005/12/02(金) 17:47:16
ところでwsprintfには1024文字までしか書き込まれないという制限がある。
だからどうしてもwsprintfを使わなければならないときに俺はバッファの要素数を必ず1024以上にしている。

736 名前:デフォルトの名無しさん :2005/12/02(金) 17:47:49
>>734
それなら>>727の説明が誤っている。
>改めてバッファを広げて呼び直せばいいだけの話。
ではなくて、フォーマット文字列もいちいち変更するんだろ?
まあ、%.*sとかにしといて、長さ部分を変えるだけだろうが。

737 名前:デフォルトの名無しさん :2005/12/02(金) 17:49:24
あのね、俺だって
「CString::Format等を使わないでsprintfを使え」なんて言ってる訳じゃないの。
「『「sprintfにバッファオーバーフロー』と言う奴は使い方を知らないだけ」と言ってるの。

どこぞのスレで「strcpyの脆弱性」と言ってる奴と全く同じだよ。

738 名前:デフォルトの名無しさん :2005/12/02(金) 17:49:25
スレ違いを修正出来ないやつらが偉そうに語ってるが
説得力ゼロ

739 名前:デフォルトの名無しさん :2005/12/02(金) 17:50:41
>>735は一応スレに沿っているなw

740 名前:デフォルトの名無しさん :2005/12/02(金) 17:59:45
>>730
それだと、同じスレッドを指す別のハンドルになった希ガス。

741 名前:デフォルトの名無しさん :2005/12/02(金) 18:01:11
話の流れには沿っていないがな。

742 名前:デフォルトの名無しさん :2005/12/02(金) 18:05:14
>>740
Advanced Windows嫁。
ちゃんと実ハンドルが取れる。

Advanced Windowsにも、スレッドの実ハンドルをとる目的で載っている。

743 名前:デフォルトの名無しさん :2005/12/02(金) 21:52:29
DuplicateHandleでも「Createしたときの」ハンドルは取れないんじゃないの?
何のためにCreateしたときのハンドルが必要なのかはともかく。
つーか質問者が何かを激しく勘違いしてる可能性が高いが。

744 名前:デフォルトの名無しさん :2005/12/03(土) 00:10:44
sprintf()を擁護する池沼が湧いたか。ご苦労なこった。

745 名前:デフォルトの名無しさん :2005/12/03(土) 00:21:02
おまいら、ここはWin32APIの質問スレですよ

746 名前:デフォルトの名無しさん :2005/12/03(土) 00:42:49
スレタイすら読めない池沼が(ry

747 名前:デフォルトの名無しさん :2005/12/03(土) 00:47:53
池沼は何をやっても許されます
裁判でも裁けません

池・沼・最・強・伝・説

748 名前:デフォルトの名無しさん :2005/12/03(土) 01:18:13
sprintfが駄目ってヤツに聞きたいんだけど。
>>720のプログラムは間違ってるの?
動かないの?
そこらへん考えてレスつけないと馬鹿に見えるよ。

749 名前:デフォルトの名無しさん :2005/12/03(土) 01:21:28
見当違いのレスも馬鹿みたいだぞ。注意しな。

750 名前:デフォルトの名無しさん :2005/12/03(土) 01:28:34
>>749
頭の悪い糞餓鬼が大して重要でない部分に大騒ぎしてる臭いがプンプンするね。
いいアプリケーションを作ってくださいねw


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