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
91 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 19:36:55 ] あの ISO の論議は宗教戦争だよ C++ だって C とは完全互換性がなくて非互換性の項目作ってるのに、C++/CLI は完全互換じゃ ないから C++ の名前を使うな、なんて、馬鹿馬鹿しい
92 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 19:51:22 ] C++#にするしかないのか
93 名前:86 mailto:sage [2006/04/24(月) 20:17:12 ] >>90 逆。 CとC++で起きた災いのことだ。
94 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 01:16:21 ] >>91 んなーことはない。互換のない箇所があまりにも C++ を越えてるからな。 誰もが、「C++であれは不味いよ」という実装。 C++の名前は使ってもいいが、正直、ISOにはなって欲しくない。
95 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 05:32:35 ] そうか? 文字列互換性なんて C++ の不始末を便利にしたとこを駄目だとか騒いでるぐらいじゃね MSのサイトの記述にけちつけて、こいつら営利企業に何求めてるんだ、とか思っちゃったけどな
96 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 08:02:46 ] 論争ってなんのことかよく知らないんだけど、 名前に C++ が入ってるのがまずいダロってことになってんの? まぁ確かにもう少し検索エンジンフレンドリーな名前でもいいかもって気はする。
97 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 09:42:19 ] ま、どっちにせよ、 Windowsのネーミングからはじまり、 J++、J#、managed C++、STL.NETとか、 一般的なものを汚し杉。
98 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 09:59:29 ] そんな、汚すだなんて Java の信者じゃないんだから(w Bjarne Stroustrup のFAQになってるところがワラタ ttp://www.research.att.com/~bs/bs_faq.html#CppCLI ISO UK が強硬に反対していて、その下に ECMA からの回答書も公開されている ECMA じゃ C++/CLI と C++0x にどうやって巻き込まれないようにするかの調査も 始めてるってさ
99 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 10:06:02 ] ECMA の回答書の最後に、おまいらががたがた言おうともう ECMA 標準であることに代わりは ねえんだよ、って答えてるとこが笑える
100 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 10:43:04 ] C/C++系を汚すなんて汚杉。 VC++が吐き出すMFCコードからして何語?って感じだった。 ユーザーに変なもん使わせながらM$は別のクラスライブラリ使ってるらしいし。
101 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 15:28:25 ] 関係ないがアンダーバーつきまくりの変な修飾子はもう見たくないと思った。
102 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 15:52:08 ] こうやってC++をぐだぐだにすることで、 C#の地位を着々と上げていく作戦なんだな。
103 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 17:10:51 ] 何言ってるんだ。 C++/CLI が出てきたせいで、C# がその存在意義を問われてしまったのに
104 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 17:41:48 ] でも、現場では「C++/CLI」と「C++」を完全に切り分けないと仕事にならんのも事実。 ISOにする前に、Mac用の C++/CLIでも出してから言ってくれ、という気分だ。 >>100 おまえさん、そんなこと言ったら、COBAとかCOBA真似 IIS C++ソースなんて見たら目がつぶれるぞ。 MFCなんかは、独自仕様として実装されてるからいいよ。アンダーバー定義でその世界だけで収まってるからな。 しかし、今回の C++/CLI での文字列の扱いはそんなレベルじゃないだろ。 C++の延長線上に C++/CLI があるような ISO 化は止めて欲しいってこった。 C#の存在意義なんて、海外では数年前からいわれてんのに、今頃何言ってンのよ。
105 名前:100 mailto:sage [2006/04/25(火) 19:08:19 ] >おまえさん、そんなこと言ったら、COBAとかCOBA真似 IIS C++ソースなんて見たら目がつぶれるぞ。 見たい。URL教えれ。 >C++の延長線上に C++/CLI があるような ISO 化は止めて欲しいってこった。 なるほど、ISO化が嫌われてるのね。 >C#の存在意義なんて、海外では数年前からいわれてんのに、今頃何言ってンのよ。 知らなかった。KWSK
106 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 19:50:18 ] >>105 >見たい。URL教えれ。 断る。 comのプログラムを探れ。corbaを参考に ActiveX, COM, DCOMをつくり、その開発メンバーがIISに流れた。 後は自分で探せ。 >なるほど、ISO化が嫌われてるのね。 C++という名前を使うな、という気持ちも理解できるが…、ISOにする必要性は全くない。 MS以外誰も望んでいないからな。 >知らなかった。KWSK C#を初めとして、その他の多くが失敗したから、「ユーザの望むモノを提供していないンだよ、ボケ社員ども」と方針転換した話は有名。 Vistaで乗るバッチプログラムだって、初めは新しい言語だったのにひっこめて全部作り直す。 そのとき、名言。「すみません。Perl風に作り替えます。」 MSは既に梶を切ってるのに、古い方針の独善的な仕様でISO化してどうするよ。
107 名前:100 mailto:sage [2006/04/25(火) 20:01:59 ] >>106 おもしろい情報一杯持ってるね。そういう情報好き。 >comのプログラムを探れ。corbaを参考に ActiveX, COM, DCOMをつくり、その開発メンバーがIISに流れた。 こういうの面白い。さらにCOMのトンデモ文法で作ったM$のアプリサーバなんて装飾子があったら爆笑。 >C#を初めとして、その他の多くが失敗したから、「ユーザの望むモノを提供していないンだよ、ボケ社員ども」と方針転換した話は有名。 方向転換したのはゲイツ氏? Longhorn@マネージド→Vistaの方向転換のこと? >Vistaで乗るバッチプログラムだって、初めは新しい言語だったのにひっこめて全部作り直す。 あの、WinFXスレでマンセーされてたシェル言語?スゲ
108 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 21:23:31 ] 自演乙
109 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 00:58:33 ] >>107 だから、corbaを元にしたと言ってるのによ。おかげでIISとC++で組むのは無駄に知識が必要だったりするわけだが。 DON BOXとかsoapに絡んでるから余計に…。 .Netで楽にはなったらしいが。 方向転換したのはゲイツメールじゃない。10年前か!?はゲイツだったけどね。 たしか、そんなに古株じゃないヘッドハンティングされてきた人物だったはず。 方針転換はな、いま口癖のように言ってる Live って奴だ。MSは毎日かかさず Live関連の新機能を発表してるって知ってたか? まあ、何でもかんでも Live と言ってるって事だけどさ。 とにかく、4/1にエイプリルフールでLiveネタででたジョークでは。shellで ls うつと、存在するファイル名に対応した広告が ファイル一覧と共に表示される。という奴だった。 マネージド -> Vista なんていう程度の石頭じゃ、これからの10年食っていけないぞ?
110 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:10:43 ] レイオジーのこと? 俺はなんだかんだ言っても最後は.NETに落ち着くと思うけどな。 エイプリルフールネタはおもしろい。
111 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 08:49:41 ] >俺はなんだかんだ言っても最後は.NETに落ち着くと思うけどな。 いや、M$がドトネトに決定するかもしれんが、落ち着いたことは過去一度も無いお。 DDE(Win3.1or3.0 1993) ↓ NET DDE (Win3.1 1994) ↓ 埋め込みしたいなぁ... ↓ OLE1.0(DDE使用) ↓ OLE2.0=COM ただし目的はインプレースドキュメント。しかしその背景には本質としてバイナリオブジェクト標準あんどオブジェクト通信の思想あり。この辺で名慮or迷著 InsideOLEあんどIsideOLE2。死者多数。 部品としてVB用のVBX (VB2.0からVB4.0 1995あたり) ↓ COMを使ったOCX (1996あたり)結局コンポーネントビジネスはやんなかったな... ゲイツがインターネットに熱上げあんどJAVA Appletはやる (1995) ↓ COMつかってActiveX(1996) だんだんオブジェクトはやってくる。 (UMLなど1997)オブジェクトもでるとしてCOMの宣伝開始 DCOMなどCORBAとがっぷり。この辺でMTSではじめ ↓ マーケティングてきなWindowsDNA 。MTS2.0それなりに使えそう。つか使った。DCOM糞。(1999) ↓ COM+ (Win2000、2000)In-MemoryDBどこいったゴラァ COM Runtimeの情報漏れ始め (2000〜) ↓ セキュリティ→ファイアーウォールのためCOM全滅。しばらくしてから.NETとしてCOMじゃないものに... ↓ .NET流行らず(〜2006) ↓ WinFX完成(2007) ↓ オブジェクトベースプログラミングにより、OSは関数コールに戻る(2008) WinFX下位互換へ
112 名前:デフォルトの名無しさん [2006/04/26(水) 13:23:51 ] LiveってWinモンリー?
113 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 11:50:51 ] CLR_OR_THIS_CALL
114 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 19:07:00 ] ネイティブとかマネージとかアンマネージとか値とか参照とか ややこしいっつーの
115 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 20:16:13 ] C#書いてるときに比べてC++/CLI だと IDE が明らかに遅いんだけど。。。 ボタンを設置してダブルクリックして、イベントハンドラのスケルトンができるまでが明らかに遅い。
116 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 22:07:38 ] パソコン買い換えろよ。ボロイのいつまで使ってんだよ。
117 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 22:24:27 ] 買い換えても、遅いモノは遅いぞ。相対的なものだからな。
118 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 22:45:13 ] まあ、十分に早くなれば差に意味が無くなるだろう ……ネイティブとCLIの縮図のようだ
119 名前:デフォルトの名無しさん mailto:sage [2006/05/15(月) 20:37:12 ] System::Runtime::InteropServices::PARAMFLAG::Outって何? System::Runtime::InteropServices::OutAttributeに変えてもいいの?
120 名前:ヽ(゚∀。)ノうぇね ◆xOFicusMP. mailto:sage [2006/05/19(金) 23:03:00 ] ECMAから公開許可をもらったぜ 消す必要はなくなったから、安心してくり
121 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 07:40:11 ] >>120 おお、めちゃ乙。
122 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 11:58:59 ] ECMAって心が広いんだね
123 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 14:20:07 ] ちがうよ、必死なんだヨ。
124 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 13:29:20 ] STL.NETどこイっちゃたの?
125 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 14:05:47 ] 思いつきで適当なもん作ってはお蔵入り
126 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 14:12:41 ] 今はSTL/CLIだよね。 出てもJavaの新しいcollectionみたいな仕様のクラスライブラリで、 method等の名前がSTL風になっているだけだろうけど。 STLはC++の言語仕様にかなり依存しているから。 なんにしてもそれどころじゃないみたい。 blogs.msdn.com/nikolad/archive/2006/02/07/527193.aspx
127 名前:126 mailto:sage [2006/06/12(月) 08:21:10 ] しかし、すげー、過疎スレだなw
128 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 20:33:44 ] 話題がないのにだらだらだべるなんて苦痛だからね 正直、STL/CLI は C++/CLI にとって不要な要素だと思ってる 作るだけ、無駄。だから、あまり力を入れていないのは正解じゃないかな
129 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 21:06:52 ] そうだなあ。 ManagedなobjectをSTLで扱う時のTIPSでいいかな。
130 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 23:35:16 ] コンテナ程度の対応をするより、0x への対応をしっかりとやって欲しいのですよ それらの要素をどう C++/CLI に持ち込むかの方が重要だと思う
131 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 16:02:04 ] System.Collections.Generics.Listのイテレータを作ってみたことがあるんだ。 最初はそのイテレータも参照型にしたんだけど、Visual C++付属の<algorithm>の関数は、 デバッグ用か何かの仕掛けがあって、ネイティブ型しか受け付けてくれなかった。 結局そのイテレータに対するネイティブ型のラッパを作ってやったんだ。 逆に言えばマネージ型のイテレータがVC++付属の標準ライブラリで使えれば、 STL/CLIなんてなくても自分たちで勝手にイテレータを作ったりして使うことは容易だと思う。
132 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 01:03:26 ] 素直に混合型を実現してマネージドとネイティブを継承した型を使えばと・・・
133 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 10:39:54 ] それ、ふつーのネイティブ。
134 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:36:31 ] 実践C++/CLI ttp://www.amazon.co.jp/gp/product/4797336277/249-7078532-9380326?v=glance&n=465392 を買った人いる? どんな感じ?
135 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 07:53:18 ] 本屋で立ち読みしてみるのが一番手っ取り早いかと
136 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 22:51:53 ] 手っ取り早いどころか、立ち読みしてから買わないと危険な香りがするな。
137 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:43:47 ] 立ち読みした。実践じゃなくて、実際だな。内容的には。 本の後半で、Visual Studioのダイアログでの指定方法とか書かれてる。 つーか、最近、ソフトバンククリエイティブの本はタイトル詐欺が多すぎ。 噂の真相うんちゃらかんちゃらも、タイトル買いしたら内容は単なる手記だったしよ。
138 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 12:51:24 ] 表紙だけ素晴らしくて内容がウンコなエロ同人誌みたいなもんか
139 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 13:18:39 ] 買って読んだが、ちと微妙なできだな C++/CLI に踏み込んだ記述は少なく、既存の VC++ の開発者向けに .net を使うための チップス集といった感じだった 記述するべき知識が広範囲すぎて、なるべくいろいろ網羅しようとがんばっているのは 感じたが、前提知識があるものと記述されている部分が多くて、これはさらりと書かれている 部分がわからないのでは、と疑問に感じた
140 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 13:43:06 ] >>137 > 最近 笑うところ?
141 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 13:17:19 ] ページ数が少なすぎるね
142 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 00:28:01 ] C++/CLI 気に入ったんだが、リファクタリングできないのがつらいなぁ。
143 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 02:07:36 ] デバッグでトレースが重いのが致命的だよ・
144 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 05:00:40 ] .NETと無縁の仕事ばかりやってたので思いつきでCLIでもやって みようと思って買ってみたよ。 ダイヤモンド継承の問題点とかでてきてちょっとなえるが、まあ もうちょっと読んでみるよ。 Win32と.NETが同時に使えるのはツールとかちょっと作るのには 便利なのかなあくらいに思ってるよ。製品開発に使えるとはまだ ちょっと思えないけど。。
145 名前:デフォルトの名無しさん mailto:sage [2006/07/27(木) 04:12:28 ] >>144 去年、C#の案件をやったんだが「ああ、あの時C++/CLIが出てればなぁ」とは思う。
146 名前:デフォルトの名無しさん mailto:age [2006/07/31(月) 20:51:05 ] これ読んだ人いる? ttp://www.amazon.com/gp/product/1590596404/ref=sr_11_1/104-8510614-7138345?ie=UTF8
147 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 10:00:59 ] >>145 C++ > (壁) > C丼 ということ?
148 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 19:12:10 ] >>147 ヒント:DllImport 今は逆にC++(ただしネイティブ)の案件やってるが「これがC#だったらもっと楽なのに」と思いながらコード書いてる。
149 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 20:31:57 ] BStrWrapper ってどうやって使うんでしょうか? ググっても、ひっかかりもしねぇっす。
150 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 16:31:51 ] こんにちは。質問です。 VC++EE使ってます。 system以下のライブラリを網羅したページってないですか? C#やVBで解説されててもかまわないのでどこかご存知ありませんか?
151 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 16:50:50 ] MSDN
152 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 17:51:19 ] 検索で引っかからなかったけど、MSDN普通にもぐってったらあった。OTL なんでMFCなのかわからんけど、見つかってよかった。 ttp://msdn2.microsoft.com/ja-jp/library/ms306608.aspx
153 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 00:00:25 ] >>152 >MSDN ライブラリ > .NET 開発 > .NET Framework SDK > MFC リファレンス うは、ほんとだwww
154 名前:ヽ(゚∀。)ノうぇね ◆xOFicusMP. mailto:sage [2006/08/26(土) 23:01:19 ] あまり使ってる人もいないんだろうけど、ごめん、鯖が消えてた(´・ω・`) 引っ越したので、こちらを参照してください ECMA-372仕様書 ttp://mdjowbnb.sv05.fsdotnet.net/ecma372/StartingState.aspx
155 名前:デフォルトの名無しさん mailto:sage [2006/08/27(日) 17:51:15 ] >>154 乙です。お世話になってます。
156 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 18:17:53 ] C++/CLI で作ったクラスライブラリって、CLR Profiler 通る? CLR Profiler いつも落ちるんだけど。
157 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:40:07 ] /clr:pure 状態でも?
158 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 11:33:09 ] /clrでコンパイルしたときにアンマネージコードの生成が 『〜〜用にネイティブ コードの生成が発生します』 と自動的に適用される場合と、 『この関数はマネージとしてコンパイルできません。#pragma をアンマネージで使用してください』 と明示しなければエラーになる場合があるんだけど、 両者の違いって分る人居ますか?
159 名前:デフォルトの名無しさん [2006/09/14(木) 00:40:15 ] ISOは賢明な判断をしたな
160 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 01:05:14 ] >>159 くわしく。
161 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:25:11 ] これか ttp://blogs.wankuma.com/episteme/archive/2006/09/12/38394.aspx
162 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:27:22 ] これかな? www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42926
163 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:31:29 ] 間違えた orz www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=43913&scopelist=PROGRAMME
164 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:52:40 ] ま、駄目だった物は駄目、ということで
165 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 09:03:55 ] まあ駄目で当然という気がする。 仕様が汚すぎる。上位互換じゃないのも(C++を名乗るには)問題。
166 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 13:57:57 ] ちょっとホッとした。本当に賢明な判断だ。
167 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 01:56:05 ] どっちの味方なんだよ
168 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 02:18:45 ] 最終的にまともなのになってくれれば過程はどうでもい
169 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 04:19:04 ] C++をマネージ拡張するのもいいんだけど、 C#をアンマネージ拡張して欲しいと思うときがある。 まあ、DllImportすればいいんだけど。
170 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 01:34:15 ] よくねーよ。 でもMSが持ってるNativeMethods.cs公開してくれたら、それでいい気がする。
171 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 01:44:50 ] 俺もそれほしい PInvoke.net が不要になっちゃう
172 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 02:03:51 ] 結局、/CLIは今のところ使わない方が良いって事だなぁ…。
173 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 10:46:54 ] sage
174 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 03:51:20 ] C++/CLIって結局微妙ってこと? @IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005 www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html これとか見ると随分興奮しているけど
175 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 12:02:38 ] >>174 ヒント: 川俣 晶
176 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 16:15:43 ] 海外だと、C++/CLIは凍るほど冷えてる。
177 名前:デフォルトの名無しさん [2006/11/20(月) 19:51:22 ] >>176 そうなんかぁ〜?
178 名前:デフォルトの名無しさん [2006/12/03(日) 02:17:55 ] DllImport関係のNativeMethod系以外に結局何が素敵なの? C++/CLIって >>145 (言語熟練度はプロジェクト要員の平均レベルでC++/C#ができるものとして) Manageなコード中に簡単にネイティブっぽいものが書けちゃうと逆にメンテし辛いものにならないのかな。 ところで、C++/CLIってC#3.0みたいな機能って予定されてるの?
179 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 03:11:41 ] ネイティブの方が圧倒的に多かったり、 XP用のポーティングをしたり、 いろいろ便利なケースは想定できるでしょ? どこまで厚くサポートされるかは分からない。 STL.NETみたいに辞めちゃったプロジェクトもあるし、 C++/CLIの人員削減はあり得ることだと思う。
180 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 08:56:56 ] STL.NETはやめてはいないだろ。 OrcasのCTPにSTL/CLRが入っている。 どんなもんかまだ俺は試していないけど。
181 名前:デフォルトの名無しさん [2006/12/04(月) 15:49:06 ] void func (String* str1, String* str2, String* str3) { String* str; str = System::String::Concat( str, str1 ); str = System::String::Concat( str, '\0' ); str = System::String::Concat( str, str2 ); str = System::String::Concat( str, '\0' ); str = System::String::Concat( str, str3 ); str = System::String::Concat( str, '\0' ); str = System::String::Concat( str, '\0' ); } func("aaa","bbb","ccc"); 上記で、"aaa\0bbb\0ccc\0\0"という値を期待していたのですが、\0が消えて"aaabbbccc"となってしまいます。 助けてください
182 名前:181 [2006/12/04(月) 15:57:05 ] void fucn(string a, string b, string c) { string ret = ""; ret = System.String.Concat( ret, a ); ret = System.String.Concat( ret, '\0' ); ret = System.String.Concat( ret, b ); ret = System.String.Concat( ret, '\0' ); ret = System.String.Concat( ret, c ); ret = System.String.Concat( ret, '\0' ); ret = System.String.Concat( ret, '\0' ); } func("aaa","bbb","ccc"); あと、C#で上記のようにやった場合は期待通りの値になっているようです。 本当はC#で全部やろうと思ったのですが、C#でWin32APIの呼び出しが解らなくてC++/CLI使ってみました。 そのAPIの引数が、"aaa\0bbb\0ccc\0\0"という形式で指定しろとなっているのですが、 今度は引数が生成できなくて填ってます。
183 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 16:07:42 ] >>182 やったこと無いんだが、 見た感じ、strcatと同じ動作に見えるね。 オペレータの+ってないの?
184 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 16:18:11 ] >>183 ret += a; 今、上記のようにやってみたのですが、下記のエラーになってしまいました。。。 error C2297: '+=' : 無効な右オペランドです。 error C2845: '+=' : __gc ポインタ 'System::String __gc *' に対してポインタ演算ができません。
185 名前:デフォルトの名無しさん [2006/12/04(月) 16:47:32 ] CLIは素人なのではずしてたらごめんね。 で、これ通ったよ。 using namespace System; int main(array<System::String ^> ^args) { String^ A="Hello"; String^ B="World"; String^ C=""; C=A+B; Console::WriteLine(C->ToCharArray()); return 0; } と、ここまで書いて見落とし発見・・・。 なんだ、普通のstd::stringか? ちょっとまってて。
186 名前:181 [2006/12/04(月) 17:03:45 ] 皆さん、ありがとう。 下記のようにして何とか動きました。 voidfunc(String*str1,String*str2,String*str3){ LPTSTRpArg; LPTSTRpStr1=(LPTSTR)Marshal::StringToHGlobalAnsi(str1).ToPointer(); LPTSTRpStr2=(LPTSTR)Marshal::StringToHGlobalAnsi(str2).ToPointer();; LPTSTRpStr3=(LPTSTR)Marshal::StringToHGlobalAnsi(str3).ToPointer();; intlen=0; len+=lstrlen(pStr1); len+=1; len+=lstrlen(pStr2); len+=1; len+=lstrlen(pStr3); len+=1; len+=1; pArg=(LPTSTR)malloc(len); len=0; memcpy(&pArg[len],pStr1,lstrlen(pStr1));len+=lstrlen(pStr1); memcpy(&pArg[len],"\0",1);len+=1; memcpy(&pArg[len],pStr2,lstrlen(pStr2));len+=lstrlen(pStr2); memcpy(&pArg[len],"\0",1);len+=1; memcpy(&pArg[len],pStr3,lstrlen(pStr3));len+=lstrlen(pStr3); memcpy(&pArg[len],"\0",1);len+=1; memcpy(&pArg[len],"\0",1);len+=1; func(pArg); free(pArg); }
187 名前:デフォルトの名無しさん [2006/12/04(月) 17:04:51 ] ミスった・・・ voidfunc(String*str1,String*str2,String*str3){ LPTSTR pArg; LPTSTR pStr1=(LPTSTR)Marshal::StringToHGlobalAnsi(str1).ToPointer(); LPTSTR pStr2=(LPTSTR)Marshal::StringToHGlobalAnsi(str2).ToPointer();; LPTSTR pStr3=(LPTSTR)Marshal::StringToHGlobalAnsi(str3).ToPointer();; int len=0; len+=lstrlen(pStr1); len+=1; len+=lstrlen(pStr2); len+=1; len+=lstrlen(pStr3); len+=1; len+=1; pArg=(LPTSTR)malloc(len); len=0; memcpy(&pArg[len],pStr1,lstrlen(pStr1));len+=lstrlen(pStr1); memcpy(&pArg[len],"\0",1);len+=1; memcpy(&pArg[len],pStr2,lstrlen(pStr2));len+=lstrlen(pStr2); memcpy(&pArg[len],"\0",1);len+=1; memcpy(&pArg[len],pStr3,lstrlen(pStr3));len+=lstrlen(pStr3); memcpy(&pArg[len],"\0",1);len+=1; memcpy(&pArg[len],"\0",1);len+=1; func(pArg); free(pArg); }
188 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:10:58 ] >>181 お前それC++/CLIではなく、マネージドC++だろ。 とりあえず、こうすると.NET 2003の/clrと2005の/clr:OldSyntaxで動く(実行するとaaaしか表示されない)。 #using <mscorlib.dll> #include <vcclr.h> #include <windows.h> #pragma comment(lib, "user32.lib") void func (System::String* str1, System::String* str2, System::String* str3) { using System::String; String* str; str = String::Concat(str, str1); str = String::Concat(str, S"\0"); str = String::Concat(str, str2); str = String::Concat(str, S"\0"); str = String::Concat(str, str3); str = String::Concat(str, S"\0"); str = String::Concat(str, S"\0"); const wchar_t __pin* p = PtrToStringChars(str); ::MessageBoxW(0, p, L"", MB_OK); } int main() { func("aaa","bbb","ccc"); } まあAPIの相手をするならchar配列のほうが楽。 >>187 せめてsprintf使え。あとLPTSTRをマルチバイト文字列に使うな。
189 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:11:03 ] こらこら、ANSI文字列のポインタをLPTSTRで受けちゃダメだぞ。
190 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:14:53 ] …なんだか口は悪いけど親切なお兄さんと結婚することになりそうです。
191 名前:188 [2006/12/04(月) 17:22:28 ] >>188 動きました!