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
303 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 13:25:03 ] >>302 共有メモリはプロセス間でメモリ共有したいときのものだと思うけど。 DLLはもとからメモリ空間共有してるわけだし、 メモリ共有で何を解決するつもりなのかサパリワカラン
304 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 14:29:10 ] >>303 DLLのスタティック領域がプロセス間で共有されてたのはWindows 3.1時代の話だぜ
305 名前:290 mailto:sage [2007/06/06(水) 19:50:35 ] >>292 ありがとう。 しかし290の例の日本語は他の言語の場合もあり、またはUnicodeでしか 表わせない混合型の場合もあるので、もっと根本的な解決法があれば いいんですが。
306 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 00:18:32 ] 根本的な解決があるとすれば、そのライブラリをどうにかするしかない ハンドルやファイルポインタ・ストリーム辺りが渡せればだいぶましなんだが
307 名前:デフォルトの名無しさん [2007/06/13(水) 07:45:40 ] アンマネージドで格納したバイト配列をcli::array<unsigned char,1>にしたいのですが、 どうすればいいのでしょうか? int size = 1024; byte *buf = new byte[size]; cli:array<unsigned char,1> ^arr = gcnew cli:array<unsigned char,1>(size); System::Runtime::InteropServices::Marshal::Copy((IntPtr)buf, arr, 0, size); //ここでエラーになる。
308 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:50:08 ] IntPtrをSystem::IntPtrにしたこと以外はそのままでも問題なさそうだし、 実際試しに動かしてみても問題なかったぞ
309 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:37:21 ] >>308 ありがとうございます。 すみません。問題は別のところにありました。 実際は*bufは関数でネイティブに渡していて、そこにそのまま渡していたという初歩的なミスです。 void nativefunc(byte **buf_p, size_t *size) { //--- nativefunc(byte *buf_p, size_t *size) これで宣言していた *size = bitmap.size; byte *data = new byte[*size]; memcpy(//--- データ書き込み *buf_p = &data[0]; //--- cliのbufのアドレス書き換え } void clifunc() { size_t size; byte *buf; (new NativeCls)->nativefunc(&buf, &size); //--- nativefunc(buf, &size); そのまま渡していた cli:array<unsigned char,1> ^arr = gcnew cli:array<unsigned char,1>(size); System::Runtime::InteropServices::Marshal::Copy((IntPtr)buf, arr, 0, size); }
310 名前:デフォルトの名無しさん [2007/06/21(木) 00:39:09 ] String a("A"); これがコンパイルできないのはなぜですか? error C3149: 'System::String' : トップレベルの '^' なしに、この型をここに使用することはできません
311 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:46:21 ] トップレベルの '^' なしに、この型をここに使用することはできないから。
312 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 01:45:46 ] >>311 その理由を聞いています。
313 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 07:33:41 ] 仕様だからとしか
314 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 08:49:15 ] 仕様ですか。しかしObjectやStringBuilderなどは^がなくてもOKなので、 Stringのみ特別な事情があると理解すればいいでしょうか?
315 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 09:20:15 ] MSDNには対象外としか書いてないね。 The following reference types are not available for use with stack semantics: delegate / array / String 予想だけどこれらはIDisposableでないので出来ても意味が少ない。 出来たとしてもハンドルに変換しないと使えない。 String s("A"); String^ x = "abcd" + %s; String^ x = "abcd" + s.ToString();
316 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 10:55:52 ] >>315 ありがとう。 使い道がないということで理解しようと思います。
317 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:45:52 ] delegateは知らんが、arrayやStringは.NET ILレベルで特別扱いしてるからかもな。
318 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:16:58 ] VC2005でデバッグしてるとステップ実行で変なところを さしてしまう場合があってデバッグしづらいんですが 直す方法はありますか? nop命令があってそこでへんなとへこいきます。
319 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 05:55:39 ] GUIなアプリケーションを作るために C#の「Windowsアプリケーション」プロジェクトでいくか C++/CLIの「Windowsフォームアプリケーション」プロジェクトで行くか悩む。 アンマネージドなC++クラス(とboost)で書かれたCUI アプリケーションのGUI版を作ろうとしています。 C# でもアンマネージドな DLL のエントリを呼び出すことできますし。 でもアンマネージドな C++ のクラスを使いまくりたいんだけど どうしたものか・・・ COM コンポーネントとして作られていれば 容易に扱うことができたのかもしれないけど。 アンマネージドな C++ で書かれたクラスのインスタンスを 生成したい時って、そのクラスのファクトリメソッドを 用意しておいてそれを C# 側から呼び出すということになるんですかね? C++ 特有の複雑な(引数の型を反映した)関数名とかどうなるんだろう。 extern "C" つかうのか。
320 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 05:56:10 ] ごめん、書いてる途中で C# な話題になってしまった。
321 名前:319 [2007/07/06(金) 06:41:49 ] それで、肝心のことなんですが、アンマネージドな C++ のクラスを .NET 環境で使うためには C++/CLI でラッパークラスを書けば いいのでしょうか?そうするとマーシャリングなども自動で やってくれるということなのでしょうか? DLL は C++ にやさしくない、かといって COM コンポーネント として書いてしまうとプラットフォームに強く依存しすぎるので 一般的な用途のクラスライブラリには向かない、 でもアンマネージドな C++ のクラスを .NET と仲良くさせたい、 という課題をどう解決すればいいのかを教えてください。
322 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:19:58 ] > そうするとマーシャリングなども自動で > やってくれるということなのでしょうか? そういうことになるが、ある意味自分で マーシャリングコードを書く補助をしていると言ってもいいかもしれない。 アンマネージクラスをC#(やその他.NET言語)から呼び出したければ、 C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、 他の言語から参照設定して使うのが一番率直な手段。 そもそもC#でアンマネージDLLのC++クラスを操作するなんて不可能だぞ。 (COMインタフェース経由を除く)
323 名前:319 [2007/07/06(金) 10:57:16 ] >C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、 >他の言語から参照設定して使うのが一番率直な手段。 やっぱそうですか、ある意味安心しました。 System.Runtime.Interop 以下にいろいろあるのを眺めてて、 もしかしてマネージドからなんかうまい具合にごにょごにょ できる方法が用意されてるのかなぁ、などと疑心暗鬼になってました。
324 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 13:26:04 ] VC2005でデフォルトのフォームアプリを作成して、 CLRサポートを/clrにして以下のインクルードを追加すると 実行時ヒープエラーみたいなのが出ます。 #include <comdef.h> #pragma comment(lib, "oleaut32.lib") どうやって直したらいいのでしょうか?
325 名前:デフォルトの名無しさん [2007/07/24(火) 03:07:41 ] なんで Void って大文字になったの?
326 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 03:13:36 ] ヘミvoidが権利を主張するのを避けるため
327 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 23:16:42 ] System::Void のこと?
328 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 23:50:23 ] 当たり前のことなんだろうけどvoid代わりに使えるのが少し不思議に感じる。 #include <cstdlib> int main() { System::Void* pv = std::malloc(256); std::free(pv); }
329 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 02:28:58 ] 自分自身の起動パスを得るにはどうしたらいいの?
330 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:29:14 ] CRTの__argv[0]やWin32のGetModuleFileName(0,とか .NETのSystem::Windows::Forms::Application::ExecutablePathなど。
331 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 22:11:43 ] Applicationにあったのか! ありがとう。 ずっとProcessとかを探してたよ Win32APIのときGetModuleDirectoryとかなんとかだったから
332 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 22:51:56 ] >>331 その線も惜しい。 Win32はGetModuleFileNameだったでしょ。 .NETだとモジュール (EXE/DLL)に対応するものはアセンブリだから、 その方向でやるならAssemblyクラスが正解だった。 www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html
333 名前:デフォルトの名無しさん [2007/07/27(金) 12:14:00 ] Visual Studio 2005 で C++/CLI を使おうとしています。 std::vector<System::String^> のように標準のSTLのコンテナには ハンドルを格納することはできないのでしょうか? C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが 用意されているのでしょうか?今の自分は array<String^> しか使えずさみしい毎日を過ごしています。 std::vector<System::String^>^ lines; try{ for(;;) lines->push_back(stream_reader->ReadLine()); } catch 以下略 のようにぶん回してファイルを行単位で全行 読み込みたいだけなのですが・・・
334 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:19:12 ] >>333 >C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが つSystem::Collections::Generic STL.NET構想はどっかいっちゃったけどな
335 名前:デフォルトの名無しさん [2007/07/27(金) 12:26:29 ] >>334 おお、「コレクション」というのですか。 どうりで C++ CLI コンテナ で検索していても 昔の managed C++ の資料や gcroot でがんばる という方法しか見つからず難儀していました。 しかも cliext::vector なんかも見つかってしまい、 余計に混乱していました。cliext 名前空間以下の 識別子ってのが STL.NET なんですかね?
336 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:42:30 ] >335 STL.NET は STL/CLR という名前で VS2008 に同梱 ただ、.net fx 2.0 では動かない こういう後方互換性がないものを C++/CLI で出してほしくなかった
337 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:47:04 ] >後方互換性 上位互換が無いってことか?
338 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:49:22 ] >>336 それで困るやつはどれだけいるんだ
339 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:51:29 ] STLってのはC++では最重要なんだが...
340 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:55:13 ] >>336 それ本当? .NET Framework 3.0も3.5もCLRのバージョンは2.0のままだろ。
341 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:07:08 ] .net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に 3.5 が必要になるのは嫌じゃね? 前のCTPの頃はライブラリだけ持って行けばよかったんだが
342 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:22:05 ] >340 Beta1 で Microsoft.VisualC.Stlclr.Dll +ヘッダ抜き出しで駄目だったという報告があった とりあえず、Beta2 が来てるんで、入れて試してみる 一応、「Microsoft.VisualC.Stlclr.Dll は .net fx 3.5 の一部ではない」はずなんだが
343 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:47:59 ] >>341 >.net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に >3.5 が必要になるのは嫌じゃね? >前のCTPの頃はライブラリだけ持って行けばよかったんだが コンパイルし直すんだろ? どうせmsvcp90.dllとか増えてるんじゃないの? VC++のランタイムライブラリに同梱ってのが幸せになる道かねぇ。 まあ3.5のサイズにもよるな。
344 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 14:43:50 ] >343 客先に説明するのが面倒なんだよね。でも、STL/CLR は使いたい できれば、CTP同様に VS2005 + ヘッダ + Microsoft.VisualC.Stlclr.Dll で STL/CLR を 使った開発ができる方がうれしい。SP2 で来ないものかな
345 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 17:14:22 ] std::vector<int> v; : for each(int i in v) {} for eachでbegin(), end()が呼ばれているようですが ECMA-372にはこの振る舞いの記述が見あたりません。 MSの独自拡張なのでしょうか?
346 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:28:26 ] >345 これでも行けますね int vec[] = { 1, 2, 3, 4, 5 }; for each ( int num in vec ) { std::cout << num <<std::endl; } 配列アクセスが可能なものは Array のラップを掛けて渡されているのでは ないでしょうか。Array は IEnumerable ですし
347 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:34:44 ] >346 ごめん。これはできて当たり前だわ array<int>^ vec = { 1, 2, 3, 4, 5 }; と同等だもんな
348 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:12:42 ] >>346 Cタイプ配列とarray<T>は同等じゃないから346は通らないのでは?
349 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:20:17 ] std::vectorに対するfor each inはネイティブでコンパイルしても使えてるな。 /Zeで拡張構文を抑制するとeachが構文エラーになった。 // cl /EHsc hoge.cpp #include <iostream> #include <vector> int main() { std::vector<int> v; v.push_back(1); v.push_back(5); for each (int i in v) std::cout << i << std::endl; return 0; }
350 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:16:58 ] >348 Cタイプ配列は C++/CLI では array<Type> でラップされるよ。だから、346 は動く >347 がそれを言ってる ヘッダ見たけど、特に ecma-372 で必要とされている IEnumerable の定義も 見あたらないから、CLR・・・で定義されている所に、拡張構文で潜んでるっぽい
351 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:24:10 ] VS2008 Beta2 試してみた。コンパイル対象となる .net fx が選べるようになったんだが 2.0, 3.0 を選んだとき、STLCLR.dll は使えなかった STL/CLR を使いたかったら、3.5 を普及させろと言うことらしい ( ゚д゚) Feedback マンドクサ _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄
352 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 19:47:41 ] >>350 C#のCタイプ配列はCLR配列だが、C++/CLI のCタイプ配列はCLR配列じゃないぞ。 >>346 を実際にコンパイルしてみろ、C3285でしっかりコンパイルエラーが出る。
353 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 23:12:16 ] VC8 SP1で試したけど/clrの有無に関わらずC3285になるね。 当たり前だけど、boost::arrayはOK。 どうせならレンジに使えればいいのに、 ってそれなんてBOOST_FOREACHなんだけどね。
354 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:40:44 ] >352-353 悪禁食らっていたので返答が遅れた ごめん。漏れが試したのは、VS2008 Beta2 だった。こちらは >346 でコンパイルできるし 動く。また、ecma-372 でも、仕様上 346 で正しいから、VC8 で取りこぼしてた仕様が いくつかあったやつを VC9 で準拠したんだと思う /clr の有無に関わらずって、/clr なくて for each が使えるの?
355 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:24:33 ] >>354 349でネイティブでも使えるという報告があるよ。
356 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 14:40:51 ] ファイル名をキーとするstd::mapのようなものを作りたく、Generic::Dictionaryのキー型にString^ 比較にStringComparer:::CurrentCultureIgnoreCaseを指定してるのですが 全角アルファベットの大文字・小文字も同一視されてしまいます。 要するにNTFSやFATと同じようなファイル名の比較をしたいのですが、どうすればいいんでしょうか?
357 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:16:49 ] つ ネイティブC++
358 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:50:00 ] >>356 WindowsのNTFSファイルシステムドライバは"A"と"a"は同じ文字とみなしてるよ?
359 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 16:11:47 ] >>358 あ、ほんとだ。区別されるものと思ってた。
360 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:22:34 ] >>356 カーネルの中には比較する関数あるんだけどね・・・ なんでユーザーモードに無いのかは謎 まじめにやると日本語やアルファベット以外の文字(ヨーロッパ圏など)でも 全角半角を問わず大文字小文字を区別しないので 割と面倒だった気がする。
361 名前:デフォルトの名無しさん [2007/08/01(水) 04:25:12 ] Visual Studio 2005 で C++/CLI を使っています。 フォームデザイナの機能で C++/CLI と C# の間に 違いはあるのでしょうか? つまり C# でのフォームデザイナと、C++/CLi での フォームデザイナの間に、利用できるコントロールの 種類などで違いがあるのでしょうか? .NET Framework で用意されている機能なら言語によらず 利用可能だとおもうので差はないと思っているのですが。
362 名前:デフォルトの名無しさん [2007/08/01(水) 04:54:48 ] マネージドなプログラム組むならC++なんか使わねっつの!w
363 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 08:38:47 ] >マネージドなプログラム これってメリットある? いや、一般論じゃなくて実際のところ。
364 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 09:07:42 ] プラットフォームにVistaが使えるじゃねーか。
365 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 09:14:12 ] いや、Vi$taにあうのはネイティブアプリ。
366 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:44:46 ] >>363 自分専用ツールにはクラスライブラリが充実しているので便利。
367 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:01:52 ] >>366 それにしては、Win32で出来るものが出来なかったり、中途半端。 だったらVCLみたくネイティブクラスライブラリ充実させろよ。
368 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:05:21 ] >クラスライブラリが充実しているので これって、ネイティブ版クラスライブラリを作成すれば完璧だおね。 M$のドトネト囲い込み戦略に嵌められてるだけじゃないの? ドトネトは終焉したわけだし、無視した方が良いよ。
369 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:37:37 ] ドトネト君っていろんなスレにいるな。 飽きないの?
370 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:00:03 ] >プラットフォームにVista つ ttp://gigazine.net/index.php?/news/comments/20070801_will_not_move_to_vista/ 企業ユーザーの大多数はVistaへの移行を考えていない
371 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:47:45 ] そりゃ、CreateFile系のAPI自体がバグでロックしちゃうんだもの。 企業ユーザが使おうとするわけがない。 >> VISTA
372 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:10:29 ] >CreateFile系のAPI自体がバグでロックしちゃうんだもの。 kwsk
373 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:12:17 ] これか ttp://d.hatena.ne.jp/NyaRuRu/20070731/p2
374 名前:デフォルトの名無しさん [2007/08/01(水) 22:23:38 ] Form.hに実装を書かせられるの嫌なんだけど、どうにかならない? てか、なんでForm.hに実装させるような仕組みにしたんだろう?
375 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:02:47 ] Form.cppに実装を移せば?
376 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:59:06 ] 実装を書かせるといっても、イベント用に開発環境が自動生成したものですよね。 これをcppにということになると、たとえば、フォームデザインの変更を ちょこちょこやる場合、Formのデザイナとヘッダとcppを行ったり来たりでは やっぱり大変だよね。
377 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 00:59:04 ] ぶっちゃけVC++8の.NETサポートは「諦めろ」としか言えないよ・・・
378 名前:デフォルトの名無しさん [2007/08/02(木) 04:03:15 ] VC++9 では何か変わってるの?
379 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:44:37 ] そりゃ変わってますよw
380 名前:デフォルトの名無しさん [2007/08/02(木) 18:35:26 ] VC2008先行して使っている人、 デサイナが生成するコードに何か大きな変化は有りましたか?
381 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:36:34 ] 試してみたけど変わってないみたいだね。残念だ…
382 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:27:36 ] C++/CLI に関してはろくに対応されていないね。STL/CLR なんか作ってる場合じゃないと 思うんだが。結局、ネイティブ・アプリの ClickOnce 対応もしていないし
383 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:53:42 ] いや、STL/CLRは「ろくな対応」なんじゃないか?
384 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 01:11:20 ] ネイティブの STL にマネージド・オブジェクトが格納できればいらない対応でしょ むしろ、2種類のライブラリに混乱しかねない
385 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 01:41:52 ] マネージドなSTLはそれになりに便利だと思う。 標準C++ & boost萌えな俺には、C++/CLIやC#はきついんだが…
386 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 08:17:10 ] >>384 確かに。少なくともクラス定義だけでも、 ネイティブクラスと値クラスに違いがなければいける。 前にも書いた気がするけど、ハンドル用のアロケータ書いてみたが、 ネイティブクラスはハンドルを持てないのでだめだった。
387 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 08:27:31 ] C++0x の concept map が C++/CLI に実装されたら、それつかって managed class を STL コンテナにいれられるのでは...
388 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 10:16:37 ] だとしたら、ほんとに STL/CLR は C++0x が確定するまでの繋ぎでしかなくなるな
389 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:18:52 ] いや、一応STL/CLRは一度覚えればC#でも使えるんだろ?
390 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:21:41 ] STL/CLR は C++/CLI せんよーだってさ テンプレートで実装してるしね
391 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:22:36 ] じゃあ、意味ねーなw
392 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:33:20 ] なんかグダグダ
393 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:46:48 ] でもまだSTL/CLRのコンテナは、System::CollectionsやSystem::Collections::Genericの インタフェースを実装しているのが強みと言えるかもしれない。
394 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:51:41 ] STLがあればGenerics要らんやん。
395 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 17:49:38 ] C# にも展開してくれれば良かったんだけどなぁ
396 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 00:58:40 ] まぁどっちかっつーと.NET言語の態勢を保ちつつ コンパイル時のコード生成であるC++テンプレートをサポートするってのが 端から無茶やってるとは思うけどねぇ。
397 名前:デフォルトの名無しさん [2007/08/04(土) 13:00:12 ] C++/CLIでは stringstream に相当するものは用意されているのでしょうか?
398 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 13:03:09 ] .NETのクラスライブラリにはMemoryStreamが似ている存在。 でもstringstreamだって使いたければ使えばいいし。
399 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 15:31:51 ] StringBuilder や StringReader, StringWriter を使ってもいいな
400 名前:デフォルトの名無しさん [2007/08/04(土) 23:23:24 ] C++/CLIでも派生させるクラスのデストラクタはvirtualにすべき? 勝手になる?
401 名前:397 [2007/08/04(土) 23:41:29 ] 長さの単位がString,StringBuilderはInt32でStreamはInt64くさいけど System::IO::Streamとしても使いたかったんで MemoryStreamから派生することにした。 順序つきで使える operator >> は面倒だからやめた・・・。 generic <typename T> MyStringStream% operator << (T x) { cli::array<unsigned char>^ buffer = System::Text::Encoding::Unicode->GetBytes(x->ToString()); this->Write(buffer,0,buffer->Length); return *this; }
402 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:21:56 ] >>400 ポインタを使った場合だと、virtual 付けないとダメね ハンドル型だと、virtualなしでもいける
403 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:23:24 ] >>402 へえ、boost::shared_ptrみたいだな
404 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:26:44 ] 「リソース管理できてデストラクタに罠がない賢い手段」 目指してるものが同じだからな。
405 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:54:52 ] >>402 トンクス!
406 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:28:41 ] ハンドル型っていまいち概念がわからん。 マネージドヒープにある実体を指すポインタなんだろうか?
407 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:35:03 ] ガベコレの都合から考えたほうが早いかも
408 名前:デフォルトの名無しさん [2007/08/05(日) 02:07:15 ] ref class だと デストラクタってDisposeじゃなかった? だからvirtualにならないとつじつまが合わない気が・・・
409 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 05:28:45 ] >>408 ref classのデストラクタはDispose()ナマじゃなからvirtualかどうかは意味がない。 デストラクタを宣言すると暗黙でDispose(bool)とDispose()とFinalize()が定義されて、 デストラクタはDispose(bool)から間接的に呼ばれるので、 結果、継承ツリーの下位のほうから順にデストラクタが呼ばれる形になる。
410 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 08:36:27 ] >>406 ようするにそういうこと。ただしポインタ演算禁止で、演算子多重定義が使える。 ポインタ演算がやりたければinterior_ptr<>。
411 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:26:15 ] >>406 > マネージドヒープにある実体を指すポインタ が含まれてます。ハンドルには。 そのポインタ(あるいはID)を直接操作するのは危険なので、 (たとえばGCで、場所を移動されるかも知れないので) ハンドルを介して、その対象を操作するのです。 用語としては、車を運転する時に、直接タイヤを動かすのではなくて、 ハンドルを回して、タイヤを動かすあのハンドルと同じです。 CでFILE型がファイルハンドルと呼ばれるのと同じ。
412 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:38:01 ] >>410 ,411 thx 引数にint^で受け取ると勝手にSystem::Int32^になってるんだな。 int main(){ int x=10; plusA(x);//値は変わらない plusB(x);//値が変わる } void plusA(int^ x){ ((int)x)++; //int型へのキャストが必要 } void plusB(int% x){ x++; //いまいち理解できない } ところでConsole::WriteLineっていうのがあったと思うけど、 どうなったのでしょうか?VS2005のどこにも出力されないんですけど。
413 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:48:52 ] >>412 %は参照&のマネージド版。 ハンドルは、一応ポインタになぞらえられることを示すとするとこんな感じ。 値型をボックス化したハンドル絡みではこういうことになる。 void plusA(int^ x) { (*x)++; } int x = 10; int ^h = x; plusA(h); std::cout << x << ' ' << *h << '\n';
414 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:13:39 ] void plusA(int^ x) { (*x)++; } int ^x=10; plusA(x); //書き換わる plusA(*x); //そのまま ようするに参照ということかな?VBのByrefみたいな。 std::coutもprintfもWriteLineもどこにも出力されないんだが、 どうやって出力結果を見てるの?
415 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:48:01 ] >>414 Console::ReadLine();などででプログラム止めてる? plusA(*x); って、*xがplusA関数に渡されるときに、 *xのコピーオブジェクトが作成され、そのハンドルがplusA関数の仮引数に 格納されるから、値が変わらないってことでいいのかな? そうそう、 (10).Equals(11); みたいに定数もオブジェクトとして扱われるんだね。
416 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:21:27 ] >>414 コンソールプログラムのプロジェクトにしている? そうしないと、cout, printf, WriteLineの出力先は現れないよ。 コンソールプログラムのプロジェクトでなかったのなら、 プロジェクトのプロパティのリンカのシステムか何かのとこにサブシステムの設定があるから、 その中のコンソールを選べばいい。 msdn2.microsoft.com/ja-jp/library/fcc1zstk (VS.80).aspx >>415 plusA(*x);でコピーが作成されるのはそのとおり。ボクシングとは、 結局マネージドヒープに新しくオブジェクトを作って、そこへコピーすること。 値型のハンドルを引数に受け渡しすること自体はVBのByRefや Cのポインタ渡しそっくりでいいんだが、ボクシングという 暗黙のオブジェクトのコピーが働くから話が少々厄介になっている。
417 名前:デフォルトの名無しさん [2007/08/06(月) 21:48:15 ] boostみたいにprivateもシリアライズできる 非侵入型のシリアライズはないのでしょうか?
418 名前:デフォルトの名無しさん [2007/08/07(火) 19:32:08 ] 最初2003のManaged C++で作ってたんだが 都合により2005のC++/CLIに移ることにした。 プロジェクトを変換してコンパイルエラーを片付け、 いったんは動くようになったんだが しばらくしてリビルドしようとすると リンクエラーLNK2020「メタデータの操作に失敗しました」 が発生する。 今環境がないんで詳しいエラー内容は書けないんだが 「プロパティの数が違う」みたいなことを言われていた。 LNK2020にはいろいろ種類があるらしく、 「重複する型に、適合しないフィールド宣言があります」なら リビルドすればいいらしいんだが、リビルドしてみても直らなかった。 プロジェクトを新規作成してファイルを全部入れても同じエラー。 ググっても英語のページすら出てこなかった。 誰か対処方法知ってたらplz
419 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:38:50 ] 最低限のコードを入れてリビルドして、どうなる?
420 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:42:36 ] >>419 stdafx.h stdafx.cpp main.cpp resource.h だけの状態?
421 名前:デフォルトの名無しさん [2007/08/07(火) 20:48:11 ] すまんLNK2022だった
422 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:26:28 ] アノニマスな構造体があったの?
423 名前:418 mailto:sage [2007/08/08(水) 20:34:16 ] どうやらプロジェクトファイルが壊れていた模様。 もう一回プロジェクト変換しなおして ソースとヘッダ入れたら動いた。 お騒がせスマソ >>422 なかった
424 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:43:41 ] VC++ expressで C++/CLIを使うときの制限事項ってどんなのがありますか?
425 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:05:30 ] 別に何も無いよ
426 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 05:45:05 ] え?そうなの? デバッグ機能とかGUIのデザインあたりが はしょられてるんかと思ってた
427 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 08:36:21 ] >>424 msdn2.microsoft.com/ja-jp/library/hs24szh9 (VS.80).aspx
428 名前:デフォルトの名無しさん [2007/08/19(日) 21:32:30 ] intからenum(enum classじゃない)に変換したいんだが 普通のC言語のようにただのキャストじゃ変換できない? どうもできていないような気がするんだが。
429 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:09:33 ] >>428 enum classじゃないenumはC++のそのままですよね? 単に使い方がおかしいだけでは。ソースを示してみたらどうです。
430 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:34:08 ] DirectXのコードなんだが D3DFORMAT fmt = (D3DFORMAT)21;
431 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:38:04 ] 実際のコードでは21の部分は変数になってる。 ユーザの入力。
432 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:44:36 ] 実体が unsigned long int なんじゃね?
433 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:03:15 ] ヘッダではこうなってる typedef enum _D3DFORMAT { (省略) D3DFMT_A8R8G8B8 = 21, (省略) } D3DFORMAT;
434 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:05:14 ] 直後にブレークポイントつけてウォッチすると fmtが「未定義の値」になってる。
435 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:48:25 ] これで普通に代入できたぞ? int val = 21; D3DFORMAT fmt = (D3DFORMAT) val; std::cout << fmt << std::endl; VS 2008 Beta2 なんで、2005でも大丈夫かわからんが
436 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:52:56 ] version違いの*.hがあって、21がない方のをincludeしてるとか。
437 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:53:44 ] d3d9types.h なんて前からあるっしょ これでリリース・ビルドしていたせいで変数がデバッガ上で正常に表示されていなかった なんてオチだったら指さして笑うが
438 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:24:44 ] C++/CLIって実際どのくらい使われてるの?
439 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 01:02:33 ] Dの5倍くらい。
440 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:26:53 ] >>438 俺仕事で使ってる ただのラッパークラスだが
441 名前:デフォルトの名無しさん [2007/08/21(火) 09:18:49 ] >>440 ネイティブのライブラリをドトネトから使うため?
442 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:54:43 ] >>411 前の製品の再利用可能な部分 GUIはC#になっちまった
443 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:55:14 ] 安価ミス >>441 な
444 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:01:14 ] >435 enumは int だし。ってのはCの仕様だっけか。
445 名前:428 mailto:sage [2007/08/22(水) 21:45:58 ] どうやらint関係なしに 直接D3DFMT_R8G8B8を入れても <未定義の値>になる。 デバッグにはなってるんだが。
446 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:32:24 ] enum は含まれる値を全て表現可能なサイズの型になる。
447 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 08:38:13 ] >445 直接、D3DFORMAT の enum 値を出力してみたら? TRACE でも cout でも何でもいいけど ちなみに、コンパイラは VC8 なんだよな?
448 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:02:06 ] >>447 ちゃんと21が出たw VC8です デバッガがミスっただけかな。
449 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:29:40 ] フォームを多言語化して、ニュートラルと日本語のリソースを交互にいじってると 設定した値が元に戻ったりするんですが、これについて何かご存じな方 いらっしゃいますか?
450 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:35:42 ] 追記です VS2005上での話です。
451 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 15:44:35 ] この言語ほんとに流行りそうなの?
452 名前:デフォルトの名無しさん [2007/09/01(土) 20:26:10 ] .NET が流行れば。 だって既存の C++ のライブラリの ラッパーとしての存在価値は少なくともあるから。 で、.NET というか CLR ってこれからはやるのかね? mono でも ASP.NET をはじめとしていろいろ動く ようになってるし、.NET Compact Framework も 広がりを見せているようだけど。
453 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 21:22:06 ] C++/CLI自体が単体で流行ることはないと思う。 あくまでもC++の資産を.NETで利用するためのツール。
454 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:30:15 ] C++/CLI 自体は JDirect の正当な発展系だと思う .net が COM 拡張として発生したように、外部管理オブジェクトのハンドリング用言語として C++ を拡張したものだから Windows 用の Objective-C みたいなものなんだけどなぁ
455 名前:デフォルトの名無しさん [2007/09/01(土) 23:46:12 ] Objective-C つかったことないや
456 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:48:42 ] はいはい死滅死滅
457 名前:デフォルトの名無しさん [2007/09/02(日) 14:31:02 ] 2008になったらC++CLIは何かかわんの?
458 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 14:47:34 ] >>457 STL/CLRとこれまで規格に非準拠だった部分の対応。 例えばC型配列がarrayと同等に扱えるようななった。
459 名前:デフォルトの名無しさん [2007/09/02(日) 16:07:58 ] がるぽっ
460 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:09:48 ] C++0x が確定するまでは、大きな修正は入れてこないだろうね また、いろいろと言われるから(w
461 名前:デフォルトの名無しさん [2007/09/02(日) 16:50:15 ] なんか、見た目が変態的なソースコードになるよな・・・ 無理矢理.netに対応させた文法を追加せずに、 C++にライブラリで誤魔化したほうがマシな気が・・・ .netに最適化した言語、とかならC#ってのをやってるのだし、 あんまりC++/CLIの存在意味がないような・・・
462 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:05:21 ] それをやったのが mc++ で、マネージド・オブジェクトの判別が付かなくなったので 明示的に分離するように変更したんだよ C++ は既存のままで、CLI を追加構文で、これでようやく見通しが良くなったのさ oldSyntax で一度書いてみると、ライブラリで対応って言うのが以下に非現実的か よくわかるよ
463 名前:デフォルトの名無しさん [2007/09/02(日) 20:13:36 ] 正直 Managed C++ は「よけいわかりにくいわ!」って 感じだったからな。マネージドな部分とそうでない部分が 明確に分かれている C++/CLI のほうがわかりやすい。 確かに上にあった Objective C の Microsoft 版だという たとえは的を射ていると思う。
464 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:16:36 ] 漏れにスキルさえあれば、JVM や Squeek に CLI ラッパをかぶせて、GCC の C++/CLI 実装を作ってみるのになぁ
465 名前:デフォルトの名無しさん [2007/09/07(金) 18:04:21 ] .NET2005 C++/CLIで開発しています。 設定情報をapp.comfigから読みだすために app.config(appはプログラム名へ後に変換)へ例えば <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="HOGE" value="ほげほげ" /> </appSettings> </configuration> と書いて、C++/CLIのコード(フォームアプリ)からは、 MessageBox::Show(System::Configuration::ConfigurationSettings::AppSettings[ "HOGEHOGE"]); MessageBox::Show(System::Configuration::ConfigurationManager::AppSettings[ "HOGEHOGE"]); と呼び出して表示しているのですが、OSがXP(SP2)だとうまくいき、 Win2000(SP4)だと表示が空文字になってしまいます。 MSDNにはWin2000(SP4)もサポートしているように書いてありますし、 vcregist_x86.exeやdotnetfx.exeも実行してあるのですが。。。 このあたりの情報(こうすれば動く、実はサポート外など)を お持ちの方、いましたら教えていただけませんか。 ネットで散々探しましたが、意外とこの話題少ないんです。 よろしくお願い板します。
466 名前:465です [2007/09/07(金) 18:08:54 ] ごめんなさい。 <add key="HOGE" value="ほげほげ" /> は <add key="HOGEHOGE" value="ほげほげ" /> の間違いです。
467 名前:デフォルトの名無しさん [2007/09/08(土) 09:39:16 ] レベル高すぎ
468 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 12:14:40 ] >>465 うちの環境だと正常に読めてる。Vertual PCでWin2k(SP4)。 xx.exe.configの名前はあってる?
469 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:02:27 ] >>468 >xx.exe.configの名前はあってる? それ、ビンゴです! C#やVBはビルド時に自動でファイル名つけてくれるのに。。。
470 名前:デフォルトの名無しさん [2007/09/22(土) 02:10:50 ] 過疎ってんなー やっぱりC++/CLIは 流行らないってことでおk?
471 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 03:07:29 ] だってマネージ・アンマネージの橋渡し専用言語だもん
472 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 10:36:17 ] GDI+死ぬほどのろいんで、ペイントルーチンをC++/CLIでGDI使って 組めばいいんじゃね テキスト描画すんのもGDIのが楽なような
473 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 11:09:00 ] >>472 VistaでDDBの速度的有利さは事実上消滅したけどな
474 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 12:22:14 ] DirectDraw(笑)
475 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:28:37 ] >>473 .NETがのろくて誰も使ってくれないから全員平等にのろくしたって感じだな
476 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 15:55:56 ] 馬鹿?
477 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:13:30 ] .NETは最初から馬鹿だよ。
478 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:14:39 ] >>475 Direct3DとWPFは仲間はずれ?
479 名前:デフォルトの名無しさん [2007/09/23(日) 04:10:23 ] >>471 まぁそうなんだろうけど、そういう言語が CLI 上にちゃんと 用意されているところが Java VM とは違うところだよな。 といってドトネトを擁護してみる。 いや、漏れは好きだよ C++/CLI。というかこれがないと困る。 研究用のシミュレータをC++で boost とかのライブラリ使って 書いてるけど、フロントエンドの GUI が Windows Forms で 組めるのは楽だよ。
480 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 07:26:58 ] それって逆に選択肢がないんじゃ… > シミュ&Win Forms
481 名前:デフォルトの名無しさん [2007/09/23(日) 08:18:37 ] >>480 そうともいう。 シミュレータ自体はライブラリ化していて、コマンドライン版は Linuxクラスタで動かしているんだけど、同じライブラリを リンクしてWindowsで動くGUI版を作れるというのはかなり便利。 C# と C++/CLI と両方使って思うんだけど、 Windows Form デザイナ って両者の言語でかなり安定感ちがわないか? C++/CLI だとちょっとでも自動生成されたコードいじると もうデザイナが発狂してしまう感じ。どの程度いじってもOKなのか 基準がよくわからない。C# のほうも基準がわからないという点では 同じなんだけど、結構いじっても Windows Form デザイナが ちゃんと認識してくれる気がする。気がするだけか?
482 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 12:28:25 ] C#のほうが解析しやすい言語だから
483 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 12:57:21 ] 解析なんてしてないだろw
484 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:05:02 ] >>483
485 名前:デフォルトの名無しさん [2007/09/25(火) 14:00:50 ] プリコンパイル済みヘッダーは C++/CLIで使えるのでしょうか?
486 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 17:51:40 ] 使える
487 名前:デフォルトの名無しさん [2007/09/26(水) 23:29:57 ] プロパチー見ろ
488 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:24:24 ] C++で今まで書いてきて GUIをもっとバリバリやりたくなってきたんですが かといってMFCは嫌い。 C#は書き直すのがめんどいし そんな漏れはC++/CLIがいい?
489 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 06:58:21 ] >>488 Win32
490 名前:デフォルトの名無しさん [2007/09/27(木) 09:23:42 ] ネイティブで書かれた関数(数値計算のエンジン)を別のスレッドで動かして、 結果をグラフィカルに表示するなんてことができます? ネイティブの_begin_thread 関数を呼び出す必要が有りますか? それともドトネトのなにかを呼び出すべきなんでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:42:20 ] >>490 どちらでも可能だが、 マネージドのスレッドを使ったほうが取り扱いが楽だと思う。
492 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:44:11 ] ネイティブを混ぜるマネージドアプリに何の意味がある。
493 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:47:20 ] >>492 C++/CLIスレでそれを言うなよ。/safeにどの程度の意味があるんだ?
494 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:09:31 ] >>492 ネイティブってどういう意味で使ってるの?
495 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:10:25 ] >>494 マネージドアプリをアンマネージドアプリにする混ぜ物。
496 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:42:32 ] むしろ逆だろ pureでやりたいなら C# で十分じゃん C++/CLI はそれだけじゃ物足りない人向けだろ
497 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:50:00 ] WTLを忘れるな
498 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:31:12 ] 数値演算をC++にさせて「何の意味がある」って言われるなら、 <funcional>すら駄目ってことになるが…
499 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:41:05 ] C#って初期バージョンで完成形だったのに だんだん拡張されてキモクなってるよな。
500 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:21:17 ] 全然
501 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:14:05 ] C#程度でキモいっつーんならC++とか使えないだろ
502 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:18:33 ] >>488 楽したいならC# + C++/CLIとかWPFとか 厳しい道を行きたいなら DirectX Graphics
503 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:00:15 ] おまえ、なんかものすごい勘違いしてない?
504 名前:デフォルトの名無しさん [2007/09/28(金) 01:23:51 ] C#にある delegate の ThreadInvoke メソッドを使った ○ちスレッド処理って、同様のことは C++/CLI では できないのかな。そもそも delegate がないから無理か。
505 名前:デフォルトの名無しさん [2007/09/28(金) 01:25:43 ] ThreadInvoke じゃなかった、BeginInvoke だった。 それに、そもそも C++/CLI にも delegate はあるんだった。
506 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:44:23 ] なにを言っているんだ
507 名前:デフォルトの名無しさん [2007/09/28(金) 06:58:38 ] C++/CLIではコンテナクラスライブラリとして STL.NET なるものを使うべきなんですか?それとも .NET Framework にはほかにも(言語独立の)コンテナが用意されていて そちらを使うべきなんですか?
508 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 09:23:21 ] 好きな方を使えばいい C# で慣れてるなら .net の Collections を使えばいいし、違和感がないなら STL.NET で いい。格納するものがネイティブだったら、既存のライブラリでもいいだろうし
509 名前:デフォルトの名無しさん [2007/09/28(金) 21:18:24 ] C++/CLI では単純型の配列って初期化されるんでしょうか? あと、配列の持つ Clone メソッドっていわゆる浅いコピー しか作ってくれないんですよね?ハンドルを深くたどって 完全にコピーを作ってくれるようなメソッドはありませんか? 自分でディープコピーしないとだめ?
510 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 21:32:10 ] 一般論だけどDeepCopyの仕様はクラス作成者にしか決められないんじゃないかな。
511 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:18:26 ] >509 Primitive型と値型は初期化される
512 名前:デフォルトの名無しさん [2007/09/29(土) 09:20:50 ] ディープコピーのためのインターフェイスを実装していれば 自動的にディープコピーまでやってくれるなんてことは ないんですかね。Microsoft では「簡易コピー」と「詳細コピー」 って呼んでるみたいですが、たとえば System::Array の Clone は簡易コピーですよね?
513 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 15:17:17 ] 自動でディープコピーやったら、循環参照のときコピー終わらなくなっちゃうよ。 ArrayのCloneは簡易コピーだけど、 一般的にICloneableインターフェース実装が 簡易コピーでないといけないということはない。 Cloneメソッドが簡易と詳細どちらのコピーをするかは、 実装者に任せるというのが一般的じゃない? だから、既存のコピー実装が気に入らなければ、 外部で独自のコピー方法を定義するしかないよ。
514 名前:デフォルトの名無しさん [2007/09/30(日) 16:50:24 ] CEDEC2007で 3ds maxは、C++/CLI使ってるようなこと言ってた。 プラグインもC++/CLIだし
515 名前:デフォルトの名無しさん [2007/09/30(日) 17:49:50 ] コンテナはC++CLIならSTL+Boostがいいのかな?
516 名前:デフォルトの名無しさん [2007/09/30(日) 18:17:40 ] >>515 ネイティブなクラスのインスタンスを格納するか マネージドなクラスのインスタンスへのハンドルを格納するかに よるんじゃね?boost::shared_ptr で格納するなら また話は発散する。
517 名前:デフォルトの名無しさん [2007/09/30(日) 19:02:28 ] スタティックライブラリを利用しようとしたところ (libcmtd.lib等とぶつかる系も回避しました) DotNetTest2003_00 error LNK2020: 未解決のトークン (0A000013) exception.__ctor DotNetTest2003_00 error LNK2020: 未解決のトークン (0A000030) exception.__dtor DotNetTest2003_00 fatal error LNK1120: 外部参照 2 が未解決です。 って出ました。 これは何が原因なのでしょうか?
518 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:52:08 ] >517 それは C++/CLI なの?
519 名前:デフォルトの名無しさん [2007/09/30(日) 23:09:35 ] プロジェクトは、C++/CLIです。 stdafx.hに #include <windows.h> #pragma comment(lib, "user32.lib") 書いてます ライブラリのほうは、C++/CLIじゃありません
520 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:37:16 ] >>519 ライブラリは /MDでコンパイルしてます?
521 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:42:45 ] 〜〜〜〜 / ヽ / >~~~~~~~~/ | ∠ \ / | | √ ⌒ <⌒ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (6 ≡ \| | やる前から負けることを ≡ ┌ __「| < \ \_( | | 考えるバカがいるかコノヤロー! \ ー | | \___| \_____________
522 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:44:19 ] 誤爆スンマソ
523 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 12:13:11 ] ネイティブコード吐かないんなら、C++使う意味無くない?
524 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 12:15:21 ] 無くない
525 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 13:00:02 ] ドトネトにはイミナイ
526 名前:デフォルトの名無しさん [2007/10/01(月) 17:40:21 ] >>520 おおおお いけました。 ありがとうございます。 ありがとうございます。 ありがとうございます。
527 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:04:15 ] 修行するぞ。 修行するぞ。 修行するぞ。
528 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:17:04 ] C++なのに遅いとか泣けるよな・・・ いや、C++/CLIをC++に含めるのは問題だと、ISOにバッサリ斬られたけど。
529 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:22:30 ] ISOがタダシイ
530 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 19:11:49 ] C※にでもすればいいのに。
531 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 20:59:18 ] 左を向けば変態的な/CLI 右を向けば変態的な0x 振り返っても変態的なC++
532 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 21:01:04 ] >531 ウホッ! 最高だな(w
533 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:13:50 ] 変態の俺にピッタリだ。
534 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:31:05 ] おまいら、まだまだ子供だな。俺を満足させたかったら、MixedType を持ってこい CLI もネイティブも多重継承してやるぜ
535 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:49:09 ] MixedType ってなに? boost::any とか? boost::optional とか?
536 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:13:20 ] 混合型 ネイティブクラスがマネージ型のメンバを持ったり、 マネージクラスがネイティブクラスから派生したりするなど。
537 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:26:01 ] そうだ、M$がマネージドをネイティブに書き換えれば準備完了!
538 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:17:09 ] C++/CLI でも当然純粋仮想関数って認められているはずだよね? ネイティブのライブラリの中で、純粋仮想関数を持つ クラス X があるんだけど、そのライブラリを /clr なアプリから リンクすると X のインスタンスなんて一切生成しようと していないにもかかわらずリンカに怒られるんだよ。 なんでだろう。わかる人いる?
539 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:30:52 ] 人に聞くときゃ、エラーを出せよ
540 名前:538 mailto:sage [2007/10/03(水) 20:47:24 ] ごめん、C++/CLI とか全然関係なかった。 よく考えたらコンストラクタの中で巡り巡って 純粋仮想関数が呼び出されているところがあった。 コンストラクタの中で仮想関数を呼ぶようなコードは 実際には仮想関数テーブルを見に行くようなバイナリが 生成されるわけじゃなくて静的に解決された _thiscall を呼びに行くバイナリが生成されるわけだけど、 純粋仮想関数だとそれは定義されてないから リンカに怒られているだけだった。
541 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:05:05 ] そういうのは Init みたいな初期化関数を使うってのが C++ の定石だけど、 ちょっとカッコ悪いよね。
542 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 18:59:17 ] うんかっこわるい Initialize()でないと
543 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 13:18:06 ] C++/CLIって検索に引っ掛けにくいキーワードなので、 もっと、こう、いい名前を考えてやらないか? 記号を含まずに検索エンジンでインデックス化しやすく、 かつ独創的で他の言語とは差別化できそうな名前。 しかも人間にとっても発音しやすい名前。 俺は卑猥な名前しか思いつかない。
544 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 14:28:39 ] C++xCLI とか CLI++ とか?
545 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:08:34 ] C#ってのはどうだろ?
546 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:19:30 ] >545 巣に(・∀・)カエレ!!
547 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:37:04 ] VBってのはどうだろ?
548 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:44:20 ] VB から生まれしもの、元いたDLL地獄へ(・∀・)カエレ!!
549 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:55:36 ] 普通に検索できないか?
550 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 16:55:58 ] Googleでは C++/CLI で一単語として認識しているみたいだね。 Googleって形態素解析してないと思ったたんだけど、 いつの間にかリッチな辞書使ってるんだなぁ。
551 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 18:39:54 ] 昔はC#とかも検索できんかったけどな
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 さんの言うとおりの動きなのかな? とりあえず解決しましたー。ありがとです。