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
552 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 13:27:43 ] GCは構文のシンメトリーが崩れるから糞
553 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 13:31:57 ] 明示的にdeleteすればおk
554 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:08:41 ] >>552 爆破すれ
555 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 02:30:34 ] >>554 ECMAに通報しました(・∀・)
556 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 07:26:39 ] コナンか
557 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 07:45:17 ] C++/CLIより懐の広い言語って 存在するの?
558 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:43:31 ] D言語
559 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 11:16:37 ] >>558 多重継承ができないじゃん。
560 名前:デフォルトの名無しさん [2007/10/09(火) 13:57:19 ] 多重継承いらないし。
561 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 14:08:14 ] >>560 もっと広い心を持てよ。
562 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 07:33:54 ] Mixinは素晴らしい世界
563 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 10:38:20 ] しかし、未だにデザイン以降の仕様の影すらみえない罠
564 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 16:33:13 ] VC2005さんに /clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall' が無効です 言われた。 仲直りするにはどうしたらいいですか? stdcallは譲れない
565 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 17:01:07 ] pure safeを諦める
566 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 17:36:17 ] >pure safe これって、価値ある?
567 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 19:05:03 ] C#やVB.NET並みには
568 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 02:43:15 ] /clr に変更したら、 d3d9.lib系エラーが出まくったった 1>d3dx9.lib(cfont.obj) : error LNK2019: 未解決の外部シンボル __imp__GetGlyphOutlineA@28 が関数 "private: int __thiscall D3DXCore::CFont::ValidGlyph(unsigned int)" (?ValidGlyph@CFont@D3DXCore@@AAEHI@Z) で参照されました。 1>d3dx9.lib(cfont.obj) : error LNK2019: 未解決の外部シンボル __imp__DeleteDC@4 が関数 "public: __thiscall D3DXCore::CFont::~CFont(void)" (??1CFont@D3DXCore@@QAE@XZ) で参照されました。 ... /clr:pure で STDMETHOD は、使えないんですか?
569 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 10:09:14 ] pure は .net Framework 専用だろ /clr をつけたら、必要なライブラリは明示的に追加しろや それか MDX か XNA でも使うんだな
570 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 18:22:36 ] >>568 手順4だけでいいからやれ。 www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
571 名前:デフォルトの名無しさん [2007/10/11(木) 22:06:35 ] 生成元のクラスから生成したクラスに、自クラスのメソッドを渡し、 生成したクラスから生成元のクラスへコールバックしたいと思ってます。 AsyncDeligateを使えばいいのかと思うんですが、 この関数って実は、自クラス内のメソッドのコールバックにしか使えないの でしょうか? ref class MyClass{ void Method{ AsyncDeligate^ asyncDeligate = gcnew(this, &MyClass::Func); } void Func(IAsyncResult ar) { } }; と自クラスでAsyncDeligateは使えそうだけど、生成したクラス→生成元 クラスへのコールバックを実現するために、生成元のクラスで、どのように 関数を渡したらいいのか(AsyncDeligateをどのように使うのか?)が 不明です。 そもそもAsyncDeligateでこれを実現することはできるのでしょうか?
572 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 22:23:12 ] 自クラスのインスタンス生成時に親クラスの参照渡しとけばいいんじゃないの?
573 名前:571 [2007/10/11(木) 22:31:31 ] 自クラス→生成するインスタンス 親クラス→生成元インスタンスってことですか? 生成するクラスをDestClassとすると DestClass destClass(this); みたいなことでしょうか?
574 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 00:34:52 ] >>571 普通にイベントで実装したらまずい?非同期操作はどの辺でからむのだろ。
575 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 01:29:41 ] C++/クリ
576 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 08:49:21 ] AsyncDelegate って AsyncResult のプロパティだろ? AsyncResult にサンプルあるじゃん
577 名前:デフォルトの名無しさん [2007/10/14(日) 00:49:28 ] 黒川紀章氏のような一生に憧れるな。 ご冥福をお祈りいたします。
578 名前:デフォルトの名無しさん [2007/10/14(日) 01:19:16 ] C++は別にJavaのような言語になる必要性を感じない。
579 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 01:34:07 ] C++とjavaとC#の速度の違いを解説してるようなHPとか書籍あったら教えてください
580 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:42:15 ] 今勉強しるのですが、これ無くならないですよね?
581 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:47:54 ] そんな心配がいるほど勉強に時間かかるようなもんかね?
582 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 18:29:49 ] >>581 ドトネトのことを全く知らないと混乱するかも。 あと、古い情報(Managed C++)を見てしまって 混乱していた人がここに約一名。
583 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:24:04 ] ManagedDirectX2.0は消えた
584 名前:デフォルトの名無しさん [2007/10/28(日) 22:39:07 ] MSのC++/CLIがC++委員会に却下されたが、そうすると 次世代WindowsからC#しかサポートしない、Windows プログラミングやりたかったらVB.netやC#使え! と嫌がらせしてくるんじゃないかと不安。 VBやC#が嫌いだから困る。 今はMFC使っているが、今後もMFCは サポートされるのだろうか? MFCが駄目ならC++/CLIを使うが、それも サポートされないとなると。。。
585 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:54:19 ] 現状は 0x の仕様策定待ちでしょ。だから、ライブラリ拡張しかしてないだけで MFC のサポートが切れたら、WTLでも使えばいい RADなくても大丈夫でしょ
586 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 07:37:41 ] 委員会氏ね
587 名前:デフォルトの名無しさん [2007/10/29(月) 11:13:27 ] >>585 こういう事いうからC++基地外は。。。 RADはあった方がいい。
588 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 11:35:54 ] RADは必須だが、MFCのビルダーはカンベン。
589 名前:デフォルトの名無しさん [2007/10/29(月) 14:17:53 ] MFCのビルダーって何?
590 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 17:04:22 ] RAD で具体的には何を指してるの? C++/CLI のデザイナのこと?
591 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 17:12:20 ] ま、一般的にはソースと連携するGUIエディタ。 コードジェネレータ以降のもの。
592 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 17:24:18 ] じゃ,コードオナペット機能とかも?
593 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 21:20:00 ] MFCのどこがRODなんだよ
594 名前:デフォルトの名無しさん [2007/10/29(月) 22:51:30 ] RODって何だよ
595 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:15:21 ] ヤンキースの選手だよ
596 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:10:20 ] THE PAPER
597 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 09:03:02 ] いや、だからVisual C++/MFCはRADを目指してるように見せかけてた。 しかし、C++のRADができあがると開発者がオプソに流れちゃう。
598 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:47:58 ] >>597 それが C++/CLI + フォームデザイナではないのか? あくまでネイティブにこだわる?
599 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:56:11 ] >あくまでネイティブにこだわる? これは詭弁。 実体は、M$が非ネイティブにこだわる。 gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、 ターゲットマシンが別0$になっちゃう。
600 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:02:02 ] C# で mono とか tcl/tk とか何かならわかるが、 pure C++ で Win32 アプリがRADで開発できても、 >gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、 >ターゲットマシンが別0$になっちゃう。 ってことにはならないと思うが。
601 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:17:25 ] >ってことにはならないと思うが。 ってことにはならない、じゃなくて、M$が阻止する。 売る側からしたら端末みたく膨大な数を売るものだったら1台あたりに0$代払いたくない。 開発マシンとターゲットマシンと別々なのはふつー。 Winの前の時代なら、UNIXで開発&Makeして汎用機(メインフレム)に転送していた。
602 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:18:57 ] >UNIXで開発&Makeして汎用機に転送していた。 あ、やっぱ、コンパイルは汎用機でやってたね。
603 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:21:44 ] >>601 そういう意味じゃなくてさ、MS の作る Win32 アプリの RAD の出してきたコードを gccでコンパイルしても、実行できる環境が Linux にある? Wine がそんなに実用的になってる?
604 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:48:30 ] >>603 Windowsヘッダーがgcc環境に移植されてM$が慌てたのを知らないの? RADなら製品としては成立しなくて終了したっぽいけど、Delphi / Kylix、 C++ Builder / C++ Builder Linux があるお。
605 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:53:54 ] >>603 あ、C++ BuilderにwxWidgetsのプラグインがあってポトペタできる。 wxWidgetsだからLinuxとMacは対応できる。
606 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:57:58 ] >>605 MS がクロスプラットフォームな UI フレームワークを採用した RAD を 出すわけないと思うけど。pure C++ になったとしても、Win32 べったりでそ。 次はそれに文句言うの? それとも Wine があるから >gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、 >ターゲットマシンが別0$になっちゃう。 だ、って主張? >>604 漏れも cygwin は使ってるけど、そういうおまいは使ってるのか? きつい言葉だが、現実見えてる?
607 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:00:06 ] じゃ、wxWidgetsだ! MFCアプリケーションをLinuxに移植する ttp://www.ibm.com/developerworks/jp/linux/library/l-mfc/
608 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:55:39 ] おおい、C++/CLI スレなんだかから、 RAD にかんしては mono で Windows.Form が使えるかどうかってのがメインの話題にならんの? そういう俺は Hello world しか試したことがないよ。 mono では。
609 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:01:01 ] mono=Hello worldツール
610 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:06:45 ] RHD = Rapid "Hello world" Development
611 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:07:06 ] RAD = RApid "Hello world" Development
612 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:12:21 ] CLI = Common "Hello World" Language Infrastructure
613 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:13:08 ] HAL = HALlo world is typo.
614 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:25:47 ] V$ドトネトは、ドトネト Framework の機能を最大限に利用することによって、Hello worldの生産性を劇的に向上させます。
615 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:08:48 ] 質問です。 int sample(int (* func)(void*), void* arg); というCの関数を呼び出したいのですが、argにマネージオブジェクトを引き渡す手段に悩んでいます。 struct Arg { gcroot<array<int>^> obj; }; と int on_callback(void* arg) { Arg* parg = (Arg*)arg; Console::WriteLine(part->obj->Length); } を用意して Arg arg; arg.obj = gcnew array<int>(4); sample(on_callback, &arg); みたいな方法を考え付いて一見問題なく動いているように見えますが、何か問題があったりもっと一般的な方法があったりするんでしょうか。 ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう?
616 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:54:58 ] >>615 その方法でいいと思うよ。 >ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう? その為の混合モードだから。関数はマネージドとネイティブの両方のエントリーを持っている。 #pragma unmanagedを使うのは DllMainとlongjmpのときくらいじゃなったかな。
617 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:20:31 ] >>616 ありがとうございます。 これで実装を進めることにします。
618 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:42:07 ] IntPtrで与えられたポインタをマネージ型のByte配列に変換したいのですが、できるのでしょうか? アンマネージへの変換はMSDNの参照などによりわかったのですが、 マネージへはまだわかっておりません。 アンマネージに変換して使用して配列を扱ってもいいのですが、なるべくマネージ型でまとめたいと思いまして・・・ そもそも無理だとしたらIntPtrのReadByteを使うしかありませんか? どなたかご教授ください。
619 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:49:26 ] >>618 なにがやりたいのかさっぱり和漢ねえ
620 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 07:42:28 ] それへ知ってハッキングでもする気か?
621 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 08:04:03 ] ポインタにするにはちょっとGCさえごまかせば済む話だが、 配列はオブジェクトなので新しく作る必要がある。 C++/CLI使っててポインタを使わない意味はないだろ。
622 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:11:18 ] 何やりたいかわからんが、Marshal::Copy とかか?
623 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:13:53 ]  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」 ―――――――――――――‐┬┘ | ____.____ | | | | | | | ∧_∧ | | | |( ´∀`)つ ミ | | |/ ⊃ ノ | |  ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ C++/CLI
624 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 16:38:39 ] 懐かしすぎるぞそのAAw
625 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 19:27:06 ] 配列が三つもあるとかあほすぎ
626 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:46:23 ] 618への回答にinterior_ptrっていいだろうかw? マネージ型には違いないぞ。
627 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 09:56:33 ] たぶん、IntPtr に格納されたアドレス値をバイト配列に変換したい訳じゃないとは思うんだが(w
628 名前:デフォルトの名無しさん [2007/11/01(木) 09:58:54 ] c++/cliを使うメリットってなんすか? C++に中間吐かせるなんて、ビャーネが知ったら泣くぞ
629 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:05:13 ] C++ を越えた変態になれる
630 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:09:50 ] ま、C++と文法的に相性が悪かったCOMの悪夢の続きを見れるとか。
631 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:28:51 ] .netライブラリを使える
632 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:43:22 ] ドトネトライブラリはイラネ 既存のC/C++ライブラリを使いたいわけ。
633 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:46:59 ] >>632 そういう人がなぜこのスレッドにいるのかわからん。
634 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:53:20 ] 何ていうか、分からないから見てみる、みたいな。 .NET「本音」相談室 ttp://www.atmarkit.co.jp/fwin2k/dnitpro/honneqa01/honneqa01_01.html
635 名前:デフォルトの名無しさん [2007/11/01(木) 19:00:04 ] VB.netからとりあえず早さを求めてC++/CLIやり始めたんですが、 //Form1.h #pragma unmanaged class hogehoge{}; #pragma managed Form1を作ったときに自動生成されたやつ private: System::Void start(System::Object^ sender, System::EventArgs^ e) { hogehoge test; } とやると動くのは分かったんですが、デザイナに クラス Form1 はデザインできますが、ファイルの最初のクラスではありません。Visual Studio では、デザイナはファイルの最初のクラスを使用する必要があります。クラスがファイルの最初のクラスになるようにクラス コードを移動して、デザイナを再度読み込んでください。 と怒られてしまいます。 いい方法を教えてくださいmm
636 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:04:11 ] >>635 IDEが作成したファイルに手を加えるのはあまりよくない。 別のファイルに書こう。
637 名前:デフォルトの名無しさん [2007/11/01(木) 19:11:14 ] >>635 ええ、絶対間違ってると思ってtest.cppってファイルを作って同じのを書いたのですが、 hogehoge という型指定子が見つかりませんと言われてしまうんです。
638 名前:635 [2007/11/01(木) 19:24:35 ] //test.cpp class hogehoge{}; //Form1.h >>635 の#pragma managedより下 って書いてみたんですけど、ヘッダーがコンパイルされたときには test.cppはまだコンパイルされてないからこういう事になってるんですかね・・・?
639 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:28:28 ] >>637 先にCをやってきな
640 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:38:55 ] >>639 C++もだろ。
641 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:39:25 ] だな。
642 名前:635 [2007/11/01(木) 19:41:44 ] www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html とりあえずここに書いてることは大体理解出来るんですが、 足がかりになるようなページ教えていただけませんか?
643 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 20:05:07 ] ヘッダと cpp の関係がわかってないのかな? Form.h が メインの cpp に include されてコンパイルされる前に、hogehoge なるクラスが 定義されていないといけないんだよ だから、hogehoge をヘッダに定義して、Form1.h で include すればいいんだけど この説明の意味、わかる? 次はたぶん、混合型はサポートされていません。て、エラーになると予言(w
644 名前:635 [2007/11/01(木) 20:28:37 ] >>643 ヘッダーを作らないといけないのを全く理解してませんでした。 IDEでクラスを作って見よう見まねでいじったらうまく行きました^^ 丁寧にありがとうございましたmm
645 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 10:16:10 ] まぁ、別に cpp を include してもいいんだけどな
646 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 12:23:45 ] いやいや、リンクしたときに定義が衝突するでしょ
647 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:58:28 ] それよりおれは>>635 の1行目が気になる
648 名前:デフォルトの名無しさん [2007/11/03(土) 09:36:00 ] それよりおれは>>647 の1行目が気になる
649 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:27:44 ] C++/CLIって、仕事あるか?
650 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 14:08:18 ] >>647 実は俺も気になってた。
651 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:50:50 ] >>649 3ds/maxの会社
652 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:38:42 ] CLI穴だらけじゃん(`Д')ノ じゃあみんなで補完しあおうぜ(=゚ω゚)ノ 議論盛り上がりまくり(゚д゚)ウマー ドトネト対応(・∀・)イイ! ってのが製作者の狙いということか( ゚Д゚)ハッ いや…なん違うような(;´Д`)
653 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:55:56 ] なすてnullptrなんて作たんだろ、nullで統一してよ
654 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:15:35 ] ぬるぽ
655 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:37:10 ] >>653 > なすてnullptrなんて作たんだろ、nullで統一してよ '\0' と混同する人がいないとも限らないからかな…
656 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:52:35 ] #define null 0としているプログラムは探せば結構ありそうに思う。 そんなコードでも変更なしに使えるようにという配慮では?
657 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 18:41:43 ] え C++/CLIはヘッダーに全部実装するのが流儀だろ cppファイルなんていらんのですよ
658 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:35:57 ] 実体化しないのかよ まさか、プリコンパイルヘッダに全部うわなんだおまえやめr
659 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:19:51 ] >>649 このあいだ、基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって仕事があって 何を使っても良かったし、ずっと自分が面倒みる事になる事は分ってたから C++/CLI のラッパーで対応したが。 レアケースなのは間違いないな。
660 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:29:36 ] >基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって これ、何ていうドトネトアプリの破滅。
661 名前:デフォルトの名無しさん [2007/11/11(日) 16:39:40 ] >>え C++/CLIはヘッダーに全部実装するのが流儀だろ あ、やはりそうなのか?
662 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:10:26 ] こより的には、そのやり方はちょっと…
663 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 19:56:20 ] C#でいう「インターフェイス メンバの明示的実装」をやるにはどうすればいいの?
664 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 20:35:39 ] 自己解決 private: virtual Object^ Clone() = ICloneable::Clone { ... }
665 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:43:18 ] CLI 部分については C++/CLI って C# よりむしろ VB に近いと思う瞬間の一つだな raise とか
666 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:15:02 ] >>662 マイナー杉
667 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:38:24 ] >raise とか これ、何てDelphi?
668 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 22:11:41 ] 2008入れてみた。 STL/CLI使えるぽ。
669 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 00:02:11 ] .net fx 2.0 指定でも使える?
670 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:45:51 ] この言語って、どの程度流行ってんの?
671 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:49:10 ] 各国で静かなブームですよ
672 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:01:19 ] TreeViewとListViewにxVN_GETDISPINFO相当の機能がなかったので、 Controlから派生させて自作したよ('A`) (VirtualModeもパフォーマンスがよくなかった・・・) C#だとAPIや定数の定義が面倒だが、C++/CLIだとWin32ヘッダそのままインクルードして使えるから楽でいい。 だがそんなことするくらいなら最初っから つMFC ・・・そんな感じだ。
673 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:21:38 ] メッセージぐらいならわざわざControl使わんでもどうとでもなるが。 Notify系メッセージならWM_REFLECTION付きで当該コントロールに来るし。
674 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:22:08 ] いやWTL最強
675 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 21:35:28 ] >>673 メッセージぐらいではどうにもならんのですよ。 WM_NOTIFY + WM_REFLECTでメッセージ引っ掛けても、先が続かん
676 名前:デフォルトの名無しさん [2007/11/27(火) 18:43:18 ] Windowsプログラムを組む必要がない場合 CLIを勉強する意味ある?
677 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:44:30 ] Windows以外で動く独自のCLIを開発する場合とか。
678 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:48:44 ] ( ゚д゚ )( ゚д゚ )( ゚д゚ )…
679 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 12:51:24 ] 独自にCLRを実装するなら、CLI の勉強は必要だな C++/CLI は不要だが
680 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 00:41:11 ] Object型の変数の値が、値型Tのボクシングされたオブジェクトであるかどうかを 調べるにはどうすればいいんでしょうか C#では obj is T とするところです
681 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 00:58:20 ] 参照型同様dynamic_cast<T^>(obj)がnullptrになるか否かで判定すればいい。
682 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 08:42:54 ] safe_cast ?
683 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 14:51:10 ] castに失敗した時に、例外が発生したほうがいいならsafe_cast。 nullptrを返してほしいなら、dynamic_cast。 if分の条件でスマートに使いたいなら、T::typeid->IsSubclassOf(obj)もしくはIsInstanceOfType()の組み合わせで。
684 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:30:52 ] public ref class A : public Generic::IEnumerable<Object^> { public: virtual Generic::IEnumerator<Object^>^ GetEnumerator(); }; コンパイルエラーになるのだが、こういう実装はだめなの?
685 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:47:51 ] エラーメッセージぐらい書(ry System::Collections::IEnumerable::GetEnumeratorの方の宣言がない
686 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:57:42 ] >>685 public ref class A : Generic::IEnumerable<Object^> { public: virtual Generic::IEnumerator<Object^>^ GetEnumerator(); virtual Collections::IEnumerator^ GetEnumerator(); }; してみたけど、だめでした。 error C2556: 'System::Collections::IEnumerator ^A::GetEnumerator(void)' : overloaded function differs only by return type from 'System::Collections::Generic::IEnumerator<T> ^A::GetEnumerator(void)' with [ T=System::Object ^ ]
687 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:29:04 ] そりゃ返値が違うだけの同名同引数メソッドを宣言できるわけないだろ? 別名定義する必要がある。リファレンスのinterface classの解説見れ
688 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:51:04 ] >>687 以下でコンパイル通りました。 public ref class A : Generic::IEnumerable<Object^> { public: virtual Generic::IEnumerator<Object^>^ GetEnumerator() = Generic::IEnumerable<Object^>::GetEnumerator; virtual Collections::IEnumerator^ GetEnumerator2() = Collections::IEnumerable::GetEnumerator; }; ありがとうございました。
689 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:15:44 ] GetEnumerator2のほうはprivateにしたほうが
690 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:34:04 ] >>689 早速private: + sealedにしました。 重ね重ねありがとう
691 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:56:00 ] マネージクラスも共変できたらいいのにと思う。
692 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:58:42 ] 共変ができないのはなんでだろう CLI 上の制約?
693 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:20:10 ] >>691 Genericsは共変/反変をサポートしてるけど 標準クラスライブラリと有名どころの言語がサポートしていないので事実上死に設定
694 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:33:11 ] たしかデリゲートもIL上は共変・反変できたような。
695 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 21:08:19 ] C#はデリゲートなら共変反変おk
696 名前:デフォルトの名無しさん [2007/12/08(土) 17:56:12 ] (C/C++スレから誘導されて来ました) VS2005にてC++/CLI使用中です。 Hoge()というアンマネージドクラスが既にあり、これをマネージ環境で使うことを考えています。 このとき、 Hoge *hoge0 = new Hoge(); Hoge *hoge1 = new Hoge(); Hoge *hoge2 = new Hoge(); ・・・ というのを Hoge *hoge[10]; hoge[0] = new Hoge(); hoge[1] = new Hoge(); hoge[2] = new Hoge(); ・・・ のよう配列にするにはどうしたらよいでしょう? (マネージ環境だと Hoge *hoge[10]; の時点でCLI配列使え!って怒られてしまうんですよね・・・)
697 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:16:54 ] 普通にできるはずだが? エラーメッセージとか番号とかちゃんと書けよ
698 名前:デフォルトの名無しさん [2007/12/08(土) 18:21:12 ] C++/CLIでSTLって使えないんですかね。。。 アンマネージ内で使いたいんですが、#include<list>とか<vector>とかすると error C2039: 'free' : '`global namespace'' のメンバではありません。 e:\program files\microsoft visual studio 8\vc\include\cstdlib error C3861: 'free': 識別子が見つかりませんでした e:\program files\microsoft visual studio 8\vc\include\malloc.h とエラーが出ます。。。
699 名前:696 [2007/12/08(土) 18:25:37 ] >>697 アンマネージクラスだと普通にできますが、マネージ環境だと Hoge *hoge[10]; のところで 「error C4368: hoge' をマネージ 'test01:managedClass01' のメンバとして定義できません。混合型はサポートされていません」 といったエラーになります。 このエラーでググると「マネージ環境なんだからarray<>使うべし」といった見つかるのですが、 例文はintの配列とかそんなんばっかりで、今回のような場合はどうすりゃいいのか・・・といった感じです。 よろしくお願いいたします。
700 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:38:07 ] >>699 ttp://msdn2.microsoft.com/ja-jp/library/xhfb39es(VS.80).aspx Hoge *hoge[10]をメンバにしようとしてるんだろ。
701 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:41:38 ] >>698 普通に使えるが? ファイルぶっ壊れてるんじゃね?
702 名前:デフォルトの名無しさん [2007/12/08(土) 21:20:59 ] >>701 まじですか。。。 再インストールしてみます、ありがとですω
703 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 00:51:43 ] >>>701 再インストールしたところ思いっきり動きました。 5時間悩んでたのが馬鹿らしい。。。 ありがとでした。
704 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 09:02:32 ] >>699 やりたいことと少し違うかも知れんが、 new N[10]で10個のオブジェクトの生成は済んでるから注意な。 class N { }; // native class ref class M { // managed class N *n; public: M() { n = new N[10]; } ~M() { delete [] n; } !M() { delete [] n; } };
705 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 11:06:54 ] array<IntPtr>^ _ptrs = gcnew array<IntPtr>(10); _ptrs[0] = IntPtr( new Hoge() ); ・・・ でよくね?
706 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 19:48:19 ] Conditional属性は使えないの? 諦めてマクロにするしかない?
707 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 09:08:28 ] >>1 は?お前バカか? .NET開発のデファクトスタンダードはC#だろ。常識的に考えて いまさら時代遅れのC++なんて勉強する気しねーよ。 俺はJavaから始めたからよ。 で、ホントはC#よりC++/CLIのほうが未来ありそうなん?
708 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 11:09:09 ] >>707 C++ と C++/CLI の区別が出来ない人は 他の人を馬鹿呼ばわりする資格はありません
709 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 11:30:45 ] >>1 の一行目は皮肉みたいなもんだろ www.microsoft.com/japan/msdn/vs05/visualc/VS05Cplus.aspx たぶんこういうのが元ネタだけどタイトルの割に内容は微妙にネガティブw
710 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:20:05 ] C++/CLIはC++にどっぷり漬かった俺にはなんか納得できないものがある。
711 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:52:34 ] 全然チェックしてないけど.NET3.5で言語に手は加わってんの? マーシャリングライブラリが付くって話は聞いたことがあるけど あとSTLと この辺は言語そのものじゃないしな
712 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:18:30 ] >>710 C++ がすでに何でもありなところを、さらに C++/CLI でなんでもありになってるので好感もてない?ポインタがふたとおりあるとか。
713 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:27:01 ] ポインタじゃないよトラッキングハンドルだよ
714 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 02:35:25 ] C++ のネイティブ・クラスをマネージドに委託できると嬉しいんだよな 普通にクラス作って gcnew したらマネージドになってくれるような機能
715 名前:デフォルトの名無しさん [2007/12/16(日) 10:15:37 ] BCCで使えるの?
716 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 10:37:32 ] gcc-cil はどうなったん?
717 名前:デフォルトの名無しさん [2007/12/18(火) 01:30:20 ] なあ、Windowsアプリ作るならC#のほうが楽じゃね? C++にマネージコードが混ざるとうっとおしい。
718 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 08:43:23 ] つ C++ Builder
719 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:58:38 ] おまえらがC#に移行しない理由は何?
720 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:10:26 ] いつまで待ってもドトネトが必要とされない。
721 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:40:58 ] Managed DirectX が消滅した
722 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:44:58 ] というか C++/CLI と C# は使う場所がちがうだろ、常識的に考えて ...
723 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:46:48 ] ( <●><●>) C丼だけで全部を作れないということは分かってます (U )つ u u
724 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:54:40 ] C#でC++よりも効率のいいデバイスドライバーって作れるの?
725 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:18:28 ] ここC++/CLIスレなんだけど
726 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:24:39 ] C#は.NETを必要とする代わりに便利な環境を提供するものだけど C++/CLIはどうしても.NETが必要な人のためのものだからな
727 名前:デフォルトの名無しさん [2007/12/19(水) 01:40:55 ] .NETが必要なこと自体に遭遇したことがない
728 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:06:30 ] リッチなGUIを簡単に作れるのは魅力的なんだが
729 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:23:58 ] .NETは美しいんだよ。 APIのドキュメントと長時間睨めっこしなくて済む
730 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:39:59 ] それなんてDelphi/VCL?
731 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 14:20:22 ] 某は見苦しさを極めてるからなw
732 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 21:21:14 ] >>724 そもそもC#で作ったデバイスドライバなんてあるの?
733 名前:デフォルトの名無しさん [2007/12/26(水) 00:46:25 ] マネージド、アンマネージドのクラスや配列の解放について質問があります。 なるべく使い終わったクラスを即時メモリ解放したくて、 delete しているのですが、タスクマネージャで確認しても、解放しているようには見えません。 マネージもアンマネージも、deleteしたタイミングでメモリ解放されるのでしょうか? それとも、マネージはGCに頼るしかなく、アンマネージはdeleteのあるタイミングでメモリ解放されるのでしょうか?
734 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:50:47 ] アンマネージドでも確保したメモリをプールして使いまわしてるだけだから、 deleteしたからといって、即座にメモリがOSに返還されるわけではないよ。
735 名前:デフォルトの名無しさん [2007/12/26(水) 09:49:21 ] 既定の new や malloc から先はどうやってるのか 追いかけたことないけど,「必要なら持っていっても いいよ」っていうマークでもつけておいて必要に応じて OS が回収できるようにしているのかな?
736 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 11:36:14 ] newやmallocはHeap系APIに丸投げでねーの?
737 名前:デフォルトの名無しさん [2007/12/26(水) 12:43:27 ] >>736 ん?システムコールに丸投げ? もっと,こう,自前でヒープを管理していると思うんだけど.
738 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 12:50:54 ] >>737 ちょいと階層は深いけど最終的にはそうなってるようだね>VC2005で確認。 そうなると500KB以上は個別にVirtualAlloc/VirtualFreeで、 小さいのは一元管理で縮小せずに再利用だろう。 もしかしてLINKオプションの/HEAPオプションは使われてないかも?
739 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 18:04:01 ] >>737 Win32APIはシステムコールではないよ。 Windowsのシステムコールは非公開でげすよ。
740 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 18:06:00 ] ttp://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%AB システムコールとは、オペレーティングシステム (OS) (より明確に言えばOSのカーネル)の機能を呼び出すために使用される機構のこと。 実際のプログラミングにおいては、OSの機能は関数 (API) 呼び出しによって実現されるので、 OSの備える関数 (API) のことを指すこともある
741 名前:デフォルトの名無しさん [2007/12/26(水) 21:10:12 ] >>739 Windows においてはシステムコールはサブシステムの裏に隠れて いて直接呼び出すことはできないってこと? Win32 API って POSIX レイヤと同じレイヤ?
742 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:37:07 ] 基本的に同じ。ただ、GDI関係は性能の都合でWin32 APIはカーネルのほうまで突っ込んでいたはず。 これをシステムコールというのかはわからないけど、 そういうサブシステムの下に位置するネイティブAPIと呼ばれるがNTDLL.DLLから公開されている。 9xの場合はVxDをDeviceIOControlで呼び出すことがシステムコールに相当するといっていいと思う。
743 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:22:48 ] ファイナライザって要らない子?
744 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:31:21 ] Disposeし忘れたときに必要
745 名前:デフォルトの名無しさん [2007/12/31(月) 00:50:26 ] C++/CLIくだすれって消えてる?あるならそちらに誘導してもらえれば嬉しいです(’・ω・) おとなしくC#いけって話かなぁ。。。 ttp://homepage3.nifty.com/ishidate/vcpp05_6/vcpp05_6.htm ここを参考にしながらForm1_Paintが呼ばれたときに DrawlineとかDrawRectangleで描画するプログラム書いてるんですが、 その処理がとても重いので(他の理由もあるのですが)ボタンを押されたときだけ画面を更新するようにしたいんですが、どうしたら良いでしょうか。 (Form1_Paintだとウィンドウの移動などでも更新されてしまうので、それを避けたいということです。) button1ってボタン作って、button1_Clickに全部書きゃ良いじゃんとか思ったんですが、 引数が(System::Object^ sender, System::EventArgs^ e)なのでe->Graphicsを使えなくて困ってます。
746 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 05:08:13 ] メンバにBitmapとか描画バッファを用意して button1_Clickで描画、PaintでBitBltが妥当じゃね?
747 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:55:55 ] >>745 Form.CreateGraphicsは? .NET使うならC#は読み書きできるようになった方がいろいろ便利だよ
748 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 10:16:58 ] あけおめです。 >>746-747 レスありがとうございます。 まず>>747 のようにbutton1_Clickに Graphic^ g=CreateGraphics(); としてボタンでの描画は成功したんですが、今度はForm1_Paintが呼ばれたときに描画されたものが消えてしまったので >>746 の方法をとろうとしたんですが、ドキュメント見たりググったりしてもいまいち描画バッファ→画面のBitBltのやり方が 分からなかったので、 www.atmarkit.co.jp/fdotnet/dotnettips/458picboxdraw/picboxdraw.html を見ながらpictureBox1を作って、 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Graphics^ g = Graphics::FromImage(pictureBox1->Image); drawRandomWalk(g); pictureBox1->Refresh(); } こんな感じで解決しました。結果的には>>746 の方法に近い?解決策となりました。 C#も勉強してみます(’・ω・) ありがとうございました。
749 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 19:39:43 ] make_publicの使い方に詳しい方いますか? ReleaseでDLLをBuildするとリンクエラーが発生します。 >libtest.obj : error LNK2022: metadata operation failed (80131195) : カスタム属性が適合しません: (0x0c00021b)。 >Stdafx.obj : error LNK2022: metadata operation failed (80131195) : カスタム属性が適合しません: (0x0c000261)。 Debugでビルドするとエラーが発生しません。 make_publicはStdafx.h(PreCompileヘッダ)に記述しているのですが、 どう対処すればよいのでしょうか?
750 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 10:05:33 ] ガベージコレクションが走るスレッドっていうのは、どのスレッドかは確定してないんですよね? ということは、ガベージコレクションが走る際に呼び出すアンマネージリソースの処理は スレッドセーフにしておかなければならないということかな? 具体的には参照カウントオブジェクトのラッパーをC++/CLIで作って.NETで使おうとしてるんだけど Release関数をスレッドセーフにしなきゃならんのかなと。 (Interlockedにすればいいだけの話なんで、それ自体はどうってことないのですが)
751 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 11:45:06 ] ファイナライザスレッドは独立したスレッドなのでどのみちスレッドセーフは必要だろう
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 さんの言うとおりの動きなのかな? とりあえず解決しましたー。ありがとです。