[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/28 10:59 / Filesize : 176 KB / Number-of Response : 772
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++/CLI について語ろうぜ Part2



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 さんの言うとおりの動きなのかな?

とりあえず解決しましたー。ありがとです。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<176KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef