1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ!
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); こう。
646 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 15:20:04 ] そんなんわからん奴はC#やJavaも微妙だろ。
647 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 15:28:54 ] >>646 …まぁな。実体の追跡もできないレベルだし。 C#はまだ動かないだけで安全だけど、こういうやつには特にC++は使わせたくない。 メモリ関係のバグ大量コードを書く。しかもそういう場合デバッグビルドだと動いたり することもあるから性質が悪い…。
648 名前:デフォルトの名無しさん [2006/02/19(日) 20:48:42 ] Visual C++ 2005 Express Edition の環境で、はまってしまい、皆さんのお知恵を拝借したいです。 Webのダウンロードなのですが、 方法1 WebClient^ wc = gcnew WebClient(); Stream^ st = wc->OpenRead("www.yahoo.co.jp/ "); Encoding^ enc = Encoding::GetEncoding("euc-jp"); StreamReader^ sr = gcnew StreamReader(st, enc); String^ out = sr->ReadToEnd(); Debug::WriteLine(out); これはうまくいきWebデータの取得ができます。 方法2 WebClient^ wc = gcnew WebClient(); Byte ^ myDataBuffer = wc->DownloadData("www.google.co.jp/ "); Encoding^ enc = Encoding::GetEncoding("euc-jp"); String^ out = enc->GetString(data); このコードだとコンパイルエラーです。 エラーメッセージは、 .\MainForm.cpp(50) : error C2440: '初期化中' : 'cli::array<Type,dimension> ^' から 'System::Byte ^' に変換できません。 with [ Type=unsigned char, dimension=1 ] この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 とあります。 バイト配列に入れたいだけなのに。
649 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:05:11 ] >>648 WebClient::DownloadData()の戻り値の型はcli::array<unsigned char>^。 Encoding::GetString()の引数もcli::array<unsigned char>^。
650 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:12:35 ] ^ ←なんかコレうざい。よくわからないけど腹立たしい。
651 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:18:36 ] (^^:
652 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:20:18 ] ^<T>^
653 名前:648 [2006/02/19(日) 21:44:16 ] >>649 Byte を cli::array<Byte> にしたところ、できました。 cli::array<Byte> ^ myDataBuffer = wc->DownloadData("www.yahoo.co.jp/ "); Encoding^ enc = Encoding::GetEncoding("euc-jp"); String^ out = enc->GetString(myDataBuffer); ばっちりです。これで先に進めます。 つい最近まで C++ Builder 使いだったので、いろいろと戸惑ってます。 ポインタは使えず、^ というものが必要だとわかるまで、延べ1日くらいかかってます。 勉強がてら少しずつ移植していきます。 どうもありがとうございました。
654 名前:Pascal mailto:sage [2006/02/19(日) 23:09:23 ] >>650 呼んだ?
655 名前:デフォルトの名無しさん [2006/02/20(月) 00:22:49 ] >>650 あなたの心が汚れてるからですよ(^^;;;
656 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 00:30:26 ] そんなばかな^^;
657 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 01:26:15 ] >>650-652 ヤベ、ツボにはまったw
658 名前:デフォルトの名無しさん [2006/02/21(火) 10:07:18 ] >>422-423 >ダイレクトに C++ を知らずに、C++/CLI に手を出すのは、止めた方がいいだろ >さっさとC#かVBで始めたほうがいいと思う。 とりあえずC#で始めようと思った矢先、C++/CLI とかいうのが目に入って、 「ファイナライザいいな」とか思ってしまったんですが、 やっぱりC#から始めることにします。 >>424 関数単位ですか。 つまり、関数呼び出しを共通化することで様々な実行環境にあるコードを一つのプログラムにまとめることができたと言うことでしょうかね。
659 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 11:10:22 ] >>658 ああ、C#にしたのか。まぁそうしとけ。C++/CLIはネイティブの知識(C++)とCLRの 知識(C#)が両方要求されるひどい言語だ。最低限どっちかぐらい自由に使える ようになってからおいで。…両方自由に使えるぐらいじゃないと使える言語でも ないかもしれないが。 ファイナライザ?C#にもあるぞ。というかCLR用語だそれ。 まぁDisposeがスタックオブジェクトのように書けることをいいたかったんだろうけど。 川俣とかが取り上げているほど、たいしたものじゃない。あの人は大げさに書く文体 が売りだからな。いい悪いは別にして。
660 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:17:52 ] 通のお勧めは関数のオーバーライド ディスポーズ・パターンの変形に目が眩んでちゃ、まだまだ
661 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:25:46 ] >>660 ポリモにならんじゃん
662 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:32:20 ] >>658 ~hogeか!hogeが使われている場合に下のようなコードを自動生成してくれる。 GC.SuppressFinalize(this)がむき出しにならないだけスマートだね。VB.NETにもほしい機能だと思う。 void Dispose(bool disposing) { if (disposing) ~hoge(); else !hoge() } void Dispose() { Dispose(true); GC::SuppressFinalize(this); }; void Finalize() { Dispose(false); } deleteしたり { ClassA a(); ...; } でスコープから離れた場合は Dispose()が呼び出されるだけでその場でGCされるわけではない。
663 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 00:50:01 ] !hogeなんてあったんだ
664 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 07:21:27 ] >>662 いや、えーと、このスレにいる以上知っている。 ildasmでも確認したしな。ああ、そうか、それをC++/CLI用語でFinalizerというのか。
665 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 12:42:51 ] >661 おまいはC++/CLIにおける関数上書きの奥の深さに気付いていない ここに IEnumerable を継承したインターフェイス IEA と IEB がある その双方を実装した ref クラス RAB は明示的オーバーライドによって列挙の方式を IEA と IEB によって変更できる つまり、RAB から取得したインターフェイスによって、for each のオーダーを自由に 選択できるわけだ
666 名前:デフォルトの名無しさん [2006/02/22(水) 16:05:53 ] MSがC++/CLIを捨てるのは何年後くらいですか?
667 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 16:13:12 ] MFCの如くこの劣悪貧を10年使うかも。 C++ってだけでもSTLやBoostが混ざってくると複雑なのに、正直CLIはカンベンて感じだおね。
668 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 17:22:04 ] >>667 駄菓子菓子、これがないとネイティブとかからCLRが非常に使いにくい。 ほら、次でWPFとかなんかたくさんあるし。
669 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 23:36:01 ] マイクロソフトがもうイラネと思ったら容赦なく捨てにくるさ。
670 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:00:23 ] >>669 そりゃ日本だけ。海外ではVBerが反乱おこして、msも今では Love VB, Love C#だとよ。
671 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:53:32 ] C#は、VC++とVBの中間を行くような言語だから、 どっちからも反発が強いだろうね。
672 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:03:54 ] 反発はしないけど、C++で出来るなら C++ Nativeでやっちゃうよ。 必要なとこだけ CLIで .Netなんてライブラリ感覚で使えばいい。
673 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:20:44 ] /clrでNativeコンパイルすると遅くなる?
674 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 08:50:40 ] >673 >348
675 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 09:37:51 ] >>669 要るだろ。 だって、C++市場をCLIで混乱させることにより、 開発者をWin@ブビ or Win@C丼で留めておける。
676 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 10:00:24 ] >>674 遅くなるのは事実としても、何で遅くなるんだろ? 異なるライブラリがリンクされるからか? lstrcmp自体の実装が異なるのか? それとも呼び出し時にスタックチェックでも入ってるのかね…。
677 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 14:21:46 ] >676 単純なループでは簡単に結論が出ない問題かもしれない ちなみに漏れの環境では CLR 6 - 7 sec. Native 8 sec. となった。意外だがCLRの方が早い Win のほうは -02 -0t を付けた状態で、CLRの方はデフォルトのリリースモジュールだ
678 名前: mailto:sage [2006/02/23(木) 22:30:11 ] >>670 そんな話しきいたことネ
679 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 22:47:11 ] 誰か、C++/CLI で吐いた実行ファイル、 mono で動かした奴いる?? 以前 VS.NET 2003 の C# で書いたコンソールアプリなら mono で動かしたことあるんだけど。
680 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 23:22:55 ] mono がそもそも .net framework 2.0 に対応してたか? してるなら、/clr:pure で動くだろう
681 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 08:17:28 ] nullptr
682 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 11:48:08 ] ガッ^
683 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 17:24:15 ] >>678 blogs.msdn.com/hiroyask/archive/2006/02/13/530769.aspx ケツの穴が広がるぐらい、ハードに読めや。
684 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 21:07:35 ] >>683 良く読んだよ >表の顔の日記 > 裏の顔の日記 > さっさと消えてくんないかな。 うざいんだけど、 まじで。
685 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 04:29:20 ] という電波でも飛んでるのか?
686 名前:648 [2006/02/25(土) 11:39:03 ] また教えてください。 C++での構造体の以下の宣言 typedef struct tagHOGE{ int x; long y[4]; }HOGE; これをマネージ環境にしようとした場合 typedef struct tagHOGE{ int x; long y[4]; ← ここが混合型らしい }HOGE; .\MainForm.cpp(26) : error C4368: 'y' をマネージ 'HOGE' のメンバとして定義できません。混合型はサポートされていません というエラーが出ます。 単に4つのlong型の配列の定義がしたいのですが、マネージ環境では、どのようなやり方があるでしょうか?
687 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 11:43:26 ] typedef struct → typedef value struct では?
688 名前:648 [2006/02/25(土) 12:05:23 ] >>687 そうです。コピペ間違いました。 value struct HOGE{ int x; int y[4]; }; と記述してます。
689 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:17:18 ] ・・・value型使わず、ネイティブ型で定義すれば?
690 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:20:37 ] あとは ref にして array<long>^ y で宣言して、コンストラクタで初期化するか
691 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:23:04 ] value struct HOGE { int x; array<long>^ y; }; はコンパイルが通るが、仕様上これでいいのか?
692 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:38:17 ] ok ハンドルは nullptr で初期化される
693 名前:648 [2006/02/25(土) 12:58:50 ] 皆さん、早速のレス、ありがとうございます。 >>689 ネイティブで定義すればできることは確認してます。 ただそうすると少し複雑なソフトを組んだ場合、きちんとメモリの後処理をしないと メモリリークが発生するので、マネージにすればメモリガベージの効用であまり複雑に 考えなくともよいかな、と思っているのです。 >>691 そのやり方もわかります。 各関数で、 void func1(void) { HOGE wk1; wk2.y[2] = 123; } void func2(void) { HOGE wk2; wk2.y[2] = 456; } というようなことをしたいのです。 2〜3日あがいてみて自分ではできなそうだったら、ネイティブで定義してやっていきます。 マネージ環境に慣れていけば、そのうち、何か気づきがあると信じて進むしかありません。
694 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:05:44 ] 2〜3日あがくなら2〜3日かけてマニュアル読んだほうがいいような気がする
695 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:45:46 ] >>693 値型にGCを求める必要がある?
696 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 14:23:50 ] C++/CLIのスレ見てると無意味にvalueを使いたがる人が多い気がするな。 valueは動作に癖があるから基本refで作ったほうがいいと思う。
697 名前:デフォルトの名無しさん [2006/02/25(土) 16:22:08 ] value使ったほうが処理速度が速いとでも思い込んでいるんじゃ? クセがあるには同意。
698 名前:648 [2006/02/25(土) 17:38:04 ] いろいろとサイトをまわりまして、以下のようにしたところ動いているように見えます。 public ref struct HOGE { int x; array<long>^ y; HOGE() { y = gcnew array<long>(4); } }; void func(void) { HOGE^ abc = gcnew HOGE; abc->x = 10; abc->y[2] = 20; for(int i=0; i<4; i++){ Debug::WriteLine(abc->y[i]); } } 検討違いのコードでなければよいですが。 みなさん、いろいろとレスありがとう。
699 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 20:55:45 ] >>698 これでも平気。 void func() { HOGE abc; abc.x = 10; abc.y[2] = 20; for (int i = 0; i < 4; i++) { Debug::WriteLine(abc->y[i]); } }
700 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 22:33:45 ] C++は真のローカル変数を使える言語なんだから、(ユーザー定義オブジェクト がスタック上に配置できる)GCが必要な場合ってのはそんなに多くはならない ってビョーン先生が言ってた。