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


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

Win32API質問箱 Build37
751 名前:デフォルトの名無しさん :2005/12/03(土) 01:34:24
>>745
snprintf()ならば、十分にスレテーマに沿ってる。
なぜならgccとVCとでは、snprintf()でバッファサイズを埋め尽くした時の振る舞いが違うので。
この辺もちゃんと押さえておかないと、軽くヤバイ。


752 名前:デフォルトの名無しさん :2005/12/03(土) 01:39:28
落ち着け馬鹿ども

753 名前:デフォルトの名無しさん :2005/12/03(土) 01:52:17
>>751
C標準ライブラリの実装依存の話と、スレタイのWin32APIとどんな関係が?

754 名前:デフォルトの名無しさん :2005/12/03(土) 01:53:50
はいそこいちいち釣られない

755 名前:デフォルトの名無しさん :2005/12/03(土) 01:57:58
>>748
もう少し、未来を予測する能力を培ったらどうだろうか。

バッファサイズがのちのち変更される可能性については考えないのか?
ソースコードが別プロジェクトにコピペされる可能性については考えないのか?

バッファサイズを指定していたマクロなり定数なりの文字列でgrepしただけでは、
修正すべき場所を追跡できない。それがprintf()系フォーマット引数クオリティ。

>>748、君は職業PGに向いていないと思う。
もし今、職業PGなのであれば、迷惑をかける前に転職してほしい。
趣味PGなのであれば、これ以上はキツク言わないよ。思う存分、使ってくれ。

756 名前:デフォルトの名無しさん :2005/12/03(土) 02:13:28
共同開発をしたことのない初心者が調子に乗って煽ってただけか。
お前ら、初心者の相手して暇だな。

757 名前:デフォルトの名無しさん :2005/12/03(土) 02:18:50
他人の尻馬に乗らない

758 名前:デフォルトの名無しさん :2005/12/03(土) 02:23:11
アフォばっか

759 名前:デフォルトの名無しさん :2005/12/03(土) 02:25:41
sprintf (buffer,"%.*s",sizeof(buffer)-1,string);

760 名前:デフォルトの名無しさん :2005/12/03(土) 02:32:49
>>759
lstrcpyn(buffer, string, sizeof(buffer));
で済むことに何故sprintf()を使う。

もっと現実的なsprintf()の使用例で考えてみろ。

761 名前:デフォルトの名無しさん :2005/12/03(土) 02:42:24
#define CONSTANT "editing data"
sprintf (buffer, "%.*s" CONSTANT, sizeof(buffer)-1-(sizeof(CONSTANT)-1),string);

762 名前:デフォルトの名無しさん :2005/12/03(土) 02:43:30
CreateFile関数が失敗した時の原因が共有違反だったか調べる方法はありませんか?
共有違反だったら他のプロセスがハンドルを開放するのを待って、
共有違反でなかったらreturnさせたいのですが。

763 名前:デフォルトの名無しさん :2005/12/03(土) 02:44:45
面白いアイディアだが、遠慮なく却下させてもらう。
sizeof()に依存している時点で死亡決定。
理由はわかるな?

764 名前:デフォルトの名無しさん :2005/12/03(土) 02:48:35
>>748 を援護する
がんがれ

765 名前:デフォルトの名無しさん :2005/12/03(土) 02:49:04
>>761
フォーマット文字列を変更した時の気の使いようは並じゃないな。
で、毎度毎度そんな誤りやすい計算をやるのか。
却下だ、却下。

実際そうしたことが面倒で誤りやすいからバッファオーバーフローのバグが
生じてきた「現実」があるのだとなぜ分からないのか。
単に「出来る出来ない」の話じゃないんだよ。それだけでいいんなら全部
アセンブラで書けっての。

766 名前:デフォルトの名無しさん :2005/12/03(土) 02:50:22
>>763
lstrcpyn(buffer, string, sizeof(buffer));

こいつも脂肪

767 名前:デフォルトの名無しさん :2005/12/03(土) 03:06:38
sizeofって使っちゃダメなの?

768 名前:デフォルトの名無しさん :2005/12/03(土) 03:19:59
ソースコードをいずれコピペするであろう時のことを常に念頭に置くことだ。

bufferの部分がポインタだったとしてもちゃんと動いて欲しいのが人情。
UNICODEビルドしたときにクラッシュして欲しくないのも人情。

769 名前:デフォルトの名無しさん :2005/12/03(土) 04:02:16
「明日の自分は赤の他人」、この心がけ大事。
特にハイテンションでコード書いてしまった次の日とか。

770 名前:デフォルトの名無しさん :2005/12/03(土) 04:04:22
特にハイテンションでレス書いてしまった次の日とか。

771 名前:デフォルトの名無しさん :2005/12/03(土) 04:16:49
>>770
ワロタw

「多い日も安心、次の日も安心」だよな、基本は。

772 名前:デフォルトの名無しさん :2005/12/03(土) 04:51:37
sizeofが駄目となるとstrlen使えってことなのか?

773 名前:デフォルトの名無しさん :2005/12/03(土) 05:00:50
>>772
もうネタは投下しなくていい。お前はよくがんばった。
だが、いかんせん可燃性に乏しいようだ。あきらめろ。

774 名前:デフォルトの名無しさん :2005/12/03(土) 05:06:28
分かってる奴は説明省略しすぎるし、
分かってない奴は自分で調べようともしないし、
ほんと質問スレとしては最悪だな。

・sprintf()に限らず、printf()系のフォーマットの幅指定は、
あくまで最低限確保される幅の指定であって、最大限じゃあない。
よって指定幅を超えた書き込みをすれば、指定幅を超えて書き込むので
バッファオーバーフローしうる。回避方法はないのでsnprintf()系を使うべき。
参考:>>715>>729>>735>>745

・sizeofは型及び変数のサイズ(バイト数)を返す。
文字列の長さを返すわけじゃないし、配列の要素数を返すわけでもない。
変数が配列なら配列サイズ(not 要素数)を返すが、ポインタならポインタのサイズを返す。
「ポインタと配列は全くことなるもの」という実例の1つだな。
参考:>>763>>766>>768

775 名前:デフォルトの名無しさん :2005/12/03(土) 05:12:13
>>774
>・sprintf()に限らず、printf()系のフォーマットの幅指定は、
>あくまで最低限確保される幅の指定であって、最大限じゃあない。

%100sと%.100sの違いも知らない池沼が何かホザいてるようだな。

776 名前:デフォルトの名無しさん :2005/12/03(土) 05:19:05
ああ、精度指定(ピリオドより後)って文字列にも効くのか。うっかりしてた。
>>774の上半分は無視してくれ。

777 名前:デフォルトの名無しさん :2005/12/03(土) 05:20:39
char *buffer = new char[128];
lstrcpyn(buffer, string, sizeof(buffer));

漏れこれではまったことあるな・・・

778 名前:デフォルトの名無しさん :2005/12/03(土) 05:31:06
よん?


779 名前:デフォルトの名無しさん :2005/12/03(土) 05:31:52
sprintf()は整数の場合は最大桁が予測可能だからオーバフローの心配をするまでもないのだが、
実数の場合は迂闊に%fを使うと1e300などと言う異常値が入ると300桁もの数値を吐き出しかねない。
以上を踏まえて注意を纏めてみる。

・最小幅指定はあくまでも入力が予測可能な場合にのみ意味がある。
#入力値が異常な場合、バッファオーバフローの危険が常に付き纏う。
・文字列→"%.*s", len, str などとして最大幅を制限する。
・整数値→INT_MAX(或いはその他)から桁数を計算できるのその分のバッファを用意する。
・実数値→%e/%gを精度指定とともに使うようにする。

