- 1 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 21:36:23 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sageは禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.34【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1169039760/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 267 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 00:20:41 ]
- >>259
int型の変数だろうとvector<T>型の変数だろうと グローバル変数の使い方は同じじゃね?
- 268 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 00:24:21 ]
- >>267
static配列は int a[] = { 0, 1, .. }; のような配列初期化構文が使えるが、vector<T>では使えないという 違いがあるな。 vector<T>をstaticに初期化したいならば int a[] = { 0, 1, .. }: vector<int> v(&a[0], &a[N]); のように書くしかないが、メモリの無駄だな。 が、今回のケースでは初期化はWinProc内で行いたいそうだから どうでもいいんだな。
- 269 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 00:25:57 ]
- コントロールを動的に生成/消滅させるウィンドウでないのなら
単なる配列でいいんじゃないの? 要素数が固定なら、vector<>はオーバースペック。
- 270 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 08:45:11 ]
- >>268
仮にvector<int> v = {0, 1, ...};のような初期化ができるようになっとしても、 コンストラクタの呼出まで初期化子を静的に用意しておくことになるだろうから、 その実装はおそらくこう書くのと同じようになると思う。 int a[] = {0, 1, ...}: vector<int> v(&a[0], &a[N]);
- 271 名前:デフォルトの名無しさん [2007/03/04(日) 00:41:25 ]
- 質問させてください。
C++によるオブジェクト間のメッセージ通信についてなんですが、 オブジェクトAがオブジェクトBを含有する構造の場合、 AからBへのメッセージ送信は、AがBのメソッドを呼び出すという形でOKですが、 BからAへのメッセージ送信はどう実装するのがベターなんでしょうか? 1.AからBのメソッドを呼び出し、戻り値をメッセージとして扱う、(BはAに処理させたい内容を戻り値で返す) 2.BにAの参照を渡しておいて、BからAのメソッドを呼び出す、 3.各オブジェクトにメッセージプロシージャを用意して、そこにメッセージを投げる、(ウィンドウメッセージのように) あたりは試してみているんですが、どうにもソースがスパゲッティになりがちで悩んでいます。 現在は、オブジェクトへのアクセス手段を統一でき、尚且つ不要なメッセージを無視することが可能な「3」を用いて実装しているのですが・・・ 何か他にいい手法はないでしょうか?
- 272 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:02:31 ]
- >>271
相互依存するぐらいなら同じクラスにしちゃえばいいのに。 それでおかしくなるようなら A, B のどちらか(または両方)が大きすぎるんじゃないの?
- 273 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:25:41 ]
- >>271
デリゲートな悩みですか
- 274 名前:デフォルトの名無しさん [2007/03/04(日) 01:35:33 ]
- 実装というか、コーディングマナーの質問です。
配列の並び順を変更するときに、テンポラリ変数としてヒープ領域を使うのはありでしょうか。
- 275 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:37:36 ]
- 必要ないのにヒープ領域は使わないかな
うっかりミスでリークしたりしたらあれだし
- 276 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:40:47 ]
- >>271
ケースバイケースだなぁ。 オブジェクト間のコミュニケーションが複雑化しすぎると感じるなら、 Mediatorパターンなんてのもあるよ。 ウィンドウメッセージは直接的なC++のメンバ関数呼び出しより はるかに非効率だけれども、 非同期にできたり、相手が死んでいた場合のdangling pointer問題を 回避できたりという利点はある。
- 277 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:42:18 ]
- >>274
ヒープ使ってstd::auto_ptr<>に突っ込む分には>>275の言うような 問題はないが、 速度の問題だけで言えばalloca()の方が速い。移植性が劣るし スタックサイズの制限にひっかかるかもしれないが。
- 278 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 01:54:53 ]
- >>272
元は全部1つのクラスで処理をしていたんですが、 行数が多すぎて分かり辛くなってきたため、分割しようとしたところ、相互依存の問題が出てきた感じです。 >>273,276 色々ありがとうございます。 デリゲート、Mediatorパターン、ちょっと調べてみます。 ゲームプログラムで、非同期処理なので、その辺ももう少し考えてみます。
- 279 名前:デフォルトの名無しさん [2007/03/04(日) 07:12:04 ]
- 今後WIN32は消える?
- 280 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 07:26:12 ]
- >>279
100年後とかには生き残ってないだろな。
- 281 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 10:23:01 ]
- >>277
allocaをMSのライブラリは拒否している(昔は使っていたが)。 デフォルトで配列を使ってサイズオーバーしたら ヒープを使うという戦略になっている 当然allocaより速い
- 282 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 11:16:36 ]
- どうして適当なこと言う奴が後を絶たないのか
- 283 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 11:31:09 ]
- いい加減な事を発言した奴には罰金を科せばいい。
- 284 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 15:13:11 ]
- 国会でやると大もうけだな
- 285 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 18:32:04 ]
- レスが付かないのでこちらにきました
Visual Studio2005 C++で SystemParametersInfo(SPI_SETDESKWALLPAPER, NULL, "c:\\a.bmp" ,0 ); しても壁紙が変更しません 解る方、教えてください
- 286 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 20:14:00 ]
- 人が居なくても、ちゃんと元スレには「あちらで訊いてみます」って書いたか?
- 287 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 00:14:35 ]
- >>285
最後の引数に SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE しとけ
- 288 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 04:34:28 ]
- 環境は、C++builderです。
void __fastcall TForm1::Button1Click(TObject *Sender){ //処理 } 他の関数で、ボタンを押した動作をしたいときは、 どのようにすればよいでしょうか。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 10:29:58 ]
- TButton::Click()
- 290 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 14:06:31 ]
- >>289
ありがとうございます。
- 291 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 21:30:09 ]
- >>287
レスどうもです SystemParametersInfo(SPI_SETDESKWALLPAPER, NULL, "c:\\a.bmp" ,SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE ); ってしたんですが、だめでした 他にあればお願いします
- 292 名前:デフォルトの名無しさん [2007/03/07(水) 02:58:25 ]
- C++
WinAPIをまとめてあるフレームワークライブラリを解析していたんですが ///// hoge.h //// class hoge{ hoge(); } extern hoge* phoge; ///// hoge.cpp //// hoge* phoge; hoge::hoge(){ phoge = this; } 上のような(簡略化してあります)記述がありました。 コンストラクタ内でthisポインタでインスタンスのアドレスを 取得していると思うのですが、このインスタンスが実際に何処にあるのかが、分かりません。 他のファイルも調べてみましたが上の場所でしか、phogeにアドレスが代入されていませんでした。 環境はVisualC++2005です。
- 293 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 03:04:16 ]
- hogeのインスタンスがどこにも無いならコンストラクタも走らず、
したがって、phogeは常にNULLのはず。 とおもったが、phogeの代入箇所?さがすのはhogeのインスタンス化位置でそ?
- 294 名前:デフォルトの名無しさん [2007/03/07(水) 03:38:54 ]
- hogeのインスタンス化のいちも探してみましたが、見つかりませんでした。
さっき気がついたのですがウィンドウの作成時にWNDCLASSではなくCREATESTRUCTが つかわれていました。これが何か関係あるのでしょうか? 以下のように、この構造体のhInstanceに先ほどのhogeのインスタンスがわたされていました。 cs.hInstance = *app;
- 295 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:08:45 ]
- >>292
ソースがあるならそこにブレークポインタでとめて ステップ実行で周辺を探すって手もある。 上手く行くか知らん。 hoge派生クラスがあるとか。 んなわけないか。
- 296 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:30:28 ]
- 生成された時の自分自信のポインタをいれてるだけじゃん?
- 297 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:36:58 ]
- 生成されているのは事実だが
何処で生成しているか判らないから聞いている質問だと思うが? ブレークポイントを置いてこのときはまだ生成されていないとかから すこしずつ絞り込んで行くとか。
- 298 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:41:43 ]
- extern 宣言してあるんだからコンパイル開始時に生成されると思うんだけど
- 299 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:43:12 ]
- あ、コンパイル開始というかプログラム開始時に
- 300 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 08:58:45 ]
- 「class hoge を継承したクラスのインスタンスを1個は作れ。 作るタイミングはおまえさん次第」
で、どこかで作られたであろう インスタンス をポインタで保持して、 いつでも呼び出せるようにしている と。 # MFC の CWinApp じゃね?
- 301 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:00:01 ]
- グローバルで作ったのなら スタートアップルーチン内 でインスタンス化してる
- 302 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:30:18 ]
- DLLを作成したいのですが、
フリーソフトによる開発環境では不可能なのでしょうか? Visual C++では出来なかった物で…。
- 303 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:45:38 ]
- できるよ
VCのスレ…いや、画像付きの解説ページがあったはずだから、ぐぐった方が良いな
- 304 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:50:37 ]
- >>303
ExpressバージョンではMFS、ATLが含まれていないので作成出来ないと思っていました。 有難うございます、もう少しぐぐってみます。
- 305 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 10:43:30 ]
- MFCもATLもなくたってDLLは作れる。
プロジェクト作るときにどこかでDLLを選ぶだけ。
- 306 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:29:49 ]
- >>291
つ GetLastError()
- 307 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:27:32 ]
- 質問です。
クラスの「constメンバ関数」は、メンバー変数の書き換えを禁止しますよね。 これによって「その関数は何度呼び出しても問題ないはずだな」 と思って分担作業をしていました。 ところがconstメンバ関数の中から、グローバル空間の変数を書き換えている奴がいたのです。 いままで知らなかったのですが、constメンバ関数はグローバル空間の変数などを書き換えてもコンパイルエラーにならないのですね。 この行為を禁じるための、C++文法的な書き方はありませんでしょうか。 「グローバル変数使うの禁止!」といっても使う奴が稀にでてきてコマっています。
- 308 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:31:38 ]
- ありません。
- 309 名前:デフォルトの名無しさん [2007/03/07(水) 16:43:50 ]
- 質問です。
ヘッダーファイルで private: int (*ptr)[10]; int x[10][10]; と宣言しています。ちゃんと機能しています。 それでデコンストラクターでメモリの解放をしたいんですけど delete [][] x; ではコンパイルが通りません。 delete [] x; では Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) と出てRun-Time Errorになってしまいました。 どうやって解放するんでしょうか?教えてください。 環境はVC++2005 Express Editionです。
- 310 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:49:12 ]
- >>309
newしてないんだからdeleteする必要はない。
- 311 名前:309 mailto:sage [2007/03/07(水) 16:53:34 ]
- >>310
あア、ナルほど! newとdeleteはセットなんですね。 ご親切にどうもありがとうございました!
- 312 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:02:02 ]
- あと、デコンストラクタじゃなくて、デストラクタな。
俺も昔勘違いしてた。
- 313 名前:デフォルトの名無しさん [2007/03/07(水) 17:40:36 ]
- if(aaa>=1 && aaa<=10)
のように if(aaa>='1' && aaa<='10') これも文字だけでできますか?わざわざ数字に変換しなくてもいいですか?
- 314 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:43:27 ]
- わざわざ数字に変換しないとだめです
- 315 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:43:51 ]
- '10'
- 316 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:45:25 ]
- '10'は規格上は通るけど、恐らくあなたの期待した値にはならないでしょう。
- 317 名前:デフォルトの名無しさん [2007/03/07(水) 17:47:25 ]
- '9'までしか無理ということですか?
- 318 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:49:53 ]
- 文字定数でぐぐれ
- 319 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:54:32 ]
- そもそもaaaの型は何だよ。何が入っているんだ
- 320 名前:デフォルトの名無しさん [2007/03/07(水) 18:00:41 ]
- リテラルにあった型です
- 321 名前:デフォルトの名無しさん [2007/03/07(水) 18:30:53 ]
- 年月日時分秒を取得するlocaltimeという関数は見つかったのですが
その取得した時間に10時間プラスしたときに 24時間を越えると日付によって年月日は変動すると思います 時間をたしたいのですが こういう処理のためになにか用意されていないでしょうか? 環境はVC++2002です
- 322 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:33:17 ]
- 閏秒は無視して、localtimeに渡す前のtime_tに対して10*3600足せばよくね?
- 323 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:34:19 ]
- time_t
struct tm
- 324 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:34:25 ]
- >>321
time_t型にした上で、10時間(10 * 60 * 60[sec])を足し、localtime()でばらすかstrftime()で文字列にすれば宜しい。 既にlocaltime()でばらしてあるなら、tm_hourに10を足してからmktime()でtime_tにしてもいい。
- 325 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:39:11 ]
- 初心者本でこの辺りをまともに解説しているのってあるのかな。
ちなみに、localtime(), gmtime(), asctime(), ctime()はスレッドセーフではないので マルチスレッドプログラミングのときはご用心。
- 326 名前:321 [2007/03/07(水) 18:45:56 ]
- マルチスレッドプログラミングですがlocaltimeを使うのはまずいでしょうか?
- 327 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:49:18 ]
- 処理系のマニュアルを参照セヨ
- 328 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:49:49 ]
- 簡単なプログラムの途中に見栄えを良くするために
横線を引きたいのですが、何かいい方法はありますでしょうか?
- 329 名前:321 [2007/03/07(水) 18:50:51 ]
- 1スレッドでしか試してませんが
time_tに対して10*3600してできました ありがとうございます
- 330 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:00:18 ]
- localtime()などは内部の静的な領域を使い回しするから、
それを呼び出すスレッドが複数ある場合は衝突が発生する可能性がある。 まぁ、呼び出すスレッドが一つだけなら問題ないけどね。 簡単に図式化するとこうなる。 ・単一スレッドからの呼び出し スレッドA ──localtime()呼び出し──内部領域変更──localtime()から復帰──内部領域から結果を回収── ・複数スレッドからの呼び出し スレッドA ──localtime()呼び出し──内部領域変更──localtime()から復帰──内部領域から結果を回収── スレッドB ────localtime()呼び出し──内部領域変更──localtime()から復帰──内部領域から結果を回収── ↑ ↑ ここで壊れる。 もし壊れなくても、ここでスレッドBからの呼び出しの結果を読む羽目になる。
- 331 名前:デフォルトの名無しさん [2007/03/07(水) 19:08:53 ]
- localtime()を使うスレッドクラスをひとつ用意すればいいということですね
すごく参考になりました
- 332 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:43:27 ]
- >>320
ふざけたこと抜かすんじゃねー
- 333 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:44:01 ]
- VCのCRTはTLS使ってるから問題ないけどね。
- 334 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:48:49 ]
- >>317
数値と文字を一緒にするな。 他の言語だと自動で文字を数値に変換したりするけど C/C++などは'9'をそのままASCII文字コードだよ。 e-words.jp/p/r-ascii.html つまり '9'を数値で言うと57 '$'を数値で言うと36 だ。 '10'はコンパイラによって違うと思う。
- 335 名前:デフォルトの名無しさん [2007/03/07(水) 21:39:31 ]
- メイン関数内でnewしている継承される可能性のあるクラスを
継承された場合、継承後のインスタンスでnewしたいのですが、エレガントな方法が 思いつきません、ご教授お願いします。
- 336 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:49:53 ]
- >>335
複数のクラスがそのクラスを継承してる場合はどうするべき?
- 337 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:52:44 ]
- >>335
もうすでにnewしちゃったんじゃしようがないんじゃない。
- 338 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:54:41 ]
- newの代わりにFactoryを用意して(関数ポインタでも可)それ経由で生成するのがC++的には一番楽かな。
- 339 名前:デフォルトの名無しさん [2007/03/07(水) 22:13:46 ]
- >>336
継承後も含めてそのクラスのインスタンスが一つしか存在しないようにします。 >>338 Factoryでインスタンスを取得し、 FactoryをVirtualtou(等)にして継承した場合書き換えるという風にですか?
- 340 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 22:36:25 ]
- 継承するクラスをC++より上位のレイヤーで1つだけに制限できるというなら、
グローバルな関数 Base *new_derivered_class(); を実装すればよくね? それとも、継承先のクラスが存在しない場合Baseをnewする必要があるわけ?
- 341 名前:デフォルトの名無しさん [2007/03/07(水) 23:07:38 ]
- ホームページから任意のデータの取得を行いたいんだが
さっぱりその方法が解りません。 その手のことが書かれたサイトを教えていただけませんか?
- 342 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:10:18 ]
- rubyなどのスクリプトを使う
- 343 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:14:21 ]
- >>342
やはりそうですか。 Cでやりたかったのですが、素直に真珠でやります。 ありがとうございました。
- 344 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:15:59 ]
- 真珠…
- 345 名前:デフォルトの名無しさん [2007/03/07(水) 23:20:04 ]
- >>340
継承してメンバー関数を上書きして処理を記述するようにしたいので、 何か処理をする場合には、必ず継承しなければならないです。 継承しない場合は、現実的にはないと思うのですが・・・
- 346 名前:デフォルトの名無しさん [2007/03/07(水) 23:23:48 ]
- >>343
「猫でも分かるネットワークプログラミング」にhtmlを読み込んで表示する方法が書いてあったと思う 今手元にないので分からんが、WinSockをつかってたとおも
- 347 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:29:17 ]
- WinsockでHTTPしゃべるのは結構面倒くさいヨ。
- 348 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:38:18 ]
- どうもです。
分野はネットワーク関係なんですね。 それが解っただけでも十分です。 ありがとうございました。
- 349 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:51:03 ]
- >>343
WindowsならURLDownloadToCacheFile()が一番お手軽
- 350 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 01:16:50 ]
- >>343
真珠ってPearlって書くのしってんのか? いやPerlもPearlから来てるんだがな
- 351 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 11:07:27 ]
- C++builder使っております。
unsigned char*とchar*のキャストは、(*型)だけでキャストできるのでしょうか? 出来ないキャストの場合は、エラーや警告などでますか? 以下のようにしてプログラミングしましたが、希望通りの出力でした。 ネットで危険なキャストがどうの、って良く見かけるんですが よくわかりません。 ”桁が大きくなると、小さい型にキャストするときは気をつける。” これだけ注意すれば大丈夫でしょうか? unsigned char* un_str="hoge"; char* str; unsigned char* from_char_to_unsigned_char_str; //char*->unsigned char *の格納する変数 printf("un_str=%s\n",un_str); //unsigned char*は、char*みたいに出力できるか str=(char*)un_str; printf("str=%s\n",str);//(char*)だけで、キャストできるのか from_char_to_unsigned_char_str=(unsigned char *)str; printf("from_char_to_unsigned_char_str=%s\n",from_char_to_unsigned_char_str);//(unsigned char*)だけで、キャストできるのか ------出力------------------------------- un_str=hoge str=hoge from_char_to_unsigned_char_str=hoge
- 352 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:03:04 ]
- C言語を仮定するけど、ポインタは全部同じサイズだから相互にキャストできるよ。
> printf("un_str=%s\n",un_str); %s は const char* 型の引数を期待するから、 *((const char*)un_str)という変換が行われることになる。 un_strが指してるのは"hoge"、つまり const char[] だから、問題なく変換できる。 他も同じ。
- 353 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:26:55 ]
- > C言語を仮定するけど、ポインタは全部同じサイズだから相互にキャストできるよ。
現実には大抵そうなっているけど、規格上はそんな規定なんてないはず。
- 354 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:28:46 ]
- そうだっけ?
んじゃvoid*の扱いはどうなるんだ?
- 355 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:29:45 ]
- 同じでない場合は、void*が一番でかいポインタのサイズ
そして使うときはキャストされるので問題なし
- 356 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:32:17 ]
- 昔懐かしい、farポインタ、nearポインタ、とか?
- 357 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:40:29 ]
- 残念ながら void* も void(*)() を保持できる保証はない。
- 358 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:42:58 ]
- 375<< インラインアセンブリならできるかも・・・
- 359 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:45:19 ]
- >>356
普通に char* と int* のサイズが違うようなアーキテクチャも存在した。
- 360 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 17:23:43 ]
- >>352-359
> C言語を仮定するけど、ポインタは全部同じサイズだから相互にキャストできるよ。 いろいろと実験しながら、少しずつわかってきました。 丁寧に説明ありがとうございました。
- 361 名前:デフォルトの名無しさん [2007/03/09(金) 20:15:24 ]
- WinSDKで、
モーダルダイアログボックスを使っているとき、 プロシージャに最後に呼ばれるメッセージは何ですか? WM_CLOSEメッセージでDestroyWindow(hDlg)して、 WM_DESTROYメッセージが呼ばれた後に、WM_COMMANDがくるのですが…
- 362 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 20:55:26 ]
- WM_DESTROYでウィンドウが消えた後は
たとえそのウィンドウ宛にメッセージが来ても それは存在しないウィンドウハンドル宛だし 処理するところがないので無視することになるだけだと思うけど。 何か特殊なケース?
- 363 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:06:17 ]
- >>362
WM_COMMANDがくること自体は問題ないのですが、 エディットコントロールにWM_COMMANDがきたときに使うメモリを解放するのに、 WM_DESTROYの後にエディットコントロールに対してWM_COMMANDがきてしまうと、 わざわざWM_DESTROY呼ばれる前後で、場合分けするのが無駄だと思えるので…
- 364 名前:デフォルトの名無しさん [2007/03/09(金) 21:31:38 ]
- VC++6 で CString 使ってるんだけど、
CString な変数に ANSI コードページでもユニコードでもない文字列つっこんで処理したいんですわ。 具体的には、GetLenth とか Replace したい(ANSI コードページでもまともに処理してなさそうだけど) 楽に処理するにはどうしたらいいでしょう?CString 捨てな方法でもいいです。
- 365 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:56:12 ]
- vector<BYTE>でよくね?
- 366 名前:364 [2007/03/09(金) 22:07:24 ]
- >>365
俺に言ってる? CString はたとえばコードページ 932 の場合、 Replace で 1 バイト文字を置換対象にするときに、2 バイト文字の下位バイトが置換対象とバイト的には等しくても、置換しないようにするよね? そういうのをすべてのコードページでやりたいの。 ではよろしくお願いします。
- 367 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:08:23 ]
- >>364
っ nkf
|

|