1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ!
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++は。
547 名前:デフォルトの名無しさん [2006/02/06(月) 20:49:30 ] 正直、記憶力がおいつかない。
548 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 20:55:37 ] でも、サービスパックも出てない VisualStudioを使うほどバカじゃなし。 MS製以外でコンパイル通るヤツってある?
549 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 23:39:31 ] >>548 無いよ。バカ
550 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 00:04:25 ] バカじゃん
551 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 01:01:12 ] おまえら、VS2005マジで使うの? バカじゃん。 すでに、MSはSP出荷を確約してるんだぞ。
552 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 01:44:04 ] >>551 じーっと枯れるのまってろこのうすらタコ!
553 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 02:14:49 ] >>548 VB6でも使っとけよ wwww
554 名前:デフォルトの名無しさん [2006/02/07(火) 02:41:12 ] >>552 N88 BASIC
555 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 10:21:32 ] バカが3匹。
556 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 10:51:33 ] Win32コンソールアプリケーションの int _tmain(int argc, _TCHAR* argv[]) は int main(int argc, char* argv[]) にしちゃいますけど。いいですよね?引数がアルファとかヌメリックなら。
557 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 11:32:34 ] 漏れは int main(const int argc, const char* const argv[])
558 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:00:33 ] >>557 そこまでいくなら戻り値もconstにしてはどうか?
559 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 13:21:59 ] >>558 参照返しじゃないから意味なし。
560 名前:558 mailto:sage [2006/02/07(火) 13:27:44 ] >>559 ああ、確かに意味は無いなw でも、argcもconstにしてるけど、これも意味が無いから、 それをさらに徹底させるって意味で返り値もconstにすればいいのにー っと思っただけ
561 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:04:04 ] argcの場合、意義はともかくプログラム上の意味が変わる。
562 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 14:21:19 ] うっかり書き換えるとコンパイラにゴルァされるとか
563 名前:558 mailto:sage [2006/02/07(火) 14:26:48 ] 確かに関数内では意味が変わる...か。 関数のオーバーロードでは同一視されるから一緒と思ってたけど、 内部の事は忘れてた。thanks
564 名前:デフォルトの名無しさん mailto:sage [2006/02/07(火) 15:01:05 ] >>558 お前素直な奴だな
565 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 00:54:04 ] そこでconst_castの登場だな
566 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 18:26:06 ] 全部ILで書こうぜ
567 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 19:24:23 ] 遅いからヤダよ。
568 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 01:52:44 ] STL/CLIお蔵入り
569 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 04:28:08 ] 固定長配列はcli::array以外に用意されてない?
570 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 11:58:31 ] >568 STL.NETは別途配布されるんじゃなかったの?
571 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 12:38:09 ] BOOST.NETも出たりとか。 正直大混乱。
572 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 13:44:43 ] 正直いってWinXPのSP2入れたくないからとかいう理由で SP1を使ってる馬鹿と同レベルの理屈だな 新しいものの方がいいに決まってる。たとえバグ込みでも 長い目で見れば将来性の高いほうを選択する方がよい
573 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 17:47:52 ] >>571 BOOST.NETって何?そんなんあんの?
574 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 22:47:44 ] >>572 その将来性のおかげで、君の部下が次々と止めていくんだがどう責任取るのかね?
575 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 21:58:53 ] 値型にデフォルトコンストラクタと代入演算子を定義できる .NET言語ってあるんかな?
576 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 22:01:31 ] フレームワーク内のprivateないくつかの構造体を見ると、 デフォルトコンストラクタ使ってるのがいくつかあるな。 Win32関係の構造体で自分のサイズを設定してるんだが。
577 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 22:20:02 ] >>575 つIL (ilasm) まぁぶっちゃけいらないっていうかあってもまずやっちゃいけないしな
578 名前:575 mailto:sage [2006/02/10(金) 23:53:50 ] >>576 ,577 どうも Reflectorでみてみたら staticコンストラクタで代用しているのはありました。 こんな感じで試してみようかな... ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=40822
579 名前:575 mailto:sage [2006/02/11(土) 01:08:41 ] やってみたけどよくわからんかった。でも templateの部分特殊化でCLI型が使えるみたいだから、それでcreateすればいいか. template <typename T> ref struct Type{ T create(); }; template <typename T> ref struct Type<T^>{ T^ create(); };
580 名前:デフォルトの名無しさん [2006/02/11(土) 07:51:31 ] C++ で boost の shared_ptr とか boost::program_options とか 使いまくりんぐのプログラム作ってきたんだけど、 C++/CLI でそのコード流用できるんですかね? stl::map とか使いまくりんぐノプログラムは そのままで動くのか、STL.NET みたいなモノをつかうように 移植しなけりゃならないのか、System::Collections を 使うのが C++/CLI 流なのか・・・・・・ 何でも出来るから何使えばいいか迷う。
581 名前:デフォルトの名無しさん [2006/02/11(土) 09:40:08 ] C++/CLIは便利だと思うが、棲み分けに失敗した感じがするな。 C#で統合するはずが、C++/CLIで統合されるとは…。 本当は.NET対応はC#だけでよかったんだと思う。
582 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 10:25:45 ] >>580 managedなobjectをどう扱いたいかによるだろ? 例えば数値計算してその結果を3Dグラフ表示するような場合、 数値計算の部分は普通にC++使えばいいけど、(例えばboostなど) 画面表示の部分はどうしてもCLIに頼らないといけない。 C++/CLIは基本的にC++の上位互換と考えていいから。 "spaced keyword"なんていうのは非互換だけどね。
583 名前:デフォルトの名無しさん [2006/02/11(土) 10:29:11 ] おまえら、どのエディション使ってるの?
584 名前:デフォルトの名無しさん [2006/02/11(土) 10:35:44 ] >>582 うむ、いっていることは分かる。 まさに数値計算して可視化、ってのは仕事で必要。 しかも膨大な数値計算用のライブラリ(自作+他作)がすでにある。 今一番の問題は、コマンドラインをパーすするために便利な boost::program_options を C++/CLI コンソールアプリでも 使いたいってことかな(笑
585 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 11:10:32 ] C++/CLIは、CLIに頼らなければいけない時だけ、 managedなコードを書かなければいけないC++だろ? embedded C++みたいに言語の機能抜かれているわけじゃないから。 ライブラリであるSTL .NETは、C#やHaskelからも使えるSTLライブラリとして、 C++特有のところは抜かれているけれど。(特殊化関連など)
586 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 11:11:09 ] >>585 > managedなコードを書かなければいけないC++だろ? managedなコードも書ける、とも言えるし。
587 名前:デフォルトの名無しさん [2006/02/11(土) 11:15:34 ] >>585 ふむ、いわれてみればそうだな。 俺があまりにも boost 依存なコードを書きすぎていただけだと思う。
588 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 15:56:27 ] >>581 いろんな言語が使用できるっていうのが.NETのうたい文句のひとつだったから C#だけって言うのはいただけない
589 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 16:22:28 ] 馬鹿はスルーしる
590 名前:デフォルトの名無しさん [2006/02/11(土) 16:26:50 ] .NETって実際複数言語で開発してたりすんの?
591 名前:デフォルトの名無しさん [2006/02/11(土) 16:48:36 ] >>590 俺はドトネトは C# しか使ってないけど、 俺が使ってるアセンブリが C++/CLI や VB.NET で作られているかどうかは知らない。
592 名前:デフォルトの名無しさん [2006/02/11(土) 16:53:16 ] VC++はVC++で作られていますという件はもはや過去のもの?
593 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:26:02 ] 「ドトネト」って言う呼び方はアンチっぽいからやめてくれ
594 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:31:18 ] エロビデオのネバスペみたいなもんか。
595 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 17:39:26 ] Win32APIなどのネイティブ呼び出しをC++/CLIでラップしてあとはC#で開発してる。 windows.h の関数や定数の定義をそのまま使える上にInteropで呼び出しも高速なので P/Invokeよりぜんぜんいいよ。 ドトネトよりポチネットのほうが可愛い
596 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 18:07:08 ] >>595 狂おしいほどに同意 アセンブリの中にネイティブコードを突っ込めるから 逆コンパイルにも対抗できるし。
597 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 20:57:49 ] そんなことしたら64bitでそのまま動かないじゃん
598 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 03:52:02 ] >>597 32bitで何か問題でも?
599 名前:デフォルトの名無しさん [2006/02/12(日) 16:51:41 ] C++/CLIがNativeとManagedの混合アプリを作るのに優秀なのは理解できるが、 /clr:safe なアプリをあえてC++/CLIで作ることに意味があるのだろうか。
600 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 17:37:42 ] >>599 特になし。C++/CLIはC++使い慣れてる(C++ライブラリを膨大に抱えてる)人を .NETに繋ぎとめておくためのもの。
601 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 21:00:01 ] 2003のWin32APIやMFCを2005ExpressEditionで使おうと 頑張ってみたが無理だった。 Win32APIはコンパイル通るけど警告出るし、 MFCに関しては全くお手上げ。
602 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 22:31:04 ] >>601 WinAPIは2003から持ってこなくても最新のPlatform SDKを入れればいいだろうに。
603 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:14:27 ] C++/CLIはVB.NETで作ったクラスライブラリを呼び出すことも可能?
604 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:33:15 ] 可
605 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:51:30 ] >>602 最新のSDK持ってきたら、警告なくなったよ。ありがと。
606 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 08:02:58 ] managed C++ みたいに C++/CLI もやっぱやーめたなんてことにはならんだろうな? 前者はなんか標準化団体には出されてたんだっけ?後者はだされてたよな?
607 名前:デフォルトの名無しさん [2006/02/13(月) 08:05:18 ] >>605 感謝は言葉ではなく物で示せ。
608 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 12:44:28 ] >606 今、ISO で標準化の審査中