そういう注意をした上でsprintf()を使うかCString::Format()などを使うかは強制されることではない。
まぁ、WinAPIスレだから仕方ないが世間知らずが多いよな。

780 名前:デフォルトの名無しさん :2005/12/03(土) 05:40:59
やっと良スレになってきたな

781 名前:デフォルトの名無しさん :2005/12/03(土) 05:43:10
だよね(^o^)

782 名前:デフォルトの名無しさん :2005/12/03(土) 08:04:32
unsigned long
をwin32api風に書くとどうなるんですか?
UNSIGNEDは定義されてないみたいです

783 名前:デフォルトの名無しさん :2005/12/03(土) 08:39:38
DWORD

784 名前:デフォルトの名無しさん :2005/12/03(土) 08:40:35
ありがと

785 名前:デフォルトの名無しさん :2005/12/03(土) 08:41:57
DWORD < ULONG < ULONGLONG

786 名前:デフォルトの名無しさん :2005/12/03(土) 09:26:55
>>755
>もう少し、未来を予測する能力を培ったらどうだろうか。
おまえこそ気にしてもしょうがないようなとここだわってるじゃん。
>>720についていってるのに「将来変更されたら〜」なんていつの話だよ。
将来変更される可能性なんていったって、お前の勝手な妄想だろ。

そんな一時保存的なバッファサイズだけに変更がかかったことなんて生涯を通して一度も無いよ。
お前の未来予測は当たる確率が低すぎて意味がねぇんだよw

787 名前:デフォルトの名無しさん :2005/12/03(土) 09:37:47
神崎タケノリは、姉歯秀次・創価学会員に
「そうはイカンザキー!!」といったのでしょうか。
ぜひTVで言ってください。
言わないのなら、誰か誇大広告でJAROに訴えてください。
大作が草加をゴミタメにした。

788 名前:デフォルトの名無しさん :2005/12/03(土) 09:46:17
>>785
俺はDWORDとULONG/ULONGLONGは別次元だと思っている。
DWORDLONGは自分では使わない。

789 名前:デフォルトの名無しさん :2005/12/03(土) 09:50:02
つか普通BYTE,WORD,DWORD,QWORD

790 名前:デフォルトの名無しさん :2005/12/03(土) 10:17:05
なぜWinAPIにはQWORDがないのかわからない。
DWORD64の前にQWORD作れよ。

791 名前:デフォルトの名無しさん :2005/12/03(土) 10:40:44
UINT64とかでいいのに…

792 名前:デフォルトの名無しさん :2005/12/03(土) 10:53:39
ULARGE_INTEGER

793 名前:デフォルトの名無しさん :2005/12/03(土) 11:30:44
>>762
GetLastError()でERROR_SHARING_VIOLATIONが返ってくれば共有違反

794 名前:デフォルトの名無しさん :2005/12/03(土) 11:36:17
>>786
>そんな一時保存的なバッファサイズだけに変更がかかったことなんて生涯を通して一度も無いよ。 

あきれ果てた上司PGがお前をプロジェクトから外したからだ。
代わりにソースコードの後継を任されたほかのPGが大変だったわけだ。
すぐにプロジェクトから外されるお前は、未来を予想する必要がなかった。
そういう意味ではお前の言っていることは間違ってないから、安心しろ。


