1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ!
545 名前:デフォルトの名無しさん [2006/02/06(月) 20:39:32 ] どれかひとつ選ばなければならないとしたら不本意ながらC++/CLIを選ぶしかないわな。
546 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:46:22 ] レヴューリリースだわな、managed C++は。
547 名前:デフォルトの名無しさん [2006/02/06(月) 20:49:30 ] 正直、記憶力がおいつかない。
548 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:55:37 ] でも、サービスパックも出てない VisualStudioを使うほどバカじゃなし。 MS製以外でコンパイル通るヤツってある?
549 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 23:39:31 ] >>548 無いよ。バカ
550 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 00:04:25 ] バカじゃん
551 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 01:01:12 ] おまえら、VS2005マジで使うの? バカじゃん。 すでに、MSはSP出荷を確約してるんだぞ。
552 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 01:44:04 ] >>551 じーっと枯れるのまってろこのうすらタコ!
553 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 02:14:49 ] >>548 VB6でも使っとけよ wwww
554 名前:デフォルトの名無しさん [2006/02/07(火) 02:41:12 ] >>552 N88 BASIC
555 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 10:21:32 ] バカが3匹。
556 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 10:51:33 ] Win32コンソールアプリケーションの int _tmain(int argc, _TCHAR* argv[]) は int main(int argc, char* argv[]) にしちゃいますけど。いいですよね?引数がアルファとかヌメリックなら。
557 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 11:32:34 ] 漏れは int main(const int argc, const char* const argv[])
558 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:00:33 ] >>557 そこまでいくなら戻り値もconstにしてはどうか?
559 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:21:59 ] >>558 参照返しじゃないから意味なし。
560 名前:558 mailto:sage [2006/02/07(火) 13:27:44 ] >>559 ああ、確かに意味は無いなw でも、argcもconstにしてるけど、これも意味が無いから、 それをさらに徹底させるって意味で返り値もconstにすればいいのにー っと思っただけ
561 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:04:04 ] argcの場合、意義はともかくプログラム上の意味が変わる。
562 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:21:19 ] うっかり書き換えるとコンパイラにゴルァされるとか
563 名前:558 mailto:sage [2006/02/07(火) 14:26:48 ] 確かに関数内では意味が変わる...か。 関数のオーバーロードでは同一視されるから一緒と思ってたけど、 内部の事は忘れてた。thanks
564 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 15:01:05 ] >>558 お前素直な奴だな
565 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 00:54:04 ] そこでconst_castの登場だな
566 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 18:26:06 ] 全部ILで書こうぜ
567 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 19:24:23 ] 遅いからヤダよ。
568 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 01:52:44 ] STL/CLIお蔵入り
569 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 04:28:08 ] 固定長配列はcli::array以外に用意されてない?
570 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 11:58:31 ] >568 STL.NETは別途配布されるんじゃなかったの?
571 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 12:38:09 ] BOOST.NETも出たりとか。 正直大混乱。
572 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 13:44:43 ] 正直いってWinXPのSP2入れたくないからとかいう理由で SP1を使ってる馬鹿と同レベルの理屈だな 新しいものの方がいいに決まってる。たとえバグ込みでも 長い目で見れば将来性の高いほうを選択する方がよい
573 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 17:47:52 ] >>571 BOOST.NETって何?そんなんあんの?
574 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 22:47:44 ] >>572 その将来性のおかげで、君の部下が次々と止めていくんだがどう責任取るのかね?
575 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 21:58:53 ] 値型にデフォルトコンストラクタと代入演算子を定義できる .NET言語ってあるんかな?
576 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 22:01:31 ] フレームワーク内のprivateないくつかの構造体を見ると、 デフォルトコンストラクタ使ってるのがいくつかあるな。 Win32関係の構造体で自分のサイズを設定してるんだが。
577 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 22:20:02 ] >>575 つIL (ilasm) まぁぶっちゃけいらないっていうかあってもまずやっちゃいけないしな
578 名前:575 mailto:sage [2006/02/10(金) 23:53:50 ] >>576 ,577 どうも Reflectorでみてみたら staticコンストラクタで代用しているのはありました。 こんな感じで試してみようかな... ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=40822
579 名前:575 mailto:sage [2006/02/11(土) 01:08:41 ] やってみたけどよくわからんかった。でも templateの部分特殊化でCLI型が使えるみたいだから、それでcreateすればいいか. template <typename T> ref struct Type{ T create(); }; template <typename T> ref struct Type<T^>{ T^ create(); };
580 名前:デフォルトの名無しさん [2006/02/11(土) 07:51:31 ] C++ で boost の shared_ptr とか boost::program_options とか 使いまくりんぐのプログラム作ってきたんだけど、 C++/CLI でそのコード流用できるんですかね? stl::map とか使いまくりんぐノプログラムは そのままで動くのか、STL.NET みたいなモノをつかうように 移植しなけりゃならないのか、System::Collections を 使うのが C++/CLI 流なのか・・・・・・ 何でも出来るから何使えばいいか迷う。
581 名前:デフォルトの名無しさん [2006/02/11(土) 09:40:08 ] C++/CLIは便利だと思うが、棲み分けに失敗した感じがするな。 C#で統合するはずが、C++/CLIで統合されるとは…。 本当は.NET対応はC#だけでよかったんだと思う。
582 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 10:25:45 ] >>580 managedなobjectをどう扱いたいかによるだろ? 例えば数値計算してその結果を3Dグラフ表示するような場合、 数値計算の部分は普通にC++使えばいいけど、(例えばboostなど) 画面表示の部分はどうしてもCLIに頼らないといけない。 C++/CLIは基本的にC++の上位互換と考えていいから。 "spaced keyword"なんていうのは非互換だけどね。
583 名前:デフォルトの名無しさん [2006/02/11(土) 10:29:11 ] おまえら、どのエディション使ってるの?
584 名前:デフォルトの名無しさん [2006/02/11(土) 10:35:44 ] >>582 うむ、いっていることは分かる。 まさに数値計算して可視化、ってのは仕事で必要。 しかも膨大な数値計算用のライブラリ(自作+他作)がすでにある。 今一番の問題は、コマンドラインをパーすするために便利な boost::program_options を C++/CLI コンソールアプリでも 使いたいってことかな(笑
585 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 11:10:32 ] C++/CLIは、CLIに頼らなければいけない時だけ、 managedなコードを書かなければいけないC++だろ? embedded C++みたいに言語の機能抜かれているわけじゃないから。 ライブラリであるSTL .NETは、C#やHaskelからも使えるSTLライブラリとして、 C++特有のところは抜かれているけれど。(特殊化関連など)
586 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 11:11:09 ] >>585 > managedなコードを書かなければいけないC++だろ? managedなコードも書ける、とも言えるし。
587 名前:デフォルトの名無しさん [2006/02/11(土) 11:15:34 ] >>585 ふむ、いわれてみればそうだな。 俺があまりにも boost 依存なコードを書きすぎていただけだと思う。
588 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 15:56:27 ] >>581 いろんな言語が使用できるっていうのが.NETのうたい文句のひとつだったから C#だけって言うのはいただけない
589 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 16:22:28 ] 馬鹿はスルーしる
590 名前:デフォルトの名無しさん [2006/02/11(土) 16:26:50 ] .NETって実際複数言語で開発してたりすんの?
591 名前:デフォルトの名無しさん [2006/02/11(土) 16:48:36 ] >>590 俺はドトネトは C# しか使ってないけど、 俺が使ってるアセンブリが C++/CLI や VB.NET で作られているかどうかは知らない。
592 名前:デフォルトの名無しさん [2006/02/11(土) 16:53:16 ] VC++はVC++で作られていますという件はもはや過去のもの?
593 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:26:02 ] 「ドトネト」って言う呼び方はアンチっぽいからやめてくれ
594 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:31:18 ] エロビデオのネバスペみたいなもんか。
595 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:39:26 ] Win32APIなどのネイティブ呼び出しをC++/CLIでラップしてあとはC#で開発してる。 windows.h の関数や定数の定義をそのまま使える上にInteropで呼び出しも高速なので P/Invokeよりぜんぜんいいよ。 ドトネトよりポチネットのほうが可愛い
596 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 18:07:08 ] >>595 狂おしいほどに同意 アセンブリの中にネイティブコードを突っ込めるから 逆コンパイルにも対抗できるし。
597 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 20:57:49 ] そんなことしたら64bitでそのまま動かないじゃん
598 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 03:52:02 ] >>597 32bitで何か問題でも?
599 名前:デフォルトの名無しさん [2006/02/12(日) 16:51:41 ] C++/CLIがNativeとManagedの混合アプリを作るのに優秀なのは理解できるが、 /clr:safe なアプリをあえてC++/CLIで作ることに意味があるのだろうか。
600 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 17:37:42 ] >>599 特になし。C++/CLIはC++使い慣れてる(C++ライブラリを膨大に抱えてる)人を .NETに繋ぎとめておくためのもの。
601 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 21:00:01 ] 2003のWin32APIやMFCを2005ExpressEditionで使おうと 頑張ってみたが無理だった。 Win32APIはコンパイル通るけど警告出るし、 MFCに関しては全くお手上げ。
602 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 22:31:04 ] >>601 WinAPIは2003から持ってこなくても最新のPlatform SDKを入れればいいだろうに。
603 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:14:27 ] C++/CLIはVB.NETで作ったクラスライブラリを呼び出すことも可能?
604 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:33:15 ] 可
605 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:51:30 ] >>602 最新のSDK持ってきたら、警告なくなったよ。ありがと。
606 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 08:02:58 ] managed C++ みたいに C++/CLI もやっぱやーめたなんてことにはならんだろうな? 前者はなんか標準化団体には出されてたんだっけ?後者はだされてたよな?
607 名前:デフォルトの名無しさん [2006/02/13(月) 08:05:18 ] >>605 感謝は言葉ではなく物で示せ。
608 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 12:44:28 ] >606 今、ISO で標準化の審査中
609 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 13:03:53 ] >>608 それは C++/CLI だよね? もう Managed C++ はいらんでそ。
610 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 14:01:33 ] (1)for each( int obj in v) (2)for each( int^ itr in v) (3)for each( int% r in v) for each する場合、どれがお勧め?
611 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 15:26:41 ] >>609 www.ecma-international.org/publications/standards/Ecma-372.htm これがISOに提出された。まあISOになる可能性はないと思うけれど。
612 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 16:55:39 ] >>611 あれ?ないの?
613 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 17:22:33 ] CLI 自体はすでに ISO 標準になってるんだよな。 Java VM も ISO 標準にすればいいのに。 Java 言語とは切り離して。
614 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:06:42 ] で、ISO 標準て何の役に立つの?
615 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:07:31 ] ネームバリュー
616 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:10:32 ] 実質を無視したネームバリューなら、 Java >>>>>>(壁)>>>>>> C丼(I$O) だね。
617 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:13:08 ] >>616 実質的なネームバリューだと思うけど。
618 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 21:22:11 ] >>616 Java のネームバリューってかなり実質的なものだと思うぞ。
619 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 23:26:25 ] >>613 EMCAの時に、J2EEも同時に採用されることにこだわった。 当時は、IBMその他ベンダーが独自ビジネス向けフレームワークの覇権を争っていた。 Javaはまだまだ言語規格の変化が激しいから、10年前なら見送りも妥当だったと思う。 今は、C++みたいにろくにない実装も規格を作るのに抵抗がなくなってきている。 だからJavaも今からISOの提出してもいいと思うけれど、 EMCAのWin系規格みたいに放置されると困るよね。 C#やCLIもそんなことにならないかと心配。
620 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 04:09:12 ] >>618 確かにJavaはネームバリューだけだな
621 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 09:09:07 ] ドトネッツは実質NO.1 (ベーパーウェア部門)
622 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 13:57:47 ] >610 vの中身を書き換えたいときは、必然的に(3) (1)と(2)でコンパイル結果に差が出るかは知らんが、同じなら(2)の方が他の参照型などと統一性が採れると思う
623 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 22:40:58 ] int^ だとボックス化のコストが高くない?
624 名前:610 mailto:sage [2006/02/15(水) 09:08:44 ] >>622 ,623 値型の場合、(1)が無難な気がしてきた。(2)はテンポラリGCポインタなのか...(3)はなんか怪しい... 参照型の場合、(2)しか選択もうない気が、第4の選択肢は危険ぽいし... ref struct Test{ Test(){}int x;Test(int in_x) :x(in_x){} static void test(){ System::Collections::Generic::List<int> v;v.Add(1);v.Add(2);v.Add(3); //case1 //cli::array<int>^ v = {1,2,3}; //case2 #define SHOW for each(int i in v){Console::WriteLine(i);} for each(int i in v){i *= 2;}SHOW;//result->{1,2,3} for each(int^ p in v){(*p) *= 2;}SHOW;//result->{1,2,3} //for each(int^% p in v){(*p) *= 2;}SHOW;//danger for each(int% r in v){r *= 2;}SHOW; //case1->{1,2,3},case2->{2,4,6} -> unsafe code } static void test2(){ System::Collections::Generic::List<Test^> v;v.Add(%Test(1));v.Add(%Test(2));v.Add(%Test(3)); //cli::array<Test^>^ v ={ %Test(1),%Test(2),%Test(3) }; #define SHOW2 for each(Test^ t in v){Console::WriteLine(t->x);} for each(Test^ p in v){(*p).x *= 2;}SHOW2;//result->{2,4,6} for each(Test^% r in v){(*r).x *= 2;}SHOW2;//result->{4,8,12},case2->{2,4,6} -> unsafe code } };
625 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 12:54:23 ] >624 何を悩んでいるのかよくわからん 列挙する型に合わせれば良いんじゃないか? 適材適所だろ
626 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 16:25:30 ] ^うざ
627 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 19:45:53 ] よーく見ると、顔に見えてくる。
628 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 14:49:04 ] VS 2005 C++だす × String str = "Hello"; ○ String ^str = "Hello"; いちち^付けないといけないみたいですね、 ^ってどういう意味デツカ
629 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:09:39 ] >>628 C++/CLIに於けるポインタ
630 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:17:47 ] そっか、それで *を^に変えろって困憊羅が言ってるの、見たような希ガスル しかしなぁー、なぜ換える必要があるのかと、悩む事小10分 *アスタリスクはなんか他の用途でつかってるのかなぁ??
631 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:30:01 ] こう覚えた方が早い * を使っているのは C++ ^ を使っているのは CLI 拡張
632 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:44:42 ] >>630 *のポインタ型同士はポインタ演算があるから演算子多重定義ができない。 ^の追跡ハンドルならそのようなことがないから演算子多重定義ができる。
633 名前:628 mailto:sage [2006/02/18(土) 16:29:22 ] >>631 >>632 サンクスです GUIが使えるWin32でアプリケーションを作りたくて、NETや本を読んで 今学習しているところなんです、Visual Studio 2005 C++の Win32コンソールアプリケーションを開いてボタンを押したら、 テキストボックスにメッセージを表示させたりとかして 動かしているのですけど訳も分からずに、CLIを使っていたんですね(;^ω^) VS2005C++な環境でネイテイブなC++でコンソールアプリケーションは 作れないのでしょうか?MFCも挑戦しようと思いましたが、又別物のようですし 初心者的にはどの方向で進んだら良いでしょう、小一週間悶々としています
634 名前:628 mailto:sage [2006/02/18(土) 16:32:13 ] スマソ × GUIが使えるWin32でアプリケーションを作りたくて ○ GUIで動作するWindowsアプリケーションを作りたくて
635 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:45:58 ] 初心者ならC#へ行ってみてはどうかと惑わしてみる。 VS2005C++使った事無いけど、アンマネージド(ネイティブ)は作れるはずだ。
636 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:55:38 ] 2005は普通に「Win32コンソールアプリケーション」でネイティブを作れるはずだが… Expressだと違うのか?
637 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:01:58 ] >628 GUI でモノを作りたければ、素直に MFC に進んだ方がいいと思われ C++/CLI はちと初心者にはお勧めできない。普通の方法では満足できなくなった玄人向け だから あとは、635 の進めるとおり、C# でモノを作ってみて満足できなくなったら、またこちらに 出戻ってくると言うのもいい
638 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:15:12 ] >>633 コンソールアプリケーションとテキストボックスのつながりがわからん
639 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:36:48 ] すんません、又間違えていました CLRからWindowsフォームアプリケーション作成でした
640 名前:デフォルトの名無しさん [2006/02/18(土) 21:12:37 ] 他スレから誘導されてきました。 C++/CLIを使っているんですが、 自分のクラスライブラリのシングルトンのクラスにあるSystem::Drawing::Size型のプロパティを変更しようとしたら p->Size = System::Drawing::Size(64, 64); と設定はできるのですが、 p->Size.Width = 64; のように個別に設定しようとしたら必ず0になってしまいます。 どうすれば個別に設定できるようになりますか。
641 名前:640 mailto:sage [2006/02/18(土) 21:26:55 ] 投稿して気付いたのですが、Sizeの部分をハンドルにしたら設定出来るようになりました。 何故かがわからないですが・・・。 スレ汚しすいませんでした。
642 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 21:48:34 ] >>641 System.Drawing.Sizeは型値だから扱いが面倒だのう。
643 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 06:34:22 ] >>633 スレ違い pc8.2ch.net/test/read.cgi/tech/1131590396/
644 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 14:36:44 ] >>641 というかそれはあまりよろしくない。たぶん。 p->Size = Size(64, p->Sizte.Width); としなさい(こういうCLRの常識みたいなのもいるから また複雑なんだよな>C++/CLI)。
645 名前:644 mailto:sage [2006/02/19(日) 14:43:34 ] にゃー、コード間違いすぎ p->Size = Size(64, p->Size.Height); こう。