■過去ログ置き場に戻る■
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
>0
xFFFFFF
なんでまたそんな中途半端な……
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.