795 名前:デフォルトの名無しさん :2005/12/03(土) 11:47:46
ネタがないからって変なケンカはやめろヽ(`Д´)ノ

796 名前:デフォルトの名無しさん :2005/12/03(土) 11:50:14
全ては使用禁止でFAが出ている関数を使い続けようとするモグリのせいだ。

797 名前:デフォルトの名無しさん :2005/12/03(土) 11:56:44
>>763
extern char *buffer;
こんなアホなコード書いてる訳かw

798 名前:デフォルトの名無しさん :2005/12/03(土) 12:13:00
MSDNのサンプルソースで大量に用いられるsizeof演算子。
PMの判断によって開発の最前線から外された窓際PGがサンプル作成を担当している。
const定数を使わずdefine定数を使ってバッファサイズを指定するところがさすが窓際。

799 名前:デフォルトの名無しさん :2005/12/03(土) 13:07:33
なんつーか、CとC++の区別がつかないおこちゃまが紛れているようだが。

800 名前:デフォルトの名無しさん :2005/12/03(土) 13:15:04
>>794
実のところお前も汎用性をつけるだけつけておいて、
全くそんなことが起きたことがないってことでFAだろ?
お前の未来予測は役に立たねぇんだよ。

801 名前:デフォルトの名無しさん :2005/12/03(土) 13:28:07
sprintfの使い方を知らなくて「使えねー」って騒いでいるわけか

802 名前:デフォルトの名無しさん :2005/12/03(土) 13:45:24
sprintfってwindows.hで宣言されてないから嫌いですぅ

803 名前:デフォルトの名無しさん :2005/12/03(土) 14:06:49
>>800は、PGとしての適正を否定されたことがそんなにくやしかったのか?
UnixコミュニティやWindows開発チームが到達した結論を否定するだけあってアフォだな。

804 名前:デフォルトの名無しさん :2005/12/03(土) 14:26:14
でもwsprintfは使える記述指定子が少ないから嫌いですお

805 名前:デフォルトの名無しさん :2005/12/03(土) 14:30:38
>>800
ヒント: 備えあれば憂いなし

806 名前:デフォルトの名無しさん :2005/12/03(土) 14:46:57
>>803
起こりもしないような不具合想定して、
いつも職場で大声で騒ぎたてる馬鹿が掲示板で元気だなぁwおいw

807 名前:デフォルトの名無しさん :2005/12/03(土) 14:49:15
>>806
John Robbinsの本でも読んどけ

808 名前:デフォルトの名無しさん :2005/12/03(土) 14:49:42
関係ないことでしか反論できなくなったら終わり

809 名前:デフォルトの名無しさん :2005/12/03(土) 14:53:02
John Robbinsが関係ないという人がいるスレはここですかw

810 名前:デフォルトの名無しさん :2005/12/03(土) 14:53:42
結局ここでも
「sprintfでバッファオーバーフロー」と言う奴はバカばっか(>>774)という実例が増えただけ

ちなみに>>765は、sprintfのフォーマット文字列が変更される可能性はあっても
Formatのフォーマット文字列が変更される可能性は無いと言ってます。

811 名前:デフォルトの名無しさん :2005/12/03(土) 14:54:19
>>806
起こるんじゃあない。起こすんだ、人間自身が。
人間のスペックを信頼している時点でお前はPG失格。氏ね。

812 名前:デフォルトの名無しさん :2005/12/03(土) 14:58:47
中には「是非sprintfを使え」という人も居るかもしれないけど
普通の人は>>737のように、「適材適所」ということを理解してるから。

盲目的に「sprintfは使えねえ」って言う奴はバカ
これだけは確実だけどね。

813 名前:デフォルトの名無しさん :2005/12/03(土) 14:59:37
「ヒューマンエラーしやすい手法をあえて使いこなしてこそ玄人」
という価値観ならば、C++は一切必要ないな、そいつには。
統合開発環境も必要ない。C言語さえ必要ない。アセンブラだけで十分だろ。
Win32API質問スレに来なくてもいいだろ、玄人なのだから。

814 名前:デフォルトの名無しさん :2005/12/03(土) 15:04:07
>>812
まだ判ってないな。本物の馬鹿だろ、お前。
sprintf()がプロジェクトで使えるかどうかは、末端PGが個人判断してよいことではないのだ。
PMが一方的に使用禁止と末端PGに命令して、初めてプロジェクトの安定性が確保される。
お前の個人的判断なぞは全く重要ではない。

815 名前:デフォルトの名無しさん :2005/12/03(土) 15:07:25
なんだ、「俺たち末端バカコーダにはsprintfは使いこなせない」と言いたかったんだ。

816 名前:デフォルトの名無しさん :2005/12/03(土) 15:08:30
うん、俺もそう思うよ。
>>774みたいに使いこなせないバカコーダー(ITドカタ)が
山ほどいるからね。

817 名前:デフォルトの名無しさん :2005/12/03(土) 15:10:38
盲目的と陰口されようが顔色ひとつ変えずに、関数を使用禁止できるPMが優秀なPM。
使うメソッド・使うアルゴリズムを制限していくからこそ、管理が楽になる。
末端PGに自由裁量を与えているようなチームは、ダメなチームだ。

818 名前:デフォルトの名無しさん :2005/12/03(土) 15:10:59
んー、sprintf使用禁止なプロジェクトってそんなに多いのかね?
一応CでもC++でも言語使用に定められた標準ライブラリに含まれるんだけど。
API以外使用禁止なんてところもあるんだろうな。

819 名前:デフォルトの名無しさん :2005/12/03(土) 15:15:17
で、sprintfを使用禁止にしておきながら
「boost::formatを使え」とか、言ってるわけだよ。
大笑いだね。

標準ライブラリすらまともに使えない末端コーダーに
boostの使い方を先に覚えさせようとするわけだ。
ま、確かに便利だけどね。

820 名前:デフォルトの名無しさん :2005/12/03(土) 15:16:36
>>818
>んー、sprintf使用禁止なプロジェクトってそんなに多いのかね?

多い。
標準ライブラリであることは安定性に関して何の保証にもならない。
標準ライブラリが保証するのは汎用性だけ。勘違いするな。

821 名前:デフォルトの名無しさん :2005/12/03(土) 15:17:00
Lhasaは全部APIでやってるそうな。

822 名前:デフォルトの名無しさん :2005/12/03(土) 15:19:39
はいはい、
「バカ」はsprintf使用禁止で良いよ。

「普通の人」は別にsprintf使っても、何の問題もないから。
もちろん、個人で何か作る場合も、複数で作る場合もね。

「末端職業プログラマ」のレベルは、実際酷いもんだし
バカが混じるプロジェクトで禁止するのも仕方ないかもね。


「バカの常識」を「一般人の常識」にはして欲しくないけど。

823 名前:デフォルトの名無しさん :2005/12/03(土) 15:20:24
キャリアアップを目指すならsprintf()反対。
末端下請けで突き進むならsprintf()賛成。

お前らの人生観次第だ。好きな方を選べ。

824 名前:デフォルトの名無しさん :2005/12/03(土) 15:22:43
>>822
バカかどうかじゃない。自分を過信するかしないかだ。
根本的に判ってないな、お前。

825 名前:デフォルトの名無しさん :2005/12/03(土) 15:22:51
自分自身が末端であることを
>>774みたいに証明してる人が沢山いるんだから

そりゃ必死になって
「sprintfを使うことの悪さ」を主張するわな。
「sprintfの悪さ」を主張しようとして、論破されちゃったもんだから。

826 名前:デフォルトの名無しさん :2005/12/03(土) 15:23:55
Win32APIの質問マダー?

827 名前:デフォルトの名無しさん :2005/12/03(土) 15:25:50
つまり、「明示的に禁止されているから」「バカが使い方を知らないから」以外に
「自分がsprintfを使うべきではない理由」は
何一つ挙げられないと。

828 名前:デフォルトの名無しさん :2005/12/03(土) 15:29:47
>>819
「アセンブラすらまともに使えない末端コーダーに
C言語の使い方を先に覚えさせようとするわけだ。」
と言っているに等しいな。

そもそも何をもって「標準ライブラリをまともに使える」と見なすか決めるのはお前ではない。
俺がPMならお前をプロジェクトから外すだろう。標準ライブラリをまともに使えてないと感じるからだ。

829 名前:デフォルトの名無しさん :2005/12/03(土) 15:31:02
このスレは釣られるバカが多くて楽しい ^^

830 名前:デフォルトの名無しさん :2005/12/03(土) 15:31:22
だって、「バカが使い方を知らない」という以外に
「sprintfの悪い点」を出せないから。

出そうとして自分の無知をさらけだしてしまい
必死に論点をずらしてるだけだから。

831 名前:デフォルトの名無しさん :2005/12/03(土) 15:32:48
(^o^)<YO!YO!チェケラッキョッ!

832 名前:デフォルトの名無しさん :2005/12/03(土) 15:34:25
そりゃまあ、>>774みたいな奴がプロジェクトに入るとわかっていたら
どんなPMでも、「このプロジェクトはsprintf禁止」にするでしょ。間違いなく。

833 名前:デフォルトの名無しさん :2005/12/03(土) 15:35:04
質問です!
バイナリエディタもどきを作成してみたいのですが
バイナリエディタにあるあのインターフェイスは
GDI関数でクライアント領域に直書きするものなのでしょうか?
それともエディットコントロール(orリッチエディット)で実装すべきでしょうか?
ご助言をお願いします!

834 名前:デフォルトの名無しさん :2005/12/03(土) 15:35:22
>だって、「バカが使い方を知らない」という以外に 「sprintfの悪い点」を出せないから。 

それだけで十分だ。それ以上の理由も必要ない。
「他人に合わせたくない」という孤高のPGはずっと下請けをやってもらうしかない。
実際、業界はそうなっている。

835 名前:デフォルトの名無しさん :2005/12/03(土) 15:35:40
そんな事よりstdio.hのprintfに対応するWinAPIは何ですか
_printfとかあると思ったのですがないようです

836 名前:デフォルトの名無しさん :2005/12/03(土) 15:42:33
だから、「sprintfの悪い点」を挙げろよ。
もちろん自分で使う上で。
末端コーダが、自分で何か作ろうなどという創造的なことをしないだろうというのは
分かるけどさ。

「自分みたいなバカが加わるプロジェクト」は大抵sprintf禁止なのはもうわかったよ。

バカがsprintfを使うのは良くないのは>>774で良くわかったから
普通の人が自分のプログラムでsprintfを使ってはいけない理由は?

837 名前:デフォルトの名無しさん :2005/12/03(土) 15:43:33
>>835
ない。unixにもない。

_write()に対応するAPIならある。
GetStdHandle()
WriteFile()

838 名前:デフォルトの名無しさん :2005/12/03(土) 15:43:48
スレ違いの話題で荒らすなぼけ
くだらん論争はCスレ言ってやってこいぼけ

839 名前:デフォルトの名無しさん :2005/12/03(土) 15:46:07
>>836
思う存分、使えばいい。>>755で答えは出ている。

840 名前:デフォルトの名無しさん :2005/12/03(土) 15:49:00
>>837
GetStdHandle+wsprintf+WriteFile使ってみるわ

841 名前:デフォルトの名無しさん :2005/12/03(土) 15:49:24
「末端コーダーを目指す人はsprintf禁止」ということですね。

842 名前:デフォルトの名無しさん :2005/12/03(土) 15:52:06
>>840
UNICODEビルドの場合はマルチバイトに変換してから出力する必要あり。要注意。

843 名前:デフォルトの名無しさん :2005/12/03(土) 15:54:44
まだやってたんか('A`)

