- 1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.63【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1231499251/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 930 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 11:23:14 ]
- DialogBarにメッセージハンドラを追加してみたが
メッセージが思うように飛んでこないので調べてみると ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/dlgbar.html ダイアログバー上のイベントが、CDialogBarクラスまで来ないようだ。 したがって、イベントはCChildFrameで処理しなければならない。 CChildFrameをサブクラス化するなりしないとならないようだ やれなくはないが、もっと簡単な方法はないだろうか・・・
- 931 名前:926 mailto:sage [2009/04/08(水) 12:25:22 ]
- 色々教えていただきありがとうございました。
>>927 おっしゃる通り、隠れているダイアログバーのオプションボタンなどをクリックすると フォーカスは移りました。 >>928 元々ダイアログバーCreate時にthis(MainFrame)を指定してあるのでこれは満たしていると思います。 >>929 Spy++というツールの存在すら意識した事が無かったので使ってみました・・がよく分からなかった・・。 ただツールをしるきっかけを教えていただきありがとうございます。 >>930 教えていただいたURLを参考に一歩ごとに苦戦しながら作ってました。 試行錯誤した結果、対象ダイアログバーのクライアント領域をクリックした時の マウスダウンイベントを拾える事を確認したので、そのイベント検知時に this->SetFocus(); ・・・ダイアログバーのクラス内 をする事で、タイトルバー以外は思い通りの挙動にする事ができました。 これで今は妥協することにします。ありがとうございました。
- 932 名前:デフォルトの名無しさん [2009/04/08(水) 18:27:59 ]
- a<<1とa<<=1の違いを教えてください。
- 933 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:30:25 ]
- 実行後のaの内容が違う
a<<=1 は a = a << 1
- 934 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:26:37 ]
- >>925
後ろの括弧とはdeleteの右の[]のこと? intなどなら無くても上手くいく処理系もあるが、一般的には省略してはいけない。 デストラクタを持ったクラスでやると、デストラクタが呼ばれないので分かりやすい。
- 935 名前:デフォルトの名無しさん [2009/04/08(水) 21:03:45 ]
- 最近Visual C++ 2008を使い始めたものです。
あるライブラリを使ったコードをコンパイルしていると大量の警告(C4996)が出ました。 #define _SCL_SECURE_NO_WARNINGS をソースに書けばでなくなるのですが、ソースが大量にあり、それらから一括してインクルード されているヘッダとかもないので、プロジェクト単位(またはソリューション単位)で指定したい のですが、どうやればいいのでしょうか? どうかよろしくお願いします。
- 936 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:12:31 ]
- コンパイラオプションに
/D_SCL_SECURE_NO_WARNINGS を指定する
- 937 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:26:56 ]
- >>934
int (*p)[10] = new int [3][10](); の最後の()のことじゃない?
- 938 名前:デフォルトの名無しさん [2009/04/08(水) 21:27:13 ]
- >>936
ありがとうございます。 コンパイラオプションってどこで指定できますか? プロジェクト→プロパティの中じゃないかと思うんですが、どこかわかりませんでした。
- 939 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:54:34 ]
- 質問です。
一般的なMFCのウィンドウを表示するアプリで、独自にスレッドを生成して とある処理をしています。ウィンドウにフォーカスがある時より、ない時の ほうが、独自スレッドが回る回数が多いのですが、これは一般にどういう 理由なんでしょうか? ちなみに、ツールバー・メニューバーの表示を更新する系の関数、OnUpdateXXXが 独自スレッドと同期を同期(critical section)を取っているため、これが原因かとも 思いましたが、特に過剰に呼ばれているわけでは無さそうでした。
- 940 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:20:28 ]
- >>938
ツリービュー:構成プロパティ→C/C++→プリプロセッサ 構成:すべての構成 プリプロセッサの定義(/D[マクロ]) _SCL_SECURE_NO_WARNINGS
- 941 名前:デフォルトの名無しさん [2009/04/08(水) 22:21:05 ]
- ttp://www.01-tec.com/document/without_pointer.html
ここの、●バグその3「'\0'終端」 のサンプルプログラムの事なんですが、 #include <stdio.h> /* puts() */ #include <string.h> /* strcat() */ int main() { char buff[128] ; strcat( buff, "ABC" ) ; puts( buff ) ; /* ABCと表示したい */ return 0 ; } buffに終端NULLが入っていない為、putsの表示がうまくいかない事が このプログラムの意図するところらしいのですが、"で囲まれた文字列には 暗黙的に'\0'が付加されるのでこのプログラムのように strcat( buff, "ABC" ) ; としても問題ないですよね?
- 942 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:25:00 ]
- 構成:すべての構成
にするとまずいんで(WIN32やら_DEBUGが消えてしまう) Debug Release それぞれに _SCL_SECURE_NO_WARNINGS を追加で
- 943 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:31:21 ]
- >>941
C言語の文字列では,終端記号があることを前提にしています。 しかし,charの配列を確保しただけでは文字列として初期化されているわけではないのです。 以下の例は,終端記号の存在(文字列としての初期化)を忘れたために失敗してしまった例です #include <stdio.h> /* puts() */ #include <string.h> /* strcat() */ int main() { char buff[128] = ""; // こうすればおk strcat( buff, "ABC" ) ; puts( buff ) ; /* ABCと表示したい */ return 0 ; }
- 944 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:32:38 ]
- >>941
ちゃんとそこ読んだのか? strcat()の呼び出し時点でbuffは'\0'終端文字列でなければならないが、 buffに'\0'が入っている保証はどこにもない
- 945 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:42:19 ]
- >プログラマの都合よく '\0' で初期化されているわけではないのです。
初期化されないのは仕様だしな(スタックポインタを加減するだけ) 高級アセンブラは使う人を選ぶ
- 946 名前:デフォルトの名無しさん [2009/04/08(水) 22:47:38 ]
- >>944,943
ありがとうございます、 自分の環境(gcc4.2.4)で、普通にABCと表示されていたのは たまたま、配列buffがプログラマの都合よく '\0' で初期化されていたのでうまく動作していた という認識で良いでしょうか
- 947 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:49:25 ]
- C++ は「高度な抽象」とか「型安全」とかいうくせに
ライブラリからは「低レベルな詳細」や「型安全でない変換」が透けて見えるじゃないか。 どういうことなんだ。ぷんぷん。
- 948 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:50:19 ]
- どちらもできる柔軟な特性と前向きに捉えてみる
- 949 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:05:04 ]
- C++はbetterなC
オブジェクト思考したいならJavaをやれ C#・・・何それ?
- 950 名前:デフォルトの名無しさん mailto:age [2009/04/08(水) 23:14:55 ]
- C#はVBみたいなもんだよな。
- 951 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:19:37 ]
- C#使うぐらいならVBのほうがいいよ
- 952 名前:デフォルトの名無しさん [2009/04/08(水) 23:21:17 ]
- >933
ありがとうございます。 昔そんなことを習ったような気がします。
- 953 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:21:31 ]
- VBなんか死んでもやらない。理由は無い。
- 954 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:50:21 ]
- 「無い」というのも立派な理由だよ
- 955 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:58:29 ]
- 同じ.NET frameworkを使っているだけで、VBとC#を一緒にするのはないわ
- 956 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:04:13 ]
- 似たようなもんだけどな。
- 957 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:41:18 ]
- VB.netとC#は似たようなもん。
- 958 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 02:11:18 ]
- >>947
言語のせいじゃないだろ。ライブラリの作者に文句言え。
- 959 名前:デフォルトの名無しさん mailto:age [2009/04/09(木) 07:52:07 ]
-
困っています。 www.kattch.com/~kattch/MySQL/06_3.html fedoracore4でC言語とMySQLを接続しようとしているのですが、 実行するとセグメンテーションエラーが出ます。 record = mysql_fetch_row(result); の mysql_fetch_row関数を使用しているところで落ちているのは 判ったのですが何が原因か判りません。 コンパイル時の指定が間違っているような気がしますが わかる人がいたら教えてください。 関係ファイルのパス /usr/include/mysql/mysql.h /usr/lib/mysql/libmysqlclient.so /usr/lib/mysql/libmysqlclient.a コンパイル gcc -o mysqlclient \ -I /usr/include/mysql/ \ -L /usr/lib/mysql/ \ -l mysqlclient \ mysqlclient.c ソースファイル mysqltest.c
- 960 名前:959 mailto:age [2009/04/09(木) 07:53:41 ]
- 追記。
count = mysql_num_rows(result); の部分でも落ちます。
- 961 名前:959 mailto:sage [2009/04/09(木) 08:02:44 ]
- ソースファイルは
mysqltest.cではなくmysqlclient.cの間違いです。
- 962 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:20:45 ]
- result = mysql_store_result(&mysql_buf); ← SQL回答領域ハンドルの取得
このハンドルでエラーになってる可能性が高いな
- 963 名前:959 mailto:sage [2009/04/09(木) 08:29:51 ]
- >>962
解決方法とか……何かあるでしょうか。。。
- 964 名前:959 mailto:sage [2009/04/09(木) 09:01:17 ]
- >>962
おっしゃる通り、取得に失敗していました。 if(result = mysql_store_result(&mysql_buf)){ } else { printf("QUERY Error\n"); }
- 965 名前:959 mailto:sage [2009/04/09(木) 09:19:30 ]
- >>962
判った!!!!!!!!!!!!!!!!!!!!!! ありです。ばかやってました。
- 966 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:30:25 ]
- >>963
ソースもなしで他人のデバッグなんかできませんが。 それとも、デバッグのノウハウを0から教えろと言うことでしょうか。
- 967 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 09:41:09 ]
- esp
- 968 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 10:08:03 ]
- 関数の戻り値チェックはちゃんとしましょうということだろ
- 969 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:26:47 ]
- PHPからCをCからPHPを呼び出す、もとい実行する方法ってある?
- 970 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:40:46 ]
- >>969
systemやexec系の関数で出来るだろ
- 971 名前:デフォルトの名無しさん [2009/04/09(木) 12:01:34 ]
- そろそろ1000か。ところで、このスレの過去ログを全部保存しているサイトとかってないのかな?
時々ググって引っかかったけどdat落ちしてたりとか、過去のこの辺で出てたよな、とかそういうの あるんだけど。
- 972 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:03:17 ]
- 過去ログ見ろとか言われても困るよなw
- 973 名前:デフォルトの名無しさん [2009/04/09(木) 12:57:43 ]
- boost::shared_ptr<Test> MemberFunction();
boost::shared_ptr<Test>& MemberFunction(); あるクラスが、内部にTestのスマポを持っていて、それを返す関数があるとします。 (名前はMemberFunction)。 このとき、参照で返すのと、実体で返すのとは、どう違うでしょうか? 自分は、スマポを返す場合は参照以外はないと思ってたんですが、実体を 返すことに意味はあるでしょうか?
- 974 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 13:14:58 ]
- 参照を返したら外部からインスタンス内部のポインタをresetできる。
コピーインスタンスを返したら、外部のスマポは外部のポインタだけ変更できる。
- 975 名前:デフォルトの名無しさん [2009/04/09(木) 13:20:34 ]
- >>974
外部から触って欲しくない時にはコピーインスタンスを返すべきということですか? でも、そうなると内部で保持しているスマポはboost::scoped_ptr<>を使うべきでは ないですか?
- 976 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 14:42:25 ]
- scoped_ptrだと、呼び出し元がポインタを得た後、「あるクラス」のインスタンスが変更受けた場合に、
呼出し元が破棄されたポインタを持たされる危険がある。 というか内部実装にscoped_ptrを用いる場合はTestをコピーして返すべき。 そもそもスマポは、Testインスタンスを参照する手段であって、 MemberFunctionもTestを渡すのにスマポを用いてるだけで、Testの参照の参照を返すのは本来的に無意味。
- 977 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 20:46:08 ]
- スマポってセマンティクスはポインタだからな
Test*& MemberFunction(); と同じ事をしようとしてる
- 978 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 20:57:10 ]
- >>975
コピーをお前はTest自体のコピーと考えているように見えて、 974はshared_ptrのコピーのことを指しているように見えるぞ。
- 979 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 21:17:13 ]
- &じゃなくてconst&ならありなんじゃね?
値をコピーすると参照カウンタの操作が入って遅いだろうし。
- 980 名前:975 [2009/04/09(木) 22:10:14 ]
- でもスマポ(特にboost::shared_ptr<>)の参照を返すコードって結構ないですか?
スマポのコピーって本当に遅いし。測ったら普通のポインタのコピーより 30倍近く時間がかかってました。 でも本当は無意味で、979さんの言うとおりconst&の時だけ意味があるのかな?
- 981 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:02:14 ]
- 速度を本当に気にするような場面ならそもそもスマポを使うな。
しかし、ほとんどの場合においてスマポのコピー程度の時間は全く問題にならない。 30倍と言うが、ポインタのコピーなんて機械語で一命令になるかならないかのレベルなんだから、 それが30倍になろうとも余程の大量コピーでない限り全く気にならない。
- 982 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:06:31 ]
- shared_ptrの参照を返すことなんてまず無いな。むしろコピーしてなんぼだ。
そもそもオブジェクトが何かの参照を返す事自体問題がある。
- 983 名前:975 [2009/04/10(金) 01:02:41 ]
- そうなんですか。。。
実は自分が今やってるプロジェクトでは、boost::shared_ptr<>&返し (スマポの参照返し)を使いまくってて、自分もそれに合わせて書いてるんですが、 最初にスマポの参照返しを使い始めた人はもうプロジェクトにはいないし、 なんでかなとおもってたのですが。、。
- 984 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 01:24:38 ]
- スマポの参照返すくらいなら普通に参照返せばいいんじゃ?
- 985 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 01:37:00 ]
- ぬるりーは怖いぜよ
- 986 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 02:03:51 ]
- 返ってきたスマポの参照が本当に有効なスマポを指してるのか
知らない間に外からいじくられないか いつまで生きてることが保証されてるのか そもそもスマポってこんなこといちいち気にしたくないから使うもんのはずだ 危ないことしたくないからわざわざ重いスマポ使ってるのにそんなことするなんて ストーブ炊いて暑いからってクーラーかけるようなもの 馬鹿げてる
- 987 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 02:26:16 ]
- ぬるぽは怖いぜよ
- 988 名前:975 [2009/04/10(金) 06:56:20 ]
- じゃあやっぱり最初にスマポの参照返し使いまくりをはじめた人に聞いてみたほうがいいのかな。。。
ソースを見る限り、間違いなくC++の達人だと思ったので、そのやり方にしたがってれば間違いない と思ったんだよな。 ちょっと聞いてみます。
- 989 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 07:25:22 ]
- 30倍遅いっても怪しい感じだな
そんなに遅くなるか? 誰か試してくれ
- 990 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 07:28:34 ]
-
- 991 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 08:19:19 ]
- shared_ptrなら、コピー時の参照数の管理コストを無視できない、かも。
|

|