1 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:08:39 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ! このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。 .NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に お願いします。 前スレッドはこちら (p)pc8.2ch.net/test/read.cgi/tech/1126450441/l50 姉妹スレ くだすれC++/CLI(初心者用) (p)pc8.2ch.net/test/read.cgi/tech/1142144110/l50 managed C++ やろうぜ!! 002 (p)pc8.2ch.net/test/read.cgi/tech/1139043535/l50
415 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:48:01 ] >>414 Console::ReadLine();などででプログラム止めてる? plusA(*x); って、*xがplusA関数に渡されるときに、 *xのコピーオブジェクトが作成され、そのハンドルがplusA関数の仮引数に 格納されるから、値が変わらないってことでいいのかな? そうそう、 (10).Equals(11); みたいに定数もオブジェクトとして扱われるんだね。
416 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:21:27 ] >>414 コンソールプログラムのプロジェクトにしている? そうしないと、cout, printf, WriteLineの出力先は現れないよ。 コンソールプログラムのプロジェクトでなかったのなら、 プロジェクトのプロパティのリンカのシステムか何かのとこにサブシステムの設定があるから、 その中のコンソールを選べばいい。 msdn2.microsoft.com/ja-jp/library/fcc1zstk (VS.80).aspx >>415 plusA(*x);でコピーが作成されるのはそのとおり。ボクシングとは、 結局マネージドヒープに新しくオブジェクトを作って、そこへコピーすること。 値型のハンドルを引数に受け渡しすること自体はVBのByRefや Cのポインタ渡しそっくりでいいんだが、ボクシングという 暗黙のオブジェクトのコピーが働くから話が少々厄介になっている。
417 名前:デフォルトの名無しさん [2007/08/06(月) 21:48:15 ] boostみたいにprivateもシリアライズできる 非侵入型のシリアライズはないのでしょうか?
418 名前:デフォルトの名無しさん [2007/08/07(火) 19:32:08 ] 最初2003のManaged C++で作ってたんだが 都合により2005のC++/CLIに移ることにした。 プロジェクトを変換してコンパイルエラーを片付け、 いったんは動くようになったんだが しばらくしてリビルドしようとすると リンクエラーLNK2020「メタデータの操作に失敗しました」 が発生する。 今環境がないんで詳しいエラー内容は書けないんだが 「プロパティの数が違う」みたいなことを言われていた。 LNK2020にはいろいろ種類があるらしく、 「重複する型に、適合しないフィールド宣言があります」なら リビルドすればいいらしいんだが、リビルドしてみても直らなかった。 プロジェクトを新規作成してファイルを全部入れても同じエラー。 ググっても英語のページすら出てこなかった。 誰か対処方法知ってたらplz
419 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:38:50 ] 最低限のコードを入れてリビルドして、どうなる?
420 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:42:36 ] >>419 stdafx.h stdafx.cpp main.cpp resource.h だけの状態?
421 名前:デフォルトの名無しさん [2007/08/07(火) 20:48:11 ] すまんLNK2022だった
422 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:26:28 ] アノニマスな構造体があったの?
423 名前:418 mailto:sage [2007/08/08(水) 20:34:16 ] どうやらプロジェクトファイルが壊れていた模様。 もう一回プロジェクト変換しなおして ソースとヘッダ入れたら動いた。 お騒がせスマソ >>422 なかった
424 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:43:41 ] VC++ expressで C++/CLIを使うときの制限事項ってどんなのがありますか?
425 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:05:30 ] 別に何も無いよ
426 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 05:45:05 ] え?そうなの? デバッグ機能とかGUIのデザインあたりが はしょられてるんかと思ってた
427 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 08:36:21 ] >>424 msdn2.microsoft.com/ja-jp/library/hs24szh9 (VS.80).aspx
428 名前:デフォルトの名無しさん [2007/08/19(日) 21:32:30 ] intからenum(enum classじゃない)に変換したいんだが 普通のC言語のようにただのキャストじゃ変換できない? どうもできていないような気がするんだが。
429 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:09:33 ] >>428 enum classじゃないenumはC++のそのままですよね? 単に使い方がおかしいだけでは。ソースを示してみたらどうです。
430 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:34:08 ] DirectXのコードなんだが D3DFORMAT fmt = (D3DFORMAT)21;
431 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:38:04 ] 実際のコードでは21の部分は変数になってる。 ユーザの入力。
432 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:44:36 ] 実体が unsigned long int なんじゃね?
433 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:03:15 ] ヘッダではこうなってる typedef enum _D3DFORMAT { (省略) D3DFMT_A8R8G8B8 = 21, (省略) } D3DFORMAT;
434 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:05:14 ] 直後にブレークポイントつけてウォッチすると fmtが「未定義の値」になってる。
435 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:48:25 ] これで普通に代入できたぞ? int val = 21; D3DFORMAT fmt = (D3DFORMAT) val; std::cout << fmt << std::endl; VS 2008 Beta2 なんで、2005でも大丈夫かわからんが
436 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:52:56 ] version違いの*.hがあって、21がない方のをincludeしてるとか。
437 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:53:44 ] d3d9types.h なんて前からあるっしょ これでリリース・ビルドしていたせいで変数がデバッガ上で正常に表示されていなかった なんてオチだったら指さして笑うが
438 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:24:44 ] C++/CLIって実際どのくらい使われてるの?
439 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 01:02:33 ] Dの5倍くらい。
440 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:26:53 ] >>438 俺仕事で使ってる ただのラッパークラスだが
441 名前:デフォルトの名無しさん [2007/08/21(火) 09:18:49 ] >>440 ネイティブのライブラリをドトネトから使うため?
442 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:54:43 ] >>411 前の製品の再利用可能な部分 GUIはC#になっちまった
443 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:55:14 ] 安価ミス >>441 な
444 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:01:14 ] >435 enumは int だし。ってのはCの仕様だっけか。
445 名前:428 mailto:sage [2007/08/22(水) 21:45:58 ] どうやらint関係なしに 直接D3DFMT_R8G8B8を入れても <未定義の値>になる。 デバッグにはなってるんだが。
446 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:32:24 ] enum は含まれる値を全て表現可能なサイズの型になる。
447 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 08:38:13 ] >445 直接、D3DFORMAT の enum 値を出力してみたら? TRACE でも cout でも何でもいいけど ちなみに、コンパイラは VC8 なんだよな?
448 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:02:06 ] >>447 ちゃんと21が出たw VC8です デバッガがミスっただけかな。
449 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:29:40 ] フォームを多言語化して、ニュートラルと日本語のリソースを交互にいじってると 設定した値が元に戻ったりするんですが、これについて何かご存じな方 いらっしゃいますか?
450 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:35:42 ] 追記です VS2005上での話です。
451 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 15:44:35 ] この言語ほんとに流行りそうなの?
452 名前:デフォルトの名無しさん [2007/09/01(土) 20:26:10 ] .NET が流行れば。 だって既存の C++ のライブラリの ラッパーとしての存在価値は少なくともあるから。 で、.NET というか CLR ってこれからはやるのかね? mono でも ASP.NET をはじめとしていろいろ動く ようになってるし、.NET Compact Framework も 広がりを見せているようだけど。
453 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 21:22:06 ] C++/CLI自体が単体で流行ることはないと思う。 あくまでもC++の資産を.NETで利用するためのツール。
454 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:30:15 ] C++/CLI 自体は JDirect の正当な発展系だと思う .net が COM 拡張として発生したように、外部管理オブジェクトのハンドリング用言語として C++ を拡張したものだから Windows 用の Objective-C みたいなものなんだけどなぁ
455 名前:デフォルトの名無しさん [2007/09/01(土) 23:46:12 ] Objective-C つかったことないや
456 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:48:42 ] はいはい死滅死滅
457 名前:デフォルトの名無しさん [2007/09/02(日) 14:31:02 ] 2008になったらC++CLIは何かかわんの?
458 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 14:47:34 ] >>457 STL/CLRとこれまで規格に非準拠だった部分の対応。 例えばC型配列がarrayと同等に扱えるようななった。
459 名前:デフォルトの名無しさん [2007/09/02(日) 16:07:58 ] がるぽっ
460 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:09:48 ] C++0x が確定するまでは、大きな修正は入れてこないだろうね また、いろいろと言われるから(w
461 名前:デフォルトの名無しさん [2007/09/02(日) 16:50:15 ] なんか、見た目が変態的なソースコードになるよな・・・ 無理矢理.netに対応させた文法を追加せずに、 C++にライブラリで誤魔化したほうがマシな気が・・・ .netに最適化した言語、とかならC#ってのをやってるのだし、 あんまりC++/CLIの存在意味がないような・・・
462 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:05:21 ] それをやったのが mc++ で、マネージド・オブジェクトの判別が付かなくなったので 明示的に分離するように変更したんだよ C++ は既存のままで、CLI を追加構文で、これでようやく見通しが良くなったのさ oldSyntax で一度書いてみると、ライブラリで対応って言うのが以下に非現実的か よくわかるよ
463 名前:デフォルトの名無しさん [2007/09/02(日) 20:13:36 ] 正直 Managed C++ は「よけいわかりにくいわ!」って 感じだったからな。マネージドな部分とそうでない部分が 明確に分かれている C++/CLI のほうがわかりやすい。 確かに上にあった Objective C の Microsoft 版だという たとえは的を射ていると思う。
464 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:16:36 ] 漏れにスキルさえあれば、JVM や Squeek に CLI ラッパをかぶせて、GCC の C++/CLI 実装を作ってみるのになぁ
465 名前:デフォルトの名無しさん [2007/09/07(金) 18:04:21 ] .NET2005 C++/CLIで開発しています。 設定情報をapp.comfigから読みだすために app.config(appはプログラム名へ後に変換)へ例えば <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="HOGE" value="ほげほげ" /> </appSettings> </configuration> と書いて、C++/CLIのコード(フォームアプリ)からは、 MessageBox::Show(System::Configuration::ConfigurationSettings::AppSettings[ "HOGEHOGE"]); MessageBox::Show(System::Configuration::ConfigurationManager::AppSettings[ "HOGEHOGE"]); と呼び出して表示しているのですが、OSがXP(SP2)だとうまくいき、 Win2000(SP4)だと表示が空文字になってしまいます。 MSDNにはWin2000(SP4)もサポートしているように書いてありますし、 vcregist_x86.exeやdotnetfx.exeも実行してあるのですが。。。 このあたりの情報(こうすれば動く、実はサポート外など)を お持ちの方、いましたら教えていただけませんか。 ネットで散々探しましたが、意外とこの話題少ないんです。 よろしくお願い板します。
466 名前:465です [2007/09/07(金) 18:08:54 ] ごめんなさい。 <add key="HOGE" value="ほげほげ" /> は <add key="HOGEHOGE" value="ほげほげ" /> の間違いです。
467 名前:デフォルトの名無しさん [2007/09/08(土) 09:39:16 ] レベル高すぎ
468 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 12:14:40 ] >>465 うちの環境だと正常に読めてる。Vertual PCでWin2k(SP4)。 xx.exe.configの名前はあってる?
469 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:02:27 ] >>468 >xx.exe.configの名前はあってる? それ、ビンゴです! C#やVBはビルド時に自動でファイル名つけてくれるのに。。。
470 名前:デフォルトの名無しさん [2007/09/22(土) 02:10:50 ] 過疎ってんなー やっぱりC++/CLIは 流行らないってことでおk?
471 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 03:07:29 ] だってマネージ・アンマネージの橋渡し専用言語だもん
472 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 10:36:17 ] GDI+死ぬほどのろいんで、ペイントルーチンをC++/CLIでGDI使って 組めばいいんじゃね テキスト描画すんのもGDIのが楽なような
473 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 11:09:00 ] >>472 VistaでDDBの速度的有利さは事実上消滅したけどな
474 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 12:22:14 ] DirectDraw(笑)
475 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:28:37 ] >>473 .NETがのろくて誰も使ってくれないから全員平等にのろくしたって感じだな
476 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 15:55:56 ] 馬鹿?
477 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:13:30 ] .NETは最初から馬鹿だよ。
478 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:14:39 ] >>475 Direct3DとWPFは仲間はずれ?
479 名前:デフォルトの名無しさん [2007/09/23(日) 04:10:23 ] >>471 まぁそうなんだろうけど、そういう言語が CLI 上にちゃんと 用意されているところが Java VM とは違うところだよな。 といってドトネトを擁護してみる。 いや、漏れは好きだよ C++/CLI。というかこれがないと困る。 研究用のシミュレータをC++で boost とかのライブラリ使って 書いてるけど、フロントエンドの GUI が Windows Forms で 組めるのは楽だよ。
480 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 07:26:58 ] それって逆に選択肢がないんじゃ… > シミュ&Win Forms
481 名前:デフォルトの名無しさん [2007/09/23(日) 08:18:37 ] >>480 そうともいう。 シミュレータ自体はライブラリ化していて、コマンドライン版は Linuxクラスタで動かしているんだけど、同じライブラリを リンクしてWindowsで動くGUI版を作れるというのはかなり便利。 C# と C++/CLI と両方使って思うんだけど、 Windows Form デザイナ って両者の言語でかなり安定感ちがわないか? C++/CLI だとちょっとでも自動生成されたコードいじると もうデザイナが発狂してしまう感じ。どの程度いじってもOKなのか 基準がよくわからない。C# のほうも基準がわからないという点では 同じなんだけど、結構いじっても Windows Form デザイナが ちゃんと認識してくれる気がする。気がするだけか?
482 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 12:28:25 ] C#のほうが解析しやすい言語だから
483 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 12:57:21 ] 解析なんてしてないだろw
484 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:05:02 ] >>483
485 名前:デフォルトの名無しさん [2007/09/25(火) 14:00:50 ] プリコンパイル済みヘッダーは C++/CLIで使えるのでしょうか?
486 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 17:51:40 ] 使える
487 名前:デフォルトの名無しさん [2007/09/26(水) 23:29:57 ] プロパチー見ろ
488 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:24:24 ] C++で今まで書いてきて GUIをもっとバリバリやりたくなってきたんですが かといってMFCは嫌い。 C#は書き直すのがめんどいし そんな漏れはC++/CLIがいい?
489 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 06:58:21 ] >>488 Win32
490 名前:デフォルトの名無しさん [2007/09/27(木) 09:23:42 ] ネイティブで書かれた関数(数値計算のエンジン)を別のスレッドで動かして、 結果をグラフィカルに表示するなんてことができます? ネイティブの_begin_thread 関数を呼び出す必要が有りますか? それともドトネトのなにかを呼び出すべきなんでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:42:20 ] >>490 どちらでも可能だが、 マネージドのスレッドを使ったほうが取り扱いが楽だと思う。
492 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:44:11 ] ネイティブを混ぜるマネージドアプリに何の意味がある。
493 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:47:20 ] >>492 C++/CLIスレでそれを言うなよ。/safeにどの程度の意味があるんだ?
494 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:09:31 ] >>492 ネイティブってどういう意味で使ってるの?
495 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:10:25 ] >>494 マネージドアプリをアンマネージドアプリにする混ぜ物。
496 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:42:32 ] むしろ逆だろ pureでやりたいなら C# で十分じゃん C++/CLI はそれだけじゃ物足りない人向けだろ
497 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:50:00 ] WTLを忘れるな
498 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:31:12 ] 数値演算をC++にさせて「何の意味がある」って言われるなら、 <funcional>すら駄目ってことになるが…
499 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:41:05 ] C#って初期バージョンで完成形だったのに だんだん拡張されてキモクなってるよな。
500 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:21:17 ] 全然
501 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:14:05 ] C#程度でキモいっつーんならC++とか使えないだろ
502 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:18:33 ] >>488 楽したいならC# + C++/CLIとかWPFとか 厳しい道を行きたいなら DirectX Graphics
503 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:00:15 ] おまえ、なんかものすごい勘違いしてない?
504 名前:デフォルトの名無しさん [2007/09/28(金) 01:23:51 ] C#にある delegate の ThreadInvoke メソッドを使った ○ちスレッド処理って、同様のことは C++/CLI では できないのかな。そもそも delegate がないから無理か。
505 名前:デフォルトの名無しさん [2007/09/28(金) 01:25:43 ] ThreadInvoke じゃなかった、BeginInvoke だった。 それに、そもそも C++/CLI にも delegate はあるんだった。
506 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:44:23 ] なにを言っているんだ
507 名前:デフォルトの名無しさん [2007/09/28(金) 06:58:38 ] C++/CLIではコンテナクラスライブラリとして STL.NET なるものを使うべきなんですか?それとも .NET Framework にはほかにも(言語独立の)コンテナが用意されていて そちらを使うべきなんですか?
508 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 09:23:21 ] 好きな方を使えばいい C# で慣れてるなら .net の Collections を使えばいいし、違和感がないなら STL.NET で いい。格納するものがネイティブだったら、既存のライブラリでもいいだろうし
509 名前:デフォルトの名無しさん [2007/09/28(金) 21:18:24 ] C++/CLI では単純型の配列って初期化されるんでしょうか? あと、配列の持つ Clone メソッドっていわゆる浅いコピー しか作ってくれないんですよね?ハンドルを深くたどって 完全にコピーを作ってくれるようなメソッドはありませんか? 自分でディープコピーしないとだめ?
510 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 21:32:10 ] 一般論だけどDeepCopyの仕様はクラス作成者にしか決められないんじゃないかな。
511 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:18:26 ] >509 Primitive型と値型は初期化される
512 名前:デフォルトの名無しさん [2007/09/29(土) 09:20:50 ] ディープコピーのためのインターフェイスを実装していれば 自動的にディープコピーまでやってくれるなんてことは ないんですかね。Microsoft では「簡易コピー」と「詳細コピー」 って呼んでるみたいですが、たとえば System::Array の Clone は簡易コピーですよね?
513 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 15:17:17 ] 自動でディープコピーやったら、循環参照のときコピー終わらなくなっちゃうよ。 ArrayのCloneは簡易コピーだけど、 一般的にICloneableインターフェース実装が 簡易コピーでないといけないということはない。 Cloneメソッドが簡易と詳細どちらのコピーをするかは、 実装者に任せるというのが一般的じゃない? だから、既存のコピー実装が気に入らなければ、 外部で独自のコピー方法を定義するしかないよ。
514 名前:デフォルトの名無しさん [2007/09/30(日) 16:50:24 ] CEDEC2007で 3ds maxは、C++/CLI使ってるようなこと言ってた。 プラグインもC++/CLIだし
515 名前:デフォルトの名無しさん [2007/09/30(日) 17:49:50 ] コンテナはC++CLIならSTL+Boostがいいのかな?