844 名前:デフォルトの名無しさん :2005/12/03(土) 15:55:46
>>840
wsprintfを使う時はバッファサイズを1024以上取り、
なおかつ全体が1024以上にはならない程度の文字列にしないと。

しかも末端コーダーを目指す人は使わない方が良いらしいぞ。

845 名前:デフォルトの名無しさん :2005/12/03(土) 15:56:01
>>842
Unicodeつかわね
あとWinapiでstrlenに対応する関数はどれですか。

846 名前:デフォルトの名無しさん :2005/12/03(土) 15:57:34
>>845
sizeof

847 名前:デフォルトの名無しさん :2005/12/03(土) 15:58:18
lstrlen

848 名前:デフォルトの名無しさん :2005/12/03(土) 16:00:55
ありがと

849 名前:デフォルトの名無しさん :2005/12/03(土) 16:05:06
>>755はもしかして
char buff[BUFFER_SIZE];
sprintf(buff, "%.200s", s);
みたいな使い方を想定してるのか?
明示的にdefineした定数の数字を想像して%.200なんて書く奴なんか居ないよ。

逆に
char buff[200];
の"200"という数字をgrepするというのなら、
defineやconstを使わないで200という重要な数字を生で書いているということだよな?

もちろん、ローカルのバッファならそれで充分だが
そんなのgrepして見つかっても書き直すわけ無いし。

逆に引数等でバッファサイズが与えられるなら、必ず.*を使うし

どう考えても「バッファサイズを変更する>>755の状況」が想像つかないね。
俺には。

850 名前:デフォルトの名無しさん :2005/12/03(土) 16:12:44
>>849
入力側の予想されるサイズが変わった時のコストを考慮してないのは、何故だ?
わざと無視してるのか?

851 名前:デフォルトの名無しさん :2005/12/03(土) 16:15:11
>>833
APIの質問でなく、機能の実装方法だからスレ違いな気もするが・・・
くだらない論議にうもれてしまいそうで、かわいそうなので、

どういう仕様のエディタを作るかによるが、GDI直書きがおすすめ。

(リッチでない)エディとコントロールは64K文字しか扱えないので、
バイナリエディタじゃ足らないでしょう。
リッチエディトで頑張ればそれなりの物は作れるが、バイナリエディタなりの
カーソルの動き等を実装しようとすると、かえって大変。

自分で全て制御・描画するほうが最初は手間がかかるが融通が利く。


852 名前:833 :2005/12/03(土) 16:18:47
>>851
あ、ありがとうございます!
スレ違いでしたか、にもかかわらず答えていただいてありがとうございます!
直書きでやってみます!

853 名前:デフォルトの名無しさん :2005/12/03(土) 16:23:51
>>850
ん、ちょっと真面目に議論しようよ。スレ違いだけど。

他との関連があるバッファだったら、
(例えば構造体のメンバとかで他と受け渡しするものなら)
defineなりsizeofなりを使って、バッファサイズを取得するでしょ?
つまり、"%.200"というリテラルを使うことはあり得ないわけ。
動的に確保したサイズを渡す場合にしても。

逆に、ローカル変数でのバッファだったら、その関数内で完結するわけでしょ?
その場合は、バッファの大きさが数字で直接書かれているだろうけど
そのバッファを使用するのがそもそも関数内だから
バッファサイズを変更したら、そのバッファを使っている部分(関数内)を一通り見て
影響がないか確認するのが常識じゃないの?

もちろん、「その程度のことすらまともに出来ない人間」が存在するのは確かだけど
「自分で作って自分で使う部分」なら問題にならないんじゃないの?

それに、例えば数字→文字列とか、ディレクトリ+ファイル名+拡張し→文字列
みたいなのは、ある程度上限があるから、
あらかじめ余裕をもって確保するべきだと思うし。

854 名前:デフォルトの名無しさん :2005/12/03(土) 16:25:44
示し合わせて他所へ行けっての

