- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 2 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:25:57 ]
- dynamic_castってどんな時に有用なのですか?
- 3 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 10:13:05 ]
- forループをインテルコンパイラを使いSSEで並列計算させるようにしています。
floatはdoubleの倍並列度が上がるはずなのですが、floatにしてもループの計算速度が 1.2倍程度にしかなりません何故なのでしょう ループの中身は主に画像処理で、ほとんどが三角関数です。
- 4 名前:デフォルトの名無しさん [2007/05/08(火) 10:42:37 ]
- 注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく スレの雰囲気を崩しかねないのでお黙り下さい。 また質問者は回答者に知識を披露する場を与える貴重な存在なので、 質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。 忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、 その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると 判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
- 5 名前:デフォルトの名無しさん [2007/05/08(火) 10:56:12 ]
- >>2
dynamic_castにより、従来のキャストでは不可能であった クロス・キャスト、 そして抽象基底クラスからのダウン・キャストが可能になりました。
- 6 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 11:02:51 ]
- >>3
近年のプロセッサではdoubleの計算速度はfloatとあまり変わらないためです。
- 7 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 11:11:21 ]
- うそつき
- 8 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 01:10:40 ]
- >>3
一応マジレスしておくと、その情報だけでは一概に言えないとしか。 「演算速度」と一口に言っても実数計算だけしているわけではないから1.2倍なら御の字だろう。 処で、まさかとは思うがfloat版でもsin()を使っちゃいないよな?
- 9 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 12:34:09 ]
- >>3
45度分の三角関数表ぶち込んで置くのオヌヌメ
- 10 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:37:54 ]
- >>8
c99にはsinf()などのfloat専用関数があるのに意外に知られてないよね。
- 11 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 23:47:46 ]
- タスクを意識したプログラムを仕事で使うので勉強しています。
ディスパッチていう関数とアイドルタスクの実行関数ってのがあって main関数で、初期設定(アイドルタスクのTCBの設定)をしてから、 ディスパッチの関数をコールすると、 そのディスパッチの関数がリターンされると アイドルの関数を呼び出してもいないのに、 アイドルタスクが実行されました。 さっぱりわからないんですけど、こういうのって 普通のつくりなんでしょうか?
- 12 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 01:25:43 ]
- >>10
C++だとsinでfloat版も多重定義されていることも意外に知られていないよね 勿論3がCとC++のどっちを使っているのかはわからないけど
- 13 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 16:08:02 ]
- >>11
よーわからんが、「ディスパッチ」というからには 「何かが起きれば対応する処理を呼び出し、 何もなければアイドル処理を呼び出す」のは 極々ふつーかと。
- 14 名前:デフォルトの名無しさん [2007/05/15(火) 18:40:58 ]
- Borland C++をつかってピアノをシミュレートするプログラムを組もうと思ってます。
つまり、キーボードAでドの音、キーボードSでレの音、キーボードDでミの音をだすわけです。 初めはDXライブラリつかってAキーを押したらあらかじめ用意してあるドの音が記録された wavファイルを再生しようと思ってました。 しかしながら、これだとキーを押している間のみ音を出す事ができないわけです。 そこで、wavファイルを再生するという方法を諦め別の方法を考えてるわけですが、 なにか良い方法はないでしょうか?
- 15 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 18:43:25 ]
- 簡単なのはMIDI使うやつだなあ
- 16 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 18:47:20 ]
- >>14
単純な音でごく簡単にやるなら、Beep()を使うのはどうだろう。 それはさておき、なんでDXでwav再生だと「きーを押している間のみ音を出せない」のだろう……
- 17 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 18:53:31 ]
- なんで組み込み系の型は継承できないの?
- 18 名前:デフォルトの名無しさん [2007/05/15(火) 18:57:49 ]
- >>15
ありがとうございまする C++からつまりMIDI音を生成できるというわけですか。ちょっと調べてみます。 >>16 ありがとうございます さすがに、Beepでは。せめてMIDIくらいはクオリティ欲しいです。 「きーを押している間のみ音を出せない」はたぶん誤解していらっしゃるみたいです。 つまり、ドの音がwavに6秒記録されていて、Aキーを1秒間しか押してなくても 6秒再生されてしまうわけです。 ”押している間のみ音を出す”という事ができないわけです
- 19 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 19:03:15 ]
- 「押している間のみ音を出すことができない」は、「離したら音を止めることができない」と言いたかったわけねw
短めのwavを用意して、キーリピートのたびに繰り返すなり、再生を途中で止めるなりすればいいのでは?
- 20 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 19:08:56 ]
- >>17
C++は効率も重視してるので、そのような設計になっている。 ってのが模範解答かな
- 21 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:49:44 ]
- C言語で
1 -0.5から0.5までの間のdouble型の乱数の発生のさせかた 2 0から1までの間のdouble型の乱数の発生のさせかた を教えてください。rand()関数を使うなどの簡単なプログラムの方がありがたいです。 ググって見たら、整数の乱数の発生させかたは幾つか見つかったのですが 小数の乱数の発生させかたを見つけることができませんでした。 よろしくおねがいします。
- 22 名前:21 mailto:sage [2007/05/15(火) 22:58:43 ]
- 書き忘れてました。
毎回同じ乱数で大丈夫です よろしくお願いします。
- 23 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 23:46:25 ]
- >整数の乱数の発生させかたは幾つか見つかった
これが分かって、何で >1 -0.5から0.5までの間のdouble型の乱数の発生のさせかた >2 0から1までの間のdouble型の乱数の発生のさせかた これがわかんないんだ? ちょっと考えれば分かりそうなもんだが…
- 24 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 23:54:53 ]
- 応用力のないゆとり
- 25 名前:デフォルトの名無しさん [2007/05/16(水) 00:39:24 ]
- >>21
ゆとり教育の弊害か? こういう調べ方もわからない香具師はなにかに躓くたびに 同レベルの質問するんだろうなw
- 26 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:53:20 ]
- まあきっとリア消なんだろうと思って免じよう
(double)rand() / ((double)RAND_MAX + 1) これで0以上1未満の乱数になる。1を加えなければ、範囲が0以上1以下になる。 あとは0.5を引けばいいだけ。
- 27 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 01:00:42 ]
- >きっとリア消
そうかな? 文章の書き方はもう少し上の年齢を感じさせるが。 だからこそ応用できないのが残念というか不思議というか…
- 28 名前:18 [2007/05/16(水) 01:55:47 ]
- たぶん、基本的な型変換の知識が欠如してるかと思われます
- 29 名前:21 mailto:sage [2007/05/16(水) 06:31:24 ]
- みなさんすいません。つい最近C言語を始めたばかりで何もかもがチンプンカンプンな30歳です。
整数しかなくても乱数の中の最大値で割れば小数に変換できるってことですね(RAND_MAXっていうのは乱数の 中の期待される最大値ってことですよね・・?)。 こんな風にできるのか。勉強になりました。ありがとうございます
- 30 名前:デフォルトの名無しさん [2007/05/16(水) 06:43:52 ]
- 1、機能設計
2、関数(クラス)設計 3、実装 4、レビュー 5、1にもどる これを繰り返しやってるんだが効率が悪い気がする なんかいいプログラム方法ってないの
- 31 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 06:49:36 ]
- >>30
1. なんとなく実装 2. バグ取り これなら効率よく見えるかい?w
- 32 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 10:22:27 ]
- 作業の合間の2chをなくせば効率は少なくとも5割アップする。
間違いない。
- 33 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 10:29:14 ]
- 今は、2chの合間の作業だからなあ
- 34 名前:デフォルトの名無しさん [2007/05/16(水) 10:50:43 ]
- C初心者です。
ググッていたら int PASCAL WinMain なんていうmain関数見つけたのですが、なんでCなのにパスカルなんですか?
- 35 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 10:54:07 ]
- >>34
CDECL、PASCAL、STDCALLあたりで調べてみな
- 36 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 22:48:12 ]
- #include <stdio.h>
int main(void) { int data[ ] = { 7,4,12,71,3,85,69,47,11 }; int i, j=0; printf("prime ="); while(j<10){ for(i=3;i<data[j];i++){ if(data[j]/i!=0) i++; else(data[j]/i==0) printf("%d\n",data[j]); } j++;} return 0 ; } 数字の中から素数を出力するプログラムを作りたいのですけど ステートメントにセミコロンがないとエラーが出てしまいます。 セミコロンは忘れずにつけているはずなのですが・・・ どなたか教えてください。よろしくお願いします。
- 37 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 22:51:41 ]
- else(data[j]/i==0)
- 38 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 22:54:41 ]
- >>37
理解できました。 /じゃなくて%使わないとだめだったのですね ありがとうございます。
- 39 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 22:58:09 ]
- それでいいんなら構わないんだけど・・・
- 40 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 10:29:49 ]
- >>36
一応マジレスしておくと、慣れない内はif, for, whileなどには必ず{}をつけるようにした方がいいぞ。 それと、{}の位置は対応が見つかりやすい位置に揃えておくこともね。
- 41 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 04:38:09 ]
- 以前、Visual Studioの6.0を使っていたのですが
CDが無くなって見つからなかったせいもあり、 せっかくだから新しいのを買おうとVisual Studio 2005を買ってきたんです。 ところが、簡単なプログラムを組んで知人に渡すと 「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。」 と出て、実行できないとのことなのです。 調べてみると、VCの新しいランタイムを入れなければいけないとのこと。 VC++6の頃は、こんなのが出た記憶がなかったのですが、 それは、VC6が古かったのでランタイムが既に入っていただけなのでしょうか? 大半の人がランタイムを入れないと動かないというのは、好ましくないのですが 2005を使う利点というのは、どの程度あるのでしょうか? 単にフリーソフトを作って配布するだけならば、VC++6でも十分なのでしょうか? また、持ってないのでなんともいえないのですが、VS2003についてはどうなのでしょうか? 場合によっては、2005を誰かにでも売って、2003を買ってくるなり VC6をもう一度探してみるなどの手段を講じようと思っております。 どなたかよろしくお願いいたします。
- 42 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 05:28:33 ]
- >単にフリーソフトを作って配布するだけならば、VC++6でも十分なのでしょうか?
Yes つーか俺は VS2003proとか持ってるけど、 未だにC++は VS6.0でやってる メインの開発マシンが pen3 1GHzのノートだってのも理由だけど
- 43 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 10:08:05 ]
- 2005はランタイムにDLLを使うのが初期設定になっただけで、
プロジェクトオプションをいじれば、 従来どおりラんタイム (CRT)を静的リンクしてEXE内に含めることも可能。 .NET 2003のデフォルトは静的リンクだが、 動的リンクした場合は、やはり2005同様ランタイムを別途入れないといけない。 6では静的リンクがデフォルトだったと思うが、 動的リンクしても、ランタイムのmsvcrt.dllが殆どのWindowsで初めから入っているため問題になりにくい。 いずれにしても、ランタイムのDLLをEXEと同梱して同じフォルダにおいても使える。 2005はマニフェスト書かないといけないから若干面倒だけど。
- 44 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 13:53:17 ]
- 静的リンクで、サイズがあまり大きくならなければ
EXE内に含んでしまうのも手ですね… VC6のときは、そういった問題が起こらないのもそういう理由だったのですね。 それにしても…全然VC6でも未だにいけるんですな。 何のために2005買ってきたんだろう… 2005だとこれがいい!とか、これがあるから2005にしとけ! っていうのはあります?
- 45 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 14:10:32 ]
- すばらしいC++/CLIが使用できます!
- 46 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 15:57:41 ]
- テンプレートやそれを使うライブラリ(Boostなど)がまともに使えるようになる。
(たしか2002と2003の間に越えられない壁) あとは最適化の能力も着実に上がっている。
- 47 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 17:45:35 ]
- 古いMFCって色々バグなかったっけ
- 48 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 19:33:33 ]
- >>44
VS6の場合、WinXPから実装されたような新しいAPIはヘッダにない 有名だけど、VS6のSTLはバグあり
- 49 名前:44 mailto:sage [2007/05/20(日) 22:14:08 ]
- >>45-47
単語を元に色々見てみました。 バグや最適化のことも考えて2005のライブラリ同梱でいこうと思います。 せっかく買ったことですしね。 C++/CLIについては、今やってるものが終わったら 一旦勉強してみたいと思います。 どうも昔ながらのBASICやらCが染み付いてしまってるので なじめるか心配ですが・・・・ ありがとうございました!
- 50 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:03:52 ]
- UTF-16LEでかかれたファイルを1行ずつ読み込んで処理したんです。
std::wstringをつかってどうにかできませんか
- 51 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:17:46 ]
- >>50
×処理したんです ○処理したいんです。 orz
- 52 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:26:16 ]
- >>50
お前の使うCPUがリトルエンディアンで、 お前の使う処理系でのwchar_tがUTF-16なら、 std::wifstreamでバイナリモードにすれば大抵上手くいくと思う。
- 53 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:54:20 ]
- こんにちは。
大量の浮動小数データをCSV形式でファイルに出力する必要があるのですが、 文字列の生成に時間がかかってしまい困っています。 出力する必要のある浮動小数データ数は5憶個くらいです。 sprintfとstrlenで時間がかかるのはわかるのですが、 何か良い方法はないものでしょうか? --- char buf[4096]; DWORD temp; for (int i = 0; i < 100; i ++) { // 行番号の出力 sprintf(buf, "%.3f,", 値); // 各列の値出力 for (int j = 0; j < 100; j ++) { sprintf(buf+strlen(buf), ",%.14f", 値); } // 改行コード strcat(buf, "\n"); // ファイル出力 WriteFile(m_hFile, (LPVOID)buf, strlen(buf), &temp, NULL); } --- #bufサイズの件については考えていません。
- 54 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 19:02:02 ]
- ループ中のstrlenを止めるだけで結構変わる悪寒
- 55 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 19:16:10 ]
- >>53
出力サイズ(=buf内の文字列長)を常に保持するようにすればstrlen()は全く要らなくなる。 #それでどれだけ速くなるかは知らんが。 寧ろ、もそっとこまめにWriteFile()した方が速くないかい?
- 56 名前:55 mailto:sage [2007/05/25(金) 19:16:51 ]
- あー、最後の一行無視しておいて。
- 57 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 19:33:20 ]
- >>53
strlenやめたコードで16MBくらいのデータを出力してみたが、 ぶっちゃけHDDの速度に依存してる感じだ。w あんまりかわらんね。
- 58 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 19:44:13 ]
- >>53
散々言われているがファイルの書き込みを考えたほうがいい メモリマップドIOにするなり別スレッドで書き込むようにするなり
- 59 名前:53 mailto:sage [2007/05/28(月) 12:02:35 ]
- 皆様有難う御座います。
文字列の長さを変数に保持して、新たに追加された文字列分だけ strlenするようにしても対して効果はありませんでした。 #皆さんの答えで一つわからなかったのですが、 #sprintfで何文字で出力されるかわからないので完全にstrlenを #除去出来ないですよね? プロファイルを取って調べた処、7割の時間をsprintfで 消費している事がわかりました。 数値を文字列に高速に変換する方法などあれば解決しそうですけど なかなか考えつきませんね。。
- 60 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 12:17:03 ]
- >>59
少しは調べる努力もしよう。 -- from MSDN >戻り値 >書き込まれた文字数を返します。 -- from www.linux.or.jp >返り値 >成功時には、上記の関数は書き込まれた文字数を返す (文字列の最後を示すために使用する `\0' は数に含まれない)。
- 61 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 12:28:24 ]
- >>53
今ちょっと実測してみたんだけど、数値の範囲にも拠るけど 桁数が増えるとパフォーマンスにかなり影響する。 %.14fを例えば%.13fや或いは%.14gに変えられないの?
- 62 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 10:08:31 ]
- まあsprintfの戻り値使えばstrlenはいらないけど、たいした節約にはならんような。
自前でftoa()でも作ってしまうとか。 10^n掛けていって整数部分を取るような。
- 63 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 02:14:35 ]
- Cの場合は
void 関数名(void); じゃないと警告出ますよね C++の場合 void 関数名(); で、警告出ないんですけどvoidは入れた方が良いんですか?
- 64 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 02:20:12 ]
- >>63
C++の場合はvoidを書かなくても書いた場合と同じとなってますが、 Cとの互換性を考えるなら書いた方がいいかもしれません。
- 65 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 07:46:02 ]
- >>64
分かりました。ありがとうございます。
- 66 名前:53 mailto:sage [2007/05/30(水) 13:56:24 ]
- sprintfの戻り値が出力数とは目から鱗でした。
最終的にstrlenの除去と、出力を%.7fにする事で 文字変換のコストを10%程度削減出来ました。 ファイルへの出力も逐次出力するのをやめた所 全体で30%程度処理時間を短縮する事が出来ました。 皆さんありがとう御座いましたm(__)m
- 67 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 21:54:37 ]
- 誰か教えてくれ。
次のようなコードをたまに見るんだけど、なんか意味はあるのだろうか。 for (int i = 0; i < 3; i++) { swtich (i) { case 0: printf("%d\n", 2); break; case 1: printf("%d\n", 3); break; case 2: printf("%d\n", 5); break; } } 単純に逐次処理で printf("%d\n", 2); printf("%d\n", 3); printf("%d\n", 5); としたほうが分かりやすいと思うんだけど。
- 68 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 23:11:35 ]
- 書いた本人は、処理の数が膨大な数になり且つ、もしcase以降の処理の順番を入れ替える事態が発生した時の
保守のし易さにでも重点を置いたんだろう。 あんたの見たその時の状況を知らないからなんとも言えないが、もし枝分かれが指折り数えるくらいなら意味ないね。
- 69 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 03:48:55 ]
- 上の質問と被ってしまうような気もするけど・・・気にしない。。
switch(CHECK) { case 1: break; case 2: break; } これを switch(CHECK) { case MENU: break; case END: break; } こういう風にしたいのですけどCHECKの型を何にしたら良いのでしょうか
- 70 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 06:41:09 ]
- int
- 71 名前:デフォルトの名無しさん [2007/05/31(木) 07:27:36 ]
- すごいくだらない質問なんですが、
CをどこまでやったらC++に移っても問題ないのでしょうか? 入門書を一通り終えたらC++に行っちゃって大丈夫なんですか?
- 72 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 07:40:47 ]
- >>66
ていうかさ、なんでstdioを使わないでAPIを直接使ってるの? 初心者にありがちな間違いだけど 「FILE*を使うと直呼び出しに比べてオーバーヘッドがある」という点より 「FILE*を使うと内部でバッファリングしてくれるので呼び出し回数が減り、結果的に速くなる」 というのが正しいから。 ファイルマッピング使っても、本質は同じ。 もちろん、ディスクアクセスがunmap時のみに出来る(量)なら充分だけど そうでなければ、結果的にシステムコールを減らせるほうが速いから。 setvbufを使ってもいいし。 sprintfの戻り値の件もそうだけど、知らないで思い込む(=調べない)と損だよ。
- 73 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 09:48:11 ]
- >>69
enum の出番だ まあ>>70の通りだ
- 74 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 10:49:13 ]
- ちょっと疑問なのですが、
char *str = "ABCDE"; のような宣言のとき、 "ABCDE"という文字列がstrに入った☆ なーんて説明されたんだが、既に納得がいかない。 ・str自体は、先頭の'A'のポインタが入ってるはず。 ・char型を5個連続で確保できる保障なんてあるのか? ・無かった場合、どっかのデータ壊すんじゃないのか? ・何か俺勘違いしてるのかな・・・? 教えてくださいエラい人・・・。
- 75 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 10:53:25 ]
- >>74
まず、リテラルの"ABCDE"を格納している領域があって、そのアドレスがstrに入るだけ。 char str[] = "ABCDE";だと6個の領域がローカルに確保されてリテラルの"ABCDE"から 内容がコピーされる。
- 76 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 15:36:13 ]
- ローカルのは処理系依存だな
単にcharの配列の初期化になるだけとか
- 77 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 17:15:53 ]
- >>76
>ローカルのは処理系依存だな 意味不明。
- 78 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 21:48:06 ]
- >>75 >>76
ありがとうございました。
- 79 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 23:19:56 ]
- 質問です。
"<列番>,<行番>,<顧客名>" という形式で入力されるデータを 行列ソートされた状態で変数に格納しようとしています。 map型でキーを2つ使う事は出来るのでしょうか? より簡潔に書ける方法があれば、そちらもご教授願いたいです。
- 80 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 00:42:12 ]
- 処理系くらい書けや
www.tt.rim.or.jp/~rudyard/torii009.html
- 81 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 00:54:29 ]
- >>79
うーむ、mapが一番楽ではないかな。
- 82 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 12:03:48 ]
- >>79
std::map<列, std::map<行, 顧客名> > ではあかんの?
- 83 名前:sage [2007/06/01(金) 15:50:28 ]
- Windowsのサービスプログラムを作成しています。
Shell_NotifyIconでログインしたときにシステムトレイに アイコンの表示とポップアップメニューでコントロール できるようにしたいのですが、サービスではアイコンが 表示できないようでホトホト困っております。 そもそもサービスからシステムトレイへアイコンを表示する場合は 別のプロセスで行わなければならないものなのでしょうか? ご存知の方、どうぞ教えていただけないでしょうか。
- 84 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 15:56:11 ]
- >>83
普通そういう構造にはしないけど、だからってできないことはないと思うが。 もしもログイン時に動かないんであれば、実行時にはまだシェルが起動してなくて Shell_NotifyIcon自体が失敗してんじゃないの?
- 85 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:00:16 ]
- >>83
>>79 これってどーやったらみんなみたいに青くなるんですか??
- 86 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:05:42 ]
- >>85
sageはメール欄な
- 87 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:06:23 ]
- って入ってるじゃねーかw
- 88 名前:83 mailto:sage [2007/06/01(金) 16:25:42 ]
- >>84
ATLで雛形を作成していますので、 手動とサービス起動の両方で実行が可能になっています。 それで両方で試してみましたが、手動のほうは問題なく アイコンが表示されましたが、サービスのほうはコンパネより手動で サービスを起動してもアイコンは表示されませんでした。 そこで考えたのがサービス起動のときだけShell_NotifyIconが 失敗しているのではと思ってやってみたら、 サービスのときは「重複した I/O 処理を実行しています。」 というエラーになりました。 エラーの意味が何のことかよくわからないですが やはり、サービスでアイコンを表示するのは無理だったみたいです。
- 89 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 16:34:50 ]
- >>88
へんだな。 当然、 デスクトップとの対話をサービスに許可 にはチェック入れてるんだよな?
- 90 名前:83 mailto:sage [2007/06/01(金) 16:59:40 ]
- >>89
対話を許可というものがあること自体解からなかったのですが。 チェックを入れたら表示されました。 ありがとうございました。 危うくプロセスを分けてCOMで状態を受け渡す行動に出るところでした。
- 91 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:50:58 ]
- 私と同じことにつまずいた方に
サービス登録時にデフォルトでチェックを入れて かつ自動起動にするやり方をあげておきます。 inline BOOL CServiceModule::Install() { ・ ・ ・ SC_HANDLE hService = ::CreateService( hSCM, m_szServiceName, m_szServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, szFilePath, NULL, NULL, _T("RPCSS\0"), NULL, NULL); ・ ・ } VSが作成したCreateServiceの引数を変更するだけですが・・・ よかったら参考にしてください。
- 92 名前:771 mailto:sage [2007/06/02(土) 18:30:00 ]
- CからC++に移行したと思っています。
CとC++の関数が載っているオススメの書籍を教えて下さい。
- 93 名前:79 mailto:sage [2007/06/02(土) 22:30:32 ]
- >>82
上手くいきました。 良い案をありがとうございます。
- 94 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:01:38 ]
- class A : private B {
// 省略 } ; というのは、どういう場合に使うのでしょうか。 AのメンバからしかBはアクセスできないので、 class A { private: B b ; } ; としてしまったほうが、スッキリするような気がするのですが。
- 95 名前:デフォルトの名無しさん [2007/06/03(日) 20:09:03 ]
- cin, cout は何の略ですか.
- 96 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 20:51:04 ]
- >>94
A has BかA is Bかの違いでしょ。
- 97 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 20:54:12 ]
- >>94
とりあえず実際的な理由としては virtual関数をオーバーライドしたいときとか。
- 98 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 21:34:02 ]
- >>95
cはconsoleの略 inとoutはそのまま
- 99 名前:94 mailto:sage [2007/06/03(日) 22:53:19 ]
- >>96
privateで継承した場合は、 A a ; B& b=a ; ということができないので、 A is B ではなく、A has B になると思うのですが・・・。 Aを外側から見るのではなく、Aの中からAの中を見れば、A is B なのかもしれないけど・・・。 >>97 なるほど、 Aが、Bからのコールバックを受け取りたい場合、 privateで継承してしまえば、 Bにコールバック先のポインタを教えてあげる手間が省けますね。
- 100 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 23:06:03 ]
- Bが純粋仮想関数を持っていれば、継承せざるを得ないわけで。
で、AがBの実装を云々したくなければprivate継承で充分だと。
|

|