- 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
- 752 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 13:40:31 ]
- ファイナライザ中でthisに属するオブジェクトも生存は保証されていないしね
本当に最後の手段なんだから、基本的にはGC任せにしない方がいいよ
- 753 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 13:43:49 ]
- 値型メンバは確実に生存してるぜ? その値型が持つ参照型はともかく
- 754 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 13:48:15 ]
- >>751-752
ありがとうございます。 明示的にDisposeてことになると思うんですが、 そうなるとDisposeしなければならないインスタンスを持つクラスがデータ構造の奥深くにあると どんどんDispose呼び出しが感染していって親クラスのとこまで行ってしまいますよね。 面倒くさいなぁと思いつつも、仕方が無いなぁとも感じてるんですが やっぱりそんなもんですかね…
- 755 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 23:19:17 ]
- アンマネージリソースを取り扱う以上、これは仕方ねっス。
頭切り替えるしかねっス。 ちなみにアンマネージリソース絡みでSafeHandleてのもあるんスが、 これの経緯とか調べるとさらに頭痛のタネが増えるのでオススメっす。
- 756 名前:デフォルトの名無しさん [2008/01/19(土) 09:08:52 ]
- C++/CLIのメソッド引数に%をつけることについて質問があります。
マネージ型の配列や構造体をメソッドに渡すとき、”^”をつけますが、 この渡し方で配列や構造体の”ポインタ”が渡されると思っていました。 ”^”の引数があるメソッドを持ったクラスライブラリをVBで参照したら “ByVal”となっていました。 ここで質問ですが、”^”でなく”^%”としなければ配列や構造体が 値渡し(配列全体がCopy?)になるのでしょうか?%をつける、 という概念がC++/CLIで現れたため悩んでいます。 できるならば 配列や構造体は値渡しでなく、アドレス渡し、配列渡しをしたいのですが・・・
- 757 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:13:22 ]
- ^は参照型 そのまま渡すと参照をコピー
%はC++の&、C#のref/outに当たる参照渡し 「参照型 参照渡し」で調べればいいよ
- 758 名前:デフォルトの名無しさん [2008/01/19(土) 09:54:02 ]
- >>757
ありがとうございます。調べてみました。参照型の^引数はアドレスをコピー、参照型の^%渡しはアドレスを参照渡しする、ということですね。 ということは参照型の場合、どちらの方法で渡してもパフォーマンスに大きな影響はないということでしょうか。 参照型と参照渡しの違いを理解しないといけないのですね。
- 759 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:52:27 ]
- .NETで参照渡しはあんまり使わないよ
参照で渡すことが多いんだったら初めから参照型にする
- 760 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:59:01 ]
- TryParseとかあるじゃん
- 761 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:33:21 ]
- スレ立ったのが2006年とかC++/CLIは使われてないの?
今からやるならC#のがいいかね?
- 762 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:06:34 ]
- アンマネージC++もC#も使えるようになった上で、
もしも必要に迫られたときにやっと登場する言語だからね
- 763 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:54:30 ]
- 俺は間違っても#なんか使わん。意地でCLI
- 764 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:55:23 ]
- シーナンバー
- 765 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 16:42:52 ]
- >>761
そりゃ今からやるならC#だな それよりVB.NETがいいに決まってるけどw 少なくともC++/CLIなんて論外だ まあ.NETやること自体が間違いかもしれないが・・・
- 766 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:51:49 ]
- なぜVBを推すのか
- 767 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 23:32:44 ]
- ref じゃないクラスで managed なクラスのイベント捕まえようとしてるのだけど
やり方がわからないので教えてください。 ref class hoge { event EventHandler ^ev; }; class hoge_wrapper { hoge ^_hoge; void OnHogeEv(System::Object ^o, System::EventArgs ^); hoge_wrapper(hoge ^_hoge) { this->_hoge = _hoge; _hoge->ev += gcnew System::EventHandler (this, &hoge_wrapper::OnHogeEv); } }; こんなコードを書いているのだけど EventHandler のコンストラクターでC3364のコンパイルエラーがでて怒られます。
- 768 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 23:52:38 ]
- >767
そりゃ、混合型は駄目だろ ネイティブはネイティブ、マネージドはマネージドで扱わないと
- 769 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:25:09 ]
- あ、hoge_wrapper::_hoge の型は
gcroot<hoge ^> _hoge; って宣言してました。転記ミスです。
- 770 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:59:04 ]
- いや、そこもそうだけど、gcnew しているイベント・ハンドラにネイティブの
ポインタ this を渡してるだろ? マネージドでイベントアダプタみたいな物を作ったら?
- 771 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:13:10 ]
- MAKE_DELIGATE っていうのを見つけて、試してみたら意図したとおりに動くみたいです。
中身を見てみたら 770 さんの言うとおりの動きなのかな? とりあえず解決しましたー。ありがとです。
|

|