855 名前:デフォルトの名無しさん :2005/12/03(土) 16:32:18
>>849は書式に関する深い知識と経験を用いて、
書式文字列をsprintf()で作ってからsprintf()を実行するから、なんら問題ないよ。
それができないお前らは(ry

856 名前:デフォルトの名無しさん :2005/12/03(土) 16:35:48
>>852
VB使って、あの表示部分をユーザーコントロールとして作ってしまう、
もしくは、VCなら1個のクラスでまとめてしまうと楽

857 名前:デフォルトの名無しさん :2005/12/03(土) 16:36:53
>>855
"%.*"って知ってるかい?



858 名前:デフォルトの名無しさん :2005/12/03(土) 16:38:11
  ,,,,_  
 /,'3 `ァ <もうだめぽぉ
 `ー-‐`

859 名前:デフォルトの名無しさん :2005/12/03(土) 16:40:10
要するにだな、>>755が全ての答えだ。
>>755の文意を理解できた人間は職業PGを続けていい。
>>755の文意を理解できない人間は即刻職業PGをやめろ。

860 名前:デフォルトの名無しさん :2005/12/03(土) 16:40:16
>>853
うざい
スレ違いだとわかっているなら他所へいけぼけ
そんな判断さえできんやつが屁理屈こねたところで
どうせロクなコードは書けん
わかったら消えろぼけ

861 名前:デフォルトの名無しさん :2005/12/03(土) 16:42:29
>>755の文意を理解できた人間は末端コーダーを続けていい。
>>755の文意を理解できない人間は即刻末端コーダーをやめろ。

sprintfの悪いところは、末端コーダーが使いこなせないことだから。

862 名前:デフォルトの名無しさん :2005/12/03(土) 16:48:33
要するにここまでの議論を読むと結論は、
糞PGの集団は、>>755に従えってことだね

863 名前:デフォルトの名無しさん :2005/12/03(土) 16:54:04
>>862
結論はスレ違いウザイってことだろ?

864 名前:デフォルトの名無しさん :2005/12/03(土) 16:54:28
職業PG=薩長軍
アマPG=彰義隊・新選組

派手なのはどっち?
強いのはどっち?

865 名前:デフォルトの名無しさん :2005/12/03(土) 16:56:14
この手の標準?APIの使い方というか、危険、安全の議論をするスレは無いの?
無いんだったらここでいいじゃん。

866 名前:デフォルトの名無しさん :2005/12/03(土) 16:56:16
お久しぶりです(^o^)
さっそくですがツールバーやメニューバーに視覚スタイルを適用する方法を教えてください(^o^)
他の掲示板にいったけど完全にスルーされたので戻ってきました^^
http://up.mugitya.com/img/Lv.1_up12444.jpg
メニューバー・ツールバーを作ってみたら、上の奴のようになってしまうのです。
下や真ん中の奴のように視覚スタイルを適用したいのですがどうすればよいのでしょうか?
DrawThemeBackgroundでできると思ったのですが、それらしい定数が見つかりません(分かりません)
何卒お願いいたします(^^)

867 名前:デフォルトの名無しさん :2005/12/03(土) 16:57:17
>>866 はコピペ荒らしなのでスルーするように

868 名前:デフォルトの名無しさん :2005/12/03(土) 17:00:17
>>865
APIじゃないs

869 名前:デフォルトの名無しさん :2005/12/03(土) 17:01:59
職業PG=前田利家
アマPG=前田慶次

ただし、漫画じゃなくて史実の方。

870 名前:デフォルトの名無しさん :2005/12/03(土) 17:03:24
↓ ここが適当なのかな… いちおうあげといたけど

セキュアなプログラムを作ろう パート1
http://pc8.2ch.net/test/read.cgi/tech/1113622199/

871 名前:デフォルトの名無しさん :2005/12/03(土) 18:45:24
sprintf()の利点って「標準である」ってだけだろ。
このスレで議論されてるようなWin32APIを利用するバリバリ環境依存
プログラムでわざわざ(_snprintf()ではなく)sprintf()を使う理由って
あるのか?

872 名前:デフォルトの名無しさん :2005/12/03(土) 18:47:18
MessageBox(NULL, ">>1-1000 スレタイ嫁", "もちろん、オレモナー", 0);

873 名前:デフォルトの名無しさん :2005/12/03(土) 18:52:43
apiならwsprintf

874 名前:デフォルトの名無しさん :2005/12/03(土) 19:04:54
vsprintf()は使うな、でFA?

875 名前:デフォルトの名無しさん :2005/12/03(土) 19:19:29
引き継いだ香具師がアフォだったんだろ

876 名前:デフォルトの名無しさん :2005/12/03(土) 19:22:31
>>806
お前みたいなやつが2000年問題を引き起こしたんだということがまだ分からんのか

877 名前:デフォルトの名無しさん :2005/12/03(土) 19:26:11
くどい

878 名前:デフォルトの名無しさん :2005/12/03(土) 19:26:13
2000年問題は空騒ぎにしか思えんな

879 名前:デフォルトの名無しさん :2005/12/03(土) 19:29:13
>>834
最近のプログラムの品質が落ちたのはそのせいか

880 名前:デフォルトの名無しさん :2005/12/03(土) 19:30:42
>>875
俺にとってはフクザツな書式指定と計算を使ってまで、わざわざsprintf()を使ってる
奴の方が余程アフォだな。
_snprintf()ならば、そのコードで「バッファオーバーフローが起きない」ことを
はるかに簡単・確実に保証できるのに。

無論C++なのにsprintf()使ってる奴は、「論外」な。

881 名前:デフォルトの名無しさん :2005/12/03(土) 19:32:21
>>879
便利な道具があるのにそれを使わない奴は一生ハンドアセンブルしてろってこった。

ま、一方で「便利な道具」にプログラマがスポイルされたことは、否定しない。


882 名前:デフォルトの名無しさん :2005/12/03(土) 19:32:22
スレの質が急激に低下しております

883 名前:デフォルトの名無しさん :2005/12/03(土) 19:38:47
どうして適切なスレがあるのにここで続けようとするんだろう

884 名前:デフォルトの名無しさん :2005/12/03(土) 19:39:28
>>851
64k制限って2k/XPあたりではなくなってるんじゃなかったっけ?

>>833あわれだなぁ。もうちょっとタイミングいい時にくればいいのに。

885 名前:デフォルトの名無しさん :2005/12/03(土) 19:54:27
>>833
SPYか何かで、既存エディタが何使ってるか
調べてみればいいかも

886 名前:デフォルトの名無しさん :2005/12/03(土) 20:33:28
隔離されてることも気付かず議論してる様はすごく笑える。

887 名前:デフォルトの名無しさん :2005/12/03(土) 20:50:07
誰か>>779の検証、解説してくれ。
>>779はsprintfを使うなと言ってるのか使ってもいいといってるのかどっちだ。

888 名前:デフォルトの名無しさん :2005/12/03(土) 20:50:56
sprintfの話は↓へ逝け
セキュアなプログラムを作ろう パート1
http://pc8.2ch.net/test/read.cgi/tech/1113622199/

889 名前:デフォルトの名無しさん :2005/12/03(土) 20:53:23
質問です
apiとmfcは同じようなものなのですか?理解が進んでいないので抽象的な質問しかできないですが、この2つの違いをご教授していただけたら幸いです

890 名前:デフォルトの名無しさん :2005/12/03(土) 21:08:33
違います

Win32APIはWindowsのシステムが提供する機能を使うための関数インターフェース群
MFCはそれを使いやすくした「クラス群」

APIはCとかC++とか関係無いが、MFCはCじゃ使えない

891 名前:デフォルトの名無しさん :2005/12/03(土) 21:12:28
>>889
MFCはAPIを使うクラスライブラリだからコーダーを目指さないsprintf使いには不要

とか回答するとスレ違いになるのか?

892 名前:デフォルトの名無しさん :2005/12/03(土) 21:17:38
MFCならCString::Formatがほぼsprintf

893 名前:デフォルトの名無しさん :2005/12/03(土) 21:17:50
sprintfの話は↓へ逝け
セキュアなプログラムを作ろう パート1
http://pc8.2ch.net/test/read.cgi/tech/1113622199/

894 名前:デフォルトの名無しさん :2005/12/03(土) 21:18:54
sprintf厨 Uzeeeeeeeeeee

895 名前:デフォルトの名無しさん :2005/12/03(土) 21:20:48
>>889
MFCは糞である事を覚えておいて損はないでしょう

896 名前:デフォルトの名無しさん :2005/12/03(土) 21:23:33
VCL最強

897 名前:デフォルトの名無しさん :2005/12/03(土) 21:41:39
リッチテキストっつえば、EM_FINDTEXTには
後方検索の機能がないんだけど
どっかに隠し機能としてでもあるんだろか?
今は、2進探索と組み合わせてなんとか実現してるんだけど
メガ級のテキストになると遅くて遅くて。

898 名前:デフォルトの名無しさん :2005/12/03(土) 21:56:03
Delphi厨だけど何か質問ある?

899 名前:デフォルトの名無しさん :2005/12/03(土) 22:01:18
>>897
メモリマップ度ファイルと組み合わせて


900 名前:デフォルトの名無しさん :2005/12/03(土) 22:10:21
>>755みたいな人って職業PGなの?
こんな口調の書き込みは餓鬼がしてるものだと思ってたのだが。

901 名前:デフォルトの名無しさん :2005/12/03(土) 22:15:21
それが参照している748のほうが餓鬼に見える。

902 名前:デフォルトの名無しさん :2005/12/03(土) 22:21:38
あれ?ここ職業PGいたの?

903 名前:流れを帰るな!変えろ! :2005/12/03(土) 22:22:37
MessageBox関数が導入されたのはいつぐらい?
古いドキュメントが手元にあるんですがWindows3.1ぐらいから存在してることは確かですが…

904 名前:デフォルトの名無しさん :2005/12/03(土) 22:24:48
まあMessageBoxが要Win98/2kあるいはIE4以上だったら救いようがないな。
ところで9xにもMessageBoxWがあるのはありがたい。

905 名前:デフォルトの名無しさん :2005/12/03(土) 22:26:16
>>900
2chはおとながこどもに、こどもがおとなになるワンダーランドなのです

906 名前:デフォルトの名無しさん :2005/12/03(土) 22:29:11
僕も子供になっておっぱいわしづかみして甘えたいよ ママー

907 名前:755 :2005/12/03(土) 22:32:23
>>900
たまにはキレることもあるさ。
ついつい自分の体験がオーバラップしてしまったもんで。
やっかいなのは、「俺って玄人だから必要ない。」というタイプ。
こういうタイプを真っ先に開発から排除する必要がある。
こういうタイプが入るとえてしてソース管理がいい加減になる傾向に・・・。
バカが自分でわざわざ仕事増やしてるんだから、当然そうなるわけで。

908 名前:デフォルトの名無しさん :2005/12/03(土) 22:39:36
  応援 どうもありがとうございます...・゚・。・゚゚・*:.。 .・゚・☆


./⌒丶、                        , イ
(丶   `丶.          __ __  ..      , .イ ソ
ミ .  `丶、 ヽ、     , ´  ,.-〜へヽ  /  彡
ミ  `丶、 ヽ、 \   /ヽヽヾ〈 __  ハ V   彡
 乂ヽ  ヽヽ ヽー\il i il ハ ! } ノ ,ィオ f-;〈    ソ      あなたもあるぅ〜  翼があるぅ〜
 ( \ヽヽ ヾ ヽ ヽヽ V il 〉 ハ {    __ i  ツ   
  ( \ ヽヽ ヽ ヽヽ V// //ソ   ` ´ } シ            飛び立つのよぉ〜  空へと〜 ♪
   \__  ヽ ( (.__ヽヽ }i ノ ノ イ   ァrr‐く'    
    ゝ.__  (__ __ <r'< 〈   / /i|ー- 、
      > .__ /   トv ハ 〉  / リ    ヽ         
       ( __ _/    .| 〉V/     i〉    }        美しいわぁ〜  しあわせでしょ〜
         ノ!    |/ ヽ.    リ    ,'            
        // |    |{       リ   /              風にのり〜  虹をわたろぅ〜 ☆
        从i l|`ヽ.  |`ー -- ---く!   /_
        >-‐‐ }   !.    ,'   }  ノf i
       >' イこ i   !      ノ   /  〉
     ,. --'´に.. l   ヽ.___ < __ ___j  i______
   ,.- '     ` ̄ヽ!            ノ みなこ .
. /          `ー─ -- -- -- ─ "´









909 名前:デフォルトの名無しさん :2005/12/03(土) 23:49:23
>>878
年末返上で必死に対策した香具師らにあやまれっ!

910 名前:デフォルトの名無しさん :2005/12/03(土) 23:51:17
>>900
自分がソースを追えない責任を関数に求めているだけだからスルーしろ

911 名前:デフォルトの名無しさん :2005/12/03(土) 23:53:30
「派遣」「使い捨て」「最底辺」「コーダー」「プライド」あたりがキーワード

912 名前:デフォルトの名無しさん :2005/12/04(日) 01:07:16
>>853でFAだと思う。俺。
sprintf使っちゃ駄目とか言ってる奴は
どう考えてもちょっとした不具合例に挙げておおげさに言いすぎだと思う。

913 名前:デフォルトの名無しさん :2005/12/04(日) 01:11:09
議論はスレ違いなので、こっちでどうぞ。

C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc8.2ch.net/test/read.cgi/tech/1049790146/


914 名前:デフォルトの名無しさん :2005/12/04(日) 01:12:40
>>753
snprintfってC標準ライブラリ?

915 名前:デフォルトの名無しさん :2005/12/04(日) 01:20:06
>>912
>>774>>855が、「業界」のレベルなので
仕方がないのです。
本人には、自分が最底辺という自覚はありませんが。

916 名前:デフォルトの名無しさん :2005/12/04(日) 01:21:54

scanf 最強!

917 名前:デフォルトの名無しさん :2005/12/04(日) 01:24:39

漢なら gets !!

gets 最強伝説

918 名前:デフォルトの名無しさん :2005/12/04(日) 01:25:49
sscanfは16進文字列から数字に直すときによく使った希ガス

919 名前:デフォルトの名無しさん :2005/12/04(日) 01:31:07
>>916
すまんがscanfとはどんなAPIですか?

920 名前:デフォルトの名無しさん :2005/12/04(日) 01:32:38
バッファオーバフローノーケアな標準関数だけを使って
ノーバグでセキュアなプログラムを作るコンテストとかやったら
おもしろそうだ。

921 名前:デフォルトの名無しさん :2005/12/04(日) 02:09:59
scanfは書式が実行時でないと決まらんから
余計な変換手順も持ち込むんで
オブジェクトがばかでかくてカナ湾

922 名前:デフォルトの名無しさん :2005/12/04(日) 06:14:37
>>920
パンクラス、K-1のレベルだな。

923 名前:デフォルトの名無しさん :2005/12/04(日) 06:40:55
アプリケーションソフトってのはな、動作が重いほうがありがた味が増すんだよ。
勿体つけて処理した方が一般人は凄いことやってる錯覚に陥ってくれる。
お前らCプログラマがコードを高速化したところで、かえって一般人から軽んじられるんだよ。

924 名前:デフォルトの名無しさん :2005/12/04(日) 07:09:41
ヒドイアリサマデスネ

925 名前:デフォルトの名無しさん :2005/12/04(日) 07:14:32
>>923
そう思うのは本当の初心者だけ。
処理が単純なのにやたら重いソフトはMFCを必要以上に使ってるとかバレバレ。
ましてやそんな理由で無駄にSleepとか使ってわざと重くしたらすぐわかる。

926 名前:デフォルトの名無しさん :2005/12/04(日) 07:17:05
ヒドイアリサマデスネ

927 名前:デフォルトの名無しさん :2005/12/04(日) 07:36:20
>>923
あまりにひどいと自分で組んでフリー公開したくなる

928 名前:デフォルトの名無しさん :2005/12/04(日) 08:02:12
LoadImage, SetPixel, GetPixelの
DIB版がありましたら教えてください。

929 名前:デフォルトの名無しさん :2005/12/04(日) 08:07:12
やはり決め手はプログレスバーだな。
1つのファイルの処理進行状態で1つ、全体の処理の進行状態で1つの
2つは用意できるとユーザーも大喜びだ。
もちろん処理が一瞬で終わるからといって一瞬で終わってしまっては意味が無い。
意味もなく処理に時間をつかうんだ!
DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!

930 名前:デフォルトの名無しさん :2005/12/04(日) 08:12:35
プログレスバーは偉大だな。
ほんと、プログレスバー様様ですよ!

931 名前:デフォルトの名無しさん :2005/12/04(日) 08:18:33
>>923
初心者は声を揃えて言います。

「ノー○ンは最強のセキュリティソフトだ!!」

932 名前:デフォルトの名無しさん :2005/12/04(日) 08:25:05
>>928
CreateDIBSectionは?

933 名前:デフォルトの名無しさん :2005/12/04(日) 08:35:42
以下は実話をTVで再現する番組で見たやつ

ある優秀な鍵業者がいた。
彼は、鍵を閉じ込めてしまった客の緊急依頼に即座に駆けつけては
短時間で開錠するサービス熱心で真面目な男だった。
その鍵業者があまりに簡単に開錠するので、値切ったり金を払わずにすませようとする客が多かった。
ウンザリした鍵業者は仕事を止め、開錠の専門学校を設立することにしたのだった。

934 名前:デフォルトの名無しさん :2005/12/04(日) 08:40:39
>>929-930
プログレスバーは控えめに小さく出して
画面真っ暗にしてディスプレイが鏡のようになるようにする。

「この待ち時間に身だしなみを整えてください。」


935 名前:デフォルトの名無しさん :2005/12/04(日) 08:45:29
お前ら、バカばっかりだな。
客からすれば、業務ソフトとゲームソフトの違いなんてないんだよ。
遊園地のアトラクションで長時間乗ってたら料金が多くかかるだろ。
同じように鈍行列車に乗ったほうが料金が多くかかるものなのだと客を躾ければいいのさ。
新幹線?航空旅客機?
技術の無駄だな。

936 名前:デフォルトの名無しさん :2005/12/04(日) 08:54:57
>>925
>処理が単純なのにやたら重いソフトはMFCを必要以上に使ってるとかバレバレ。 

MFCさんをいじめるな!!
そんな奴はAPI直書きでもタコソースを書く。

937 名前:デフォルトの名無しさん :2005/12/04(日) 08:59:40
>>918
単に16進法文字列からなら数値にしたいだけならstrtol/strtoulなんかで十分だ。

938 名前:デフォルトの名無しさん :2005/12/04(日) 09:01:06
>>936
http://pc8.2ch.net/test/read.cgi/tech/1059196520/


939 名前:デフォルトの名無しさん :2005/12/04(日) 10:02:59
>>936
別にMFCが悪いとは言ってないが。
ただ使う場所を間違えると速度が遅くなるかと。

940 名前:デフォルトの名無しさん :2005/12/04(日) 10:05:49
全部VCLな漏れには関係ないさ(*´ω`*)


941 名前:デフォルトの名無しさん :2005/12/04(日) 10:13:34
>>939
使う場所間違えると遅いのは、STLやboostでも同じッスよ。
つか、ライブラリなるものは全てそうでしょ。

とりあえず、
MFCさんをいじめる人はボクが許さない!!

942 名前:デフォルトの名無しさん :2005/12/04(日) 10:17:35
MFCはスレ違い
うせろ

943 名前:デフォルトの名無しさん :2005/12/04(日) 10:19:37
>>936
タコソースってたこ焼きソースか?(藁

944 名前:デフォルトの名無しさん :2005/12/04(日) 10:33:56
>>932
ありがとうございます。

945 名前:デフォルトの名無しさん :2005/12/04(日) 12:54:24
あーあ、>>943のせいでスレが急に寒くなったな。

946 名前:デフォルトの名無しさん :2005/12/04(日) 13:03:38
423GJ

947 名前:デフォルトの名無しさん :2005/12/04(日) 13:31:45
プログラムから環境変数を設定したいんだけどどうすればいいですか

948 名前:デフォルトの名無しさん :2005/12/04(日) 13:37:36
石やーきいーもー おいもー

949 名前:デフォルトの名無しさん :2005/12/04(日) 13:44:06
>>947
SetEnvironmentVariable

950 名前:デフォルトの名無しさん :2005/12/04(日) 13:59:13
>>949
システム環境変数を設定したいのです。

951 名前:デフォルトの名無しさん :2005/12/04(日) 15:15:20
こんにちは、よろしくお願いいたします。
vc++でプログラムを作っていますが、
exeファイルの存在するフォルダに
datファイルを、おいて、参照あるいは、書き込みをしています。
datファイルのパスはGetCurrentDirectoryで収得して、
変更できないよう最初1度だけ読み取っています。
それで、違うフォルダーのテキストファイルにアクセスした場合、
そこのフォルダーで、どうも、datファイルを探している場合が、
ちょくちょくあります
そういうことは、皆様ありませんでしょうか。

952 名前:デフォルトの名無しさん :2005/12/04(日) 15:19:52
あなたの場合、日本語の勉強が先でしょう。

953 名前:デフォルトの名無しさん :2005/12/04(日) 15:22:11
関係あるかどうかわからんが
GetCurrentDirectoryが必ずしもexeのあるフォルダを指すとは限らんよ

954 名前:デフォルトの名無しさん :2005/12/04(日) 15:33:57
DOSさわったこと無いプログラマが増えてきたんかな。

955 名前:デフォルトの名無しさん :2005/12/04(日) 15:46:14
>>951
GetModuleFileName使えば?

956 名前:デフォルトの名無しさん :2005/12/04(日) 16:01:16
>>947,954
PSPから環境変数領域のセグメントを調べて
直接書き換えればよい
ttp://www5c.biglobe.ne.jp/~ecb/assembler2/2_1.html

Windows上なら別プロセスに対しては意味が無くなるので
素直に >>949 の SetEnvironmentVariable 等を使う方がよい

957 名前:デフォルトの名無しさん :2005/12/04(日) 16:08:12
>>956
WinNT系ならレジストリいじればいいはず。
Win9x系なら非公開APIを使ってシステムの環境変数領域を取得し、
メモリの内容を直接書き換える。

958 名前:デフォルトの名無しさん :2005/12/04(日) 16:09:09
>>929
>DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!

おいおい、それ俺のNEC Lavie のノートPCだおwwwwwwっww
画面のスクロールするとキーンwww

959 名前:デフォルトの名無しさん :2005/12/04(日) 18:15:56
GetOpenFileNameへのコントロールの追加を「CreateWindowで」動的に、
行いたいのですが、次のようなHookProcではうまくいきません。
具体的には、ダイアログの描画が適切に行われず、画面が乱れます。
どうしたらよろしいでしょうか?

UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_INITDIALOG : {
            MoveWindow(hdlg, 30, 17, 300, 22, FALSE);
            CreateWindow("ComboBox", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 100, hdlg, (HMENU)0x1000, Instance, 0);
            return 0;
        }
    }
    return 1;
}

