1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ!
446 名前:デフォルトの名無しさん mailto:sage [2006/01/03(火) 00:10:51 ] event がないと AddListner やら RemoveListner を自前で実装せにゃならんのさ
447 名前:デフォルトの名無しさん mailto:sage [2006/01/03(火) 00:38:44 ] >>444 あー、イベントというものが根本的に分かってないんだろう。 メンバで表現されるものを他の言語と比較すりゃわかると思う。 CLRでのクラスメンバにもてるものはフィールド、メソッド、「プロパティ」、「イベント」なのよ。 後者二つがあることがいわゆるC#が「コンポーネント指向言語」っていわれる理由でも あり、ただのdelegateフィールドとは「まったく」別のもの。 こうやって特殊化したことによってTypeDescriptorやらで動的にコンポーネント情報を取得できる。 ちなみに 446 も言ってるが、イベントはフィールドとアクセサ(とメタデータ)でなるんだな。 public event EventHandler TextChanged; と書いたときに生成されるのは ・privateなdelegateフィールド ・publicなadd, removeアクセサメソッド。 ・イベントメタデータ を生成している。
448 名前:440 mailto:sage [2006/01/03(火) 00:42:44 ] >>446 delegateにも += や -= はあるです。
449 名前:440 mailto:sage [2006/01/03(火) 00:46:05 ] >>447さんありがとう 即答できないので、調べてみます。
450 名前:デフォルトの名無しさん mailto:sage [2006/01/03(火) 00:57:18 ] >>448 delegate をそのまま公開しちゃうと呼び出しが外から出来てしまうのが問題なのよ ここはC++/CLIのスレじゃ?
451 名前:デフォルトの名無しさん [2006/01/03(火) 14:54:46 ] .NETって使ったことないからよく分からないんだけど、 一度コンパイルしたものを、同じセキュリティーやらなんやらの設定の場合は キャッシュしておいたコンパイル済みのコードを再利用することって出来ないの? 毎回毎回、プロセス起動のたびにコンパイルしてるのってバカみたいじゃね?
452 名前:デフォルトの名無しさん mailto:sage [2006/01/03(火) 15:02:06 ] キャッシュされるしngenもあるし
453 名前:デフォルトの名無しさん mailto:sage [2006/01/03(火) 19:56:52 ] >>451 ってバカみたいじゃね?
454 名前:デフォルトの名無しさん mailto:sage [2006/01/04(水) 12:32:46 ] >>453 何だ、生意気だぞ。 (プンスカプン
455 名前:デフォルトの名無しさん mailto:sage [2006/01/07(土) 13:19:01 ] プログラムのあちこちから大量にアクセスする文字列型を、 いちいちUnicode文字の配列からgcnewするのはもったいないと思って あらかじめ生成しておいたSystem::Stringをグローバルに持つことで解決しようかと思いました。 が、普通にやったらコンパイラに怒られたので試行錯誤の結果以下のようにしてみました。 (StringDataはSystem::Stringを大量に生成して格納するクラス) StringData^* gpStringData; int main(array<System::String ^> ^args) { StringData^ stringData = gcnew StringData(); gpStringData = &stringData; (以下メイン処理) } もうちょっと行儀のよさげな方法ないですかね?
456 名前:デフォルトの名無しさん mailto:sage [2006/01/07(土) 13:55:09 ] こう? value struct StringData { initonly static String^ A = L"AAA"; initonly static String^ B = L"BBB"; initonly static String^ C = L"CCC"; }; int main() { String^ a = StringData::A; String^ b = StringData::B; return 0; }
457 名前:455 mailto:sage [2006/01/07(土) 13:56:25 ] ごめんこのへん↓参考にして自己解決 ttp://www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/ImpSingletonInCsharp.asp
458 名前:455 mailto:sage [2006/01/07(土) 14:07:15 ] >456 今回の場合は、こちらの方法のほうがよさげですね ありがとうございます
459 名前:デフォルトの名無しさん [2006/01/09(月) 01:03:13 ] 何というか、変態的というか。まぁ、それがC++の良さではあったわけ だけれど。これではあまりにもコンパイラベンダ泣かせだ…可哀想に。
460 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 07:55:52 ] C++/CLI をフルに実装できるコンパイラベンダって、 MS以外にあるのかね? とか思ってたら、 g++ が対応したらかなり驚く。 mcs と合体するとか。
461 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 12:07:26 ] すいません。質問があります。libpng.libなどを利用した昔のライブラリをC++/CLIで使おうとしたら、 コンパイル時に libpng.lib(pngerror.obj) : error LNK2019: 未解決の外部シンボル __iob が関数 _png_default_error で参照されました。 libpng.lib(pngrutil.obj) : error LNK2001: 外部シンボル "__iob" は未解決です。 とか言われました。C++/CLIって_iobが使えないんでしょうか? どなたか解決方法をご存じの方、教えてください。
462 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 14:18:44 ] Cの標準ライブラリlinkしてる?
463 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 14:32:49 ] ECMA-372ってISOになるときに内容が変更される可能性とかある? ECMAは規格書が公開されるからいいけどISOはショボーンだからさ。
464 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 14:57:32 ] 一応、mscoree.lib msvcrt.lib msvcrtd.libはリンクしています。 あと、重複とエラーがでるので、libcmt.libはリンク無視しています。 開発環境はVC++ 2005 Express+PlatFormSDKです。 Win32プロジェクトだとlibpng.libを含んでもコンパイルは通るのに、 CLRプロジェクト(C++/CLI)だとうまく行きません・・・ VC++ 2005のstdio.hに_iobが定義されていないのが問題なのでしょうか? (関係ないかもしれないけど)
465 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 17:50:19 ] libpngをソースから作り直したほうが早いよ。 zlibとlibpngのソースをDLしてdswとかslnとかを開いてビルドするだけ。 やったらWindows フォームアプリのプロジェクトに問題なく使えた。 ml.exeがVCExpressにはないので$(MSVS8)\VC\binにコピーしておくこと。
466 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 18:49:06 ] ありがとうございます! 試してみます。
467 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 20:48:36 ] >463 ECMA から ISO に回された仕様書はただで公開しているよ
468 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 21:05:35 ] >>467 へぇ、ありがとう
469 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 07:08:22 ] value struct B { literal System::String^ var = L"abcd"; literal System::String^ var2 = var+L"1212"; }; var2でエラーが出るんだが...だめなのか。(整数型intとかだと大丈夫だったんだけど...) リテラル データ メンバの初期化子は定数指揮でなければなりません
470 名前:デフォルトの名無しさん [2006/01/19(木) 07:57:19 ] literal System::String^ var2 = var + "1212"; は確かにエラーになるね。俺も今確かめてみた。 literal System::String^ var2 = "abcd" + "1212"; これでも同じエラーになる。結局は + 演算子を呼んでるからだろうな。 literal System::String^ var2 = "abcd" "1212"; ならエラーにならなかった。 というわけで、マクロ使え。ってことだと思う。
471 名前:469 mailto:sage [2006/01/19(木) 09:37:44 ] >>470 literal System::String^ var2 = var; でもだめみたい。 static ctorでの初期化が許容できるなら literal -> static initonly に変更するか、マクロにするしかないですね... msdn2.microsoft.com/en-us/library/5yzft952 (en-US,VS.80).aspx
472 名前:デフォルトの名無しさん [2006/01/19(木) 11:48:55 ] ふむぅ initonly なんてのもあるのか。 ところで、Visual Studio 2005 いじってて思ったんだけど、 C# に比べりゃリファクタリングなんかの点で C++/CLI は扱いにくいと思うんだよ。 なのでほとんどの部分は C# でかいてるんだけど、 どうしても C++/CLI で書きたい部分もある。 C++/CLI で書いたコードと C# で書いたコードの 相互連携って可能なのかな? 具体的には、技術関連の計算をやるC++の自作ライブラリ、 結構大規模なモノがすでにある。GUI をつけるために 今までは計算結果をバイナリファイルに落として、 それを C# で作った可視化ツールで読み込んでた。 だけどインタラクティブにしたいんで C++/CLI 使えば いいかなと思ったんだが、今まで C# で作ったGUI部分と C++で書いた計算部分は C++/CLI で結婚できるのかと。
473 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 12:08:38 ] C++の計算用DLLをC#から使えばいいだけじゃん
474 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 12:12:25 ] >>472 今までは C++ -> COM経由 -> C# これからは C++ -> C++/CLI .NETでは C++/CLI <=>C#
475 名前:デフォルトの名無しさん [2006/01/19(木) 12:18:13 ] >>473 C++な計算ライブラリの方は、クラスへの参照を 受け取って処理結果をその中に返すんですが、それでも 可ですか?ソース提供が基本のライブラリだったんで、 DLL化とかはしてなかったんですが、試してみます。
476 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 12:26:53 ] >>475 refタイプでない普通のクラスはrefクラスでラップする必要がある。ダイレクトには渡せない。
477 名前:デフォルトの名無しさん mailto:sage [2006/01/19(木) 13:41:47 ] >クラスへの参照を受け取って処理結果をその中に返す 可能だろ。
478 名前:デフォルトの名無しさん mailto:sage [2006/01/22(日) 14:20:10 ] 参照クラスを値クラスに変換する template等は用意されているのでしょうか?
479 名前:デフォルトの名無しさん mailto:sage [2006/01/26(木) 10:52:47 ] キイタ?( ゚д゚)オクサン(゚д゚ )アラヤダワァ
480 名前:デフォルトの名無しさん [2006/01/29(日) 18:09:11 ] C++/CLI が次の VS まで生き残ってるか、かなり不安。 とはいえ、C++/CLI を結構使ってるけど。
481 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 19:45:25 ] C#→C++への変換ってできんの?
482 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 19:50:24 ] そりゃいくら何でも無理だろ。
483 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 20:27:13 ] >>481 コンパイル→.net reflector
484 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 21:01:45 ] cli_class<T>::m_member' : 指定されたメンバは初期化できません。 というエラーが出るのですが、m_memberをコピーするにはどうしたらいいのでしょうか? generic <typename T> ref struct cli_class { T m_member; cli_class(const cli_class% n) :m_member(n.m_member) //error {} };
485 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 23:25:35 ] generic <typename T> where T : System::ICloneable ref struct cli_class { T m_member; cli_class(const cli_class% n) //:m_member(n.m_member) //error { if ( n.m_member != nullptr ) m_member = safe_cast<T>(n.m_member->Clone()); } }; こうかな?自信ないけど。
486 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 11:48:01 ] 二項演算子で単項で使われていなかったものオンパレードですね
487 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 13:02:57 ] cli_class が確定してなくね? generic <typename T> ref struct cli_class { T m_member; cli_class() {} cli_class(cli_class<T>% n) :m_member(n.m_member) //error {} }; const 付けると、型パラメータも影響を受けてキャストできなくなるから const 外した
488 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 17:35:17 ] GCC の仲間に C++/CLI コンパイラが仲間入りする日が いつかやってくると思う人、いる?
489 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 17:51:54 ] ノシ Java もコンパイルできてるんだから、CLI抜きでやっちゃいそうな気がする
490 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 18:02:27 ] >>489 おまい、それ普通のgcc。
491 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 18:09:14 ] mingwで構造化例外って実装されてるの?
492 名前:484 mailto:sage [2006/01/31(火) 18:49:53 ] >>487 なるほどconstはずしたらできました。 ありがとうございました。
493 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 19:34:10 ] >490 ああ、実行エンジン無しで作っちゃいそうな気がするってこと
494 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 00:17:29 ] CLRのこと?
495 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 06:59:47 ] ランタイムはコンパイラコレクションが 提供しなくてもいいんじゃない?
496 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 08:47:44 ] GCC で CIL を出力するだけじゃ意味がないから、exe を実行するときバインドするの実行 エンジンはCLR か mono に頼るの?
497 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 09:02:05 ] >>496 そうなるだろうなぁ。 mono の mcs の方が C++/CLI コンパイルできるように・・・ ならないだろうな。 mono ではすでに ASP.NET はいい感じで動いてるんだったっけ? Java の牙城をちょっとは切り崩すことが出来る、のかな? って、Webアプリケーションは PHP でしか書いたこと無いんだけど。
498 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 09:55:46 ] monoって実行ファイル起動時に外部エンジンにアタッチしてやりとりできるいい仕組みって ある? Java の JNI で C/C++ から VM 叩くようなヤシ
499 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:32:17 ] DLL の呼び出しと同じ仕組みが使えた気がする。 以前、コンソールアプリをポータブルに作ろうと思って、 ncurses ライブラリを使って C# コンソールアプリを作った。 ncurses の DLL を C# から呼び出すようにして。 それは Visual Studio .NET 2003 で作成。 で、ncurses の共有ライブラリが入ってる Debian に、 VS でコンパイルした *.exe をそのまま持って行って、 何も考えずに mono で実行したらちゃんと libncurses.so とかその辺をダイナミックリンクしてくれてあっさり動いた。
500 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:34:03 ] pc5.2ch.net/test/read.cgi/tech/1020215602/21 の兄弟の片割れが漏れなんだが(もう一人は誰か知らん) その詳細なリポートを書いた mono の前スレが見れん。
501 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:34:53 ] それはそうと、JNIって「C/C++ から VM 叩くようなヤシ」か? 漏れ JNI は使ったことないんだけど、逆じゃね?
502 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:38:03 ] つーわけで、CLI からは DLL と同じように so が呼び出せると思う。 かなりオープンというか、なんというか・・・
503 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 10:59:04 ] 連投ごめん。リンク間違えた。 pc8.2ch.net/test/read.cgi/tech/1100616350/21 ね。
504 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 13:05:25 ] >501 JNI は Java からの C 呼び出しと、C/C++ からの JVM 呼び出しの両方を規定してるお
505 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 13:14:26 ] >>501 お、そうか。スマンコ ネイティブコードからの呼び出しは正直シランコ
506 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 09:47:25 ] ええっと、長年Cオンリーでやってきたロートルなんですが、 新しい(?)ポインタの^に関して、詳しく解説した書籍とかありませんでしょうか? char型の文字列は 文字が1文字ずつ入っていって、最後が\0になっているという、 アセンブラレベルからするととてもわかりやすいものだったのですが、 String^ s = "0123456789" が、メモリ上にどの用に格納されるのか さらに、この文字列に対して、 char c,*p ; p=s; c = *(p+10); といった、従来のメモリ上のキッタハッタが出来なくなってきているのは、どういう仕組みなのか を理解したいのですが。
507 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 10:18:32 ] managedなだけよ
508 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 10:43:00 ] >>506 JavaやLispやCLIの実行環境がどうなっているか調べろ。
509 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 12:53:41 ] >>508 それを詳しく解説した書籍とかを訊いてんだよ、ボケが。
510 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 13:02:48 ] そんな怒らないでよ(w これ読みなよ、日本語はいいのがないから。 Shared Source Cli Essentials www.amazon.co.jp/exec/obidos/ASIN/059600351X/
511 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 15:55:01 ] >>506 C++のclassは理解してますか? class objectを指すポインタと思えばよいかと。
512 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 19:54:02 ] template引数を使おうとしたらエラーが出るのですが、何がいけないのでしょうか? ref struct F{//FNの引数にしようかなと int operator()(int a){return a;} }; generic <typename FN> ref struct Fn{ void test(){ FN fn; fn.operator ()(100);// : error C2039: '()' : 'System::Object' のメンバではありません。 } };
513 名前:512 mailto:sage [2006/02/03(金) 20:13:31 ] generic -> template にしたら通りました。 generic の typename は Object前提になるのかな
514 名前:512 mailto:sage [2006/02/03(金) 20:24:11 ] Reflectorでみてみたら generic で宣言した方はパラーメータが残ってた、 class_name<T> TはObjectを想定してるので、パラメータが残せてるんかな... templateの方はパラメータが固定されてた -> class_name<int>
515 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 23:42:54 ] 単に、マネージドとネイティブの混合型になるから駄目なだけ
516 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 23:44:42 ] >515 は違った。genericsは背景型が System::Object型であることを前提としており、 コンパイル時では閉じない限り、型が確定しない そこら辺が、文字列置き換えの template とは性質が違う
517 名前:512 mailto:sage [2006/02/04(土) 02:33:08 ] >>516 なるほどなっとくしました。 ありがとうございました。 System::Collections::Generic::IEnumerator<T> などでcovariant return valueが発生したときはどうしたらいいん...orz
518 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 02:45:42 ] つーか、512よ。インターフェイスで拘束されているわけでもない不定の FN 型の fn のメソッドが呼び出せるわけないだろ? >517 は具体的な例でしてくれないと状況がわからん
519 名前:512 mailto:sage [2006/02/04(土) 13:45:57 ] >>518 すいません。ファンクタのconvariantなケースでなくて、 C++/CLIで一般に遭遇した場合という意味です。 以下のような感じでやってみたのですが、インターフェイスの実装ができませんでした。 他言語だとどうなるのか調べんとだめかな... //NG typedef String^ MyType; typedef System::Collections::Generic::IEnumerator<MyType> MyEnumeratorType; typedef System::Collections::Generic::IEnumerable<MyType> MyEnumerableType; //OK //typedef Object^ MyType; //typedef System::Collections::IEnumerator MyEnumeratorType; //typedef System::Collections::IEnumerable MyEnumerableType; ref struct MyTest :public MyEnumerableType { ref struct MyEnumerator : public MyEnumeratorType { virtual property MyType Current { MyType get () { return nullptr; } } virtual bool MoveNext(){ return false; } virtual void Reset(){} }; virtual MyEnumeratorType^ GetEnumerator() { return gcnew MyEnumerator();} };
520 名前:519 mailto:sage [2006/02/04(土) 15:03:57 ] private: virtual Object^ System::Collections::IEnumerator::Current { Object^ get() sealed {return nullptr;} } という風にC#を真似てみたけどだめみたいでした。 以下はC#でのサンプル class MyTest :System.Collections.Generic.IEnumerable<string> { class MyEnumerator :System.Collections.Generic.IEnumerator<string> { public virtual string Current { get { return null; } } public virtual bool MoveNext(){ return false; } public virtual void Reset(){} public virtual void Dispose(){} object System.Collections.IEnumerator.Current { get { return null; } } }; public virtual System.Collections.Generic.IEnumerator<string> GetEnumerator(){ return new MyEnumerator();} System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return new MyEnumerator(); } };
521 名前:519 mailto:sage [2006/02/04(土) 16:15:08 ] covariant return value の場合、2段階で実装すればなんとか可能でした。 ref struct MyTestBase :public System::Collections::IEnumerable { ref struct MyEnumeratorBase :public System::Collections::IEnumerator { virtual property Object^ Current { Object^ get () { return nullptr; } } virtual bool MoveNext(){ return false; } virtual void Reset(){} }; virtual System::Collections::IEnumerator^ GetEnumerator() { return gcnew MyEnumeratorBase();} }; ref struct MyTest :public MyTestBase,System::Collections::Generic::IEnumerable<String^> { ref struct MyEnumerator:public MyEnumeratorBase,public System::Collections::Generic::IEnumerator<String^> { virtual property String^ Current { String^ get() new {return nullptr;} } virtual ~MyEnumerator(){} }; virtual System::Collections::Generic::IEnumerator<String^>^ GetEnumerator() new {return gcnew MyEnumerator();} };
522 名前:デフォルトの名無しさん [2006/02/04(土) 18:01:17 ] managed C++ やろうぜ!! 002 ttp://pc8.2ch.net/test/read.cgi/tech/1139043535/l50
523 名前:デフォルトの名無しさん [2006/02/04(土) 18:07:52 ] ref classのメソッドでEnumWindowsを使おうとしてます コールバック関数をクラスのメソッド、LPARAMをこのクラスのポインタとしたいのですが いい方法はありますでしょうか?
524 名前:519 mailto:sage [2006/02/04(土) 21:59:53 ] 値型だとインターフェイスからしか派生できないから 521の手法使えないね...orz 値型なら Type<int,Type<int,int> >と記述できたのに Type<int,Type<int,int>^ > または Type<int,Type<int,int>^ >^ とするしかないか...orz
525 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 22:31:14 ] >>523 P/Invokeの場合にはcallbackにはdelegateを使うんだっけな。 C++/CLIの場合はコールバック用のクラスとメソッドは普通のclassで作って ref classに包含したほうが楽だ。
526 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 22:33:29 ] >523 過去ログにがいしゅつ
527 名前:523 mailto:sage [2006/02/04(土) 23:47:58 ] >>525 ありがとうございます チャレンジしてみます。
528 名前:523 mailto:sage [2006/02/05(日) 02:31:27 ] delegateとコールバックで検索したら見つかりました www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingcallbackfunctions.asp
529 名前:デフォルトの名無しさん mailto:sage [2006/02/05(日) 19:43:18 ] generic parameterからgcnewできないと思ったら new制約なんてあったんだね。 C#にあるみたいなんで試してみたらできたよ。 generic <typename T>where T : gcnew() ref class A {A(){ T t = gcnew T();}};
530 名前:デフォルトの名無しさん [2006/02/05(日) 23:48:54 ] System.Windows.Forms.ShowDialog()をした時にタスクバーに Windowが追加されちゃいます タスクバーに出てこない方法ってりますか?
531 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 00:31:03 ] >>530 ShowInTaskbar
532 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 01:08:43 ] >>531 さんくす!
533 名前:デフォルトの名無しさん [2006/02/06(月) 01:41:27 ] C++プログラマーには二種類いるわけ。 C++をベターCとして使う人とC++の機能を目一杯使う人。 俺はベターC派なんだな。 C++の機能は必要最小限しか使わない。 特に枯れてない最新技術はまず使わない。 そして必ずGCをかます。 これは俺というよりも会社の方針なんだわ。 実の所、C++を完璧に使いこなせるPGはほとんどいない。 皆、言語の一角に住み着いてプログラミングする。 これが大規模な開発になるとデスマの原因になるんだな。 デスマを防ぐためにあえて制限を設ける。 俺は会社の方針は正しいと思っている。
534 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 03:45:59 ] C++/CLIだと値クラスのプロパティとインデクサををref化できるね。 C#ではやり方が悪いのかできなかった。言語思想が違うためだろうか これができないとインデクサで変更を扱う値型のコンテナが作れない気がするんだが... value struct Val{int val;}; value struct Test { void test(){ Test test;test[100].myt.val=200;Console::WriteLine(test.myt.val); } Val myt; property Val% default[int]{ Val% get(int index){ return myt; } } };
535 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 09:34:19 ] sage
536 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 12:59:49 ] Equals を使うな。使う事を推奨するな。 www.ailight.jp/blog/kazuk/archive/2006/01/31/11043.as ...
537 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 15:53:01 ] >>536 リンク修正 www.ailight.jp/blog/kazuk/archive/2006/01/31/11043.aspx www.ailight.jp/blog/kazuk/archive/2006/02/01.aspx
538 名前:デフォルトの名無しさん [2006/02/06(月) 16:16:06 ] ようするにさらし上げ?
539 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 17:05:29 ] >>534 setするほうのプロパティを作ればよいだけではないのか?
540 名前:534 mailto:sage [2006/02/06(月) 19:13:17 ] >>539 それだとプロパティへの代入はできるけど、プロパティを介する変更ができないと思う。 Val%をValに変更してsetをつけても、test[100].val=200;だと変更できない Val tmp;tmp.val=200; test[100]=tmp; なら変更可能だけど... 問題なさそうで問題あるケース generic <typename T1,typename T2> value struct M {T2 myt; property T2% default[T1]{ T2% get(T1 t1) { return myt; } void set(T1 t1,T2% val){myt = val;}} }; T2%だと M<int,M<int,int>> m; int i=100; m[100][100]=i; //と書ける //ただ変数にしないといけない難点が... T2だと m[100][100]=100;と書けるが変更できない
541 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 19:53:28 ] 海外の大御所がある雑誌で言った。 「私はもう二度と .Net の記事を書かない。」 マイクロソフトにだまされてる奴ら、お疲れ。
542 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:05:34 ] >>541 大御所が誰だか教えて
543 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:13:56 ] プラウガもC++/CLIやってるけどな。 www.dinkumware.com/ やつらはVC++用ライブラリにたずさわっているし、 C++/CLIはEMCAの標準化に関与しているから。 まあC++/CLIはいい言語拡張と思わないけれど、 managed C++の将来のなさには流石に脱帽。
544 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:33:14 ] 将来も何もmanaged C++はC++/CLIまでの暫定版なんだから、 managed C++の将来はC++/CLIじゃないか。 managed C++は OldSyntaxだべさ。
545 名前:デフォルトの名無しさん [2006/02/06(月) 20:39:32 ] どれかひとつ選ばなければならないとしたら不本意ながらC++/CLIを選ぶしかないわな。
546 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:46:22 ] レヴューリリースだわな、managed C++は。