960 名前:デフォルトの名無しさん :2005/12/04(日) 18:32:28
>>951です
>>952さんそうですね。日本語難しいです。
>>953さん。
確かにexeを指すわけではないようなので、
一番最初の立ち上げにカレントフォルダを取得したらいいのかなと思っているのですが。
>>954さんdirやcd なんかしかつかわなくて、
>>955さんへ。
一度試したのですが、最初からうまくいかなくて、
どううまくいかないのか、よくわかりません。
ので、もう少し試してみます。

皆様いろいろありがとうございます。


961 名前:デフォルトの名無しさん :2005/12/04(日) 19:17:22
>>960
GetModuleFileName (GetModuleHandle(NULL),buff,sizeof(buff)-1);
こいつからdatファイルのパスを生成汁

962 名前:デフォルトの名無しさん :2005/12/04(日) 19:21:49
>>961をもう少し丁寧に言うと


GetModuleFileNameで実行ファイルのパス取得
         ↓
PathRemoveFileSpecでファイル名部分を削除
         ↓
PathAppendでそれとdatファイル名をくっつける
         ↓
datファイルのパス完成

963 名前:デフォルトの名無しさん :2005/12/04(日) 22:16:05
>>962
駆け出しの頃に誰もが困惑した経験があるのが、バックスラッシュの切り出しだよな。

【初心者へのお題】
以下のフルパスからディレクトリ名とファイル名を分割せよ。
ただし、tchar.hとC標準関数を用いること。Win32APIは使用禁止。

C:\噂の真相\一覧表\赤十字.doc

964 名前:デフォルトの名無しさん :2005/12/04(日) 22:17:20
スレ違いだゴルァ

965 名前:デフォルトの名無しさん :2005/12/04(日) 22:20:49
今アプリケーションを作成していまして、検索ダイアログを
作ったのですが、いったん検索ダイアログを閉じてしまうと、
CFindReplaceDialogオブジェクトがNullになってしまうので
すが、どうにかして状態を残しておくことはできないでしょうか?
CFindReplaceDialogオブジェクトを残しておきたい理由としまして、
ダイアログを閉じても、F3ボタンで検索の続きができるように
したいのです。どなたか教えていただけないでしょうか?

966 名前:デフォルトの名無しさん :2005/12/04(日) 22:27:02
スレ違い

967 名前:デフォルトの名無しさん :2005/12/04(日) 22:29:51
>>965
こちらでどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1131958904/

968 名前:デフォルトの名無しさん :2005/12/04(日) 23:39:26
何だったか忘れたけど日本語対応の
jstrrchrって関数がついてるコンパイラがあったなぁ

969 名前:デフォルトの名無しさん :2005/12/04(日) 23:48:31
そんなのはMSC/VCにもあるぞ。

970 名前:デフォルトの名無しさん :2005/12/05(月) 13:10:50
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1206.txt

//パレット(RGBQUAD構造体)の終わりの位置の取得
offSet = *(LPDWORD)(*buf + 10);

は、コメントの通り、ビットマップメモリの始めから、
パレットの終わりの位置を得る式だと思うんですけど、
(1,24ビットなら54+0、4ビットなら54+16*4、8ビットなら54+256*4)
なぜこの式でそれが得られるのでしょうか。

971 名前:デフォルトの名無しさん :2005/12/05(月) 13:26:22
>>970
BITMAPFILEHEADERのbfOffBitsパラメータを参照してるだけ



972 名前:デフォルトの名無しさん :2005/12/05(月) 13:30:25
>>970
bufが指す位置にはBITMAPFILEHEADERがある。

っていうか、そのプログラム合ってる?
offset=のところ、*が1個多くね?

973 名前:デフォルトの名無しさん :2005/12/05(月) 13:42:47
>>972
bufはLPBYTE*だからあってるよ。

974 名前:970 :2005/12/05(月) 13:44:04
ありがとうございます。

>>971
なるほど。分かりました。
ビットマップファイルを作るときそこに値を入れますもんね。

>>972
VCとBCCで一応正しく動作しています。
DIB系のは、サイトに載っているのがグローバリー変数なので、
ローカル変数で出来るように意識したんですが、
記述としてよい書き方かは、良く分かりません。

975 名前:970 :2005/12/05(月) 13:45:14
>>973
あってて良かったです。

976 名前:デフォルトの名無しさん :2005/12/05(月) 14:18:47
>>973
ウホ ほんとだ。よく見てなかった。
bufはLPBYTEだと思い込んでた。

977 名前:959 :2005/12/05(月) 16:18:41
無理なんでしょうか

978 名前:デフォルトの名無しさん :2005/12/05(月) 16:47:43
スレッドの中から自分を Create したときの
ハンドルを取得したいと思い
スレッドの中で以下のようにしました

HANDLE hThreadFake = GetCurrentThread();
HANDLE hThreadReal;
DuplicateHandle(
hThreadProcess,
hThreadFake,
hThreadProcess,
&hThreadReal,
0,
FALSE,
0
);

このようにして得られる
ハンドル hThreadReal が
このスレッドのハンドルではなく
なぜか,次にスレッドを Create したときの
ハンドルになります.

なぜこのようになるのでしょうか?


979 名前:デフォルトの名無しさん :2005/12/05(月) 18:01:53
GetMessage()でユーザからのメッセージをmsgに格納し,
それをDispatchMessage()でウィンドウプロシージャに渡す事は解りましたが。

例えばウィンドウA,Bを作成し、ウィンドウAへのメッセージとウィンドウBへのメッセージも
このメッセージループで取得されますよね?そしてDispatchMessageで適当なウィンドウプロシージャへ
送出するのですが。
この送出先というのは、DispatchMessageがMSG構造体のメンバHWND hwndから判断してるのでしょうか?

980 名前:デフォルトの名無しさん :2005/12/05(月) 19:13:52
>>978
レスが1000件に到達したから

981 名前:デフォルトの名無しさん :2005/12/05(月) 19:16:25
>>979
それは違う
そこに来るのは自分宛のMsgのみ

DispatchMessageで回ってくるMsgとは別に
Windows自身がMsgキューを持っている
そちらにはどのWindowsへ送るMsgかのハンドルを持っている

982 名前:デフォルトの名無しさん :2005/12/05(月) 19:57:06
>>981
??????????
別々のウィンドウでも同じアプリケーションのものなら単一のメッセージループですが?(一部除く)
>>979のウィンドウA、Bもそういうことだろ?

983 名前:デフォルトの名無しさん :2005/12/05(月) 21:00:00
>>959
なんでそんなめんどくさいことしてんの?
lpTemplateNameじゃ駄目なん?

984 名前:デフォルトの名無しさん :2005/12/05(月) 22:09:48
>>962さん丁寧に教えていただきありがとうございます。
その通りにするとちゃんとできました。
>>963さん
char *Getdictory(){
char moji[] = "C:\噂の真相\一覧表\赤十字.doc";
int mojicount = strlen(moji);
char damy[mojicount+1];
int i,j;
for(i=0;i<strlen(moji);i++){
if(moji[mojicount-i]=='\\') break;
}
for(j = 0;j<i;j++){
damy[j] = moji[j];
}
damy[++j]='\0';
return damy;
}
こんな感じでしょうか。コンパイラーは通してないですが、
場違いですみません。


985 名前:デフォルトの名無しさん :2005/12/05(月) 22:13:49
>>984訂正
for(j = 0;j<i;j++){
ここちがう。
for(j = 0;j<mjicount-i;j++){
まちがいだらけかも。

986 名前:デフォルトの名無しさん :2005/12/05(月) 22:34:28
>>982
>同じアプリケーション
同じスレッドでしょ

>>984
IsDBCSLeadByte, CharNext あるいは mbcs 対応の crt 関数使わないと
'\\' を正確に判断できないよ


987 名前:デフォルトの名無しさん :2005/12/05(月) 22:39:33
その前に

int mojicount = strlen(moji);
char damy[mojicount+1];

なんだよこれ
初心者スレ行け

988 名前:デフォルトの名無しさん :2005/12/05(月) 22:44:19
元のコードを結構修正することになるけど、CharNextのほうが986のより楽。

>>987
C99という可能性はまだ消えていない。

989 名前:デフォルトの名無しさん :2005/12/05(月) 22:44:56
>>987
確かに。
スペルはdamyじゃなくてdummyだわな。
話にならん。

990 名前:デフォルトの名無しさん :2005/12/05(月) 22:53:55
WM_MOUSEMOVEメッセージについてなんですけど、
マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、
他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。

うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。

991 名前:デフォルトの名無しさん :2005/12/05(月) 23:19:06
>>987
allocaだ

992 名前:959 :2005/12/05(月) 23:57:31
>>983
任意のhWndを持つウィンドウの追加が動的に行えればそれでも
構いません。ただし、.resファイルなどは一切使用しないことが
条件なのです。どうすればいいでしょうか?

993 名前:デフォルトの名無しさん :2005/12/06(火) 01:01:40


Win32API質問箱 Build38
http://pc8.2ch.net/test/read.cgi/tech/1133798345/

994 名前:デフォルトの名無しさん :2005/12/06(火) 01:04:01
Z

995 名前:デフォルトの名無しさん :2005/12/06(火) 01:12:23
1000なら元カノをレイープ

996 名前:デフォルトの名無しさん :2005/12/06(火) 01:40:29
>>995
犯罪予告すると、かなりの確率で警察のお世話になるよ。


997 名前:デフォルトの名無しさん :2005/12/06(火) 01:43:28
大丈夫、元カノはくたびれた南極ちゃんだから

998 名前:デフォルトの名無しさん :2005/12/06(火) 02:01:13
1000


999 名前:デフォルトの名無しさん :2005/12/06(火) 02:02:03
1000

1000 名前:デフォルトの名無しさん :2005/12/06(火) 02:02:17
1000


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