1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ!
161 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 13:47:31 ] 2.0 だろ。WinFX は PlatformSDK のような扱いになるらしいが >>158 もともとCOMサーバが動いてるんだから、変わらないでしょ CLR は COM 後継なんだし
162 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 14:45:51 ] 後継にしては今までのソースが全て吹っ飛んでしまうのは何故?
163 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 18:45:25 ] そこでC++/CLIですよ
164 名前:デフォルトの名無しさん mailto:sage [2005/10/05(水) 18:55:03 ] >162 (゚Д゚)ハァ?
165 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 02:33:02 ] >>162 レガシー
166 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 14:27:21 ] >>165 もうカルディナは必要ありません。
167 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 14:37:56 ] Vistaはネッツに吸収されました。
168 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 15:13:30 ] アニヲタばっかりだな
169 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 15:15:10 ] 車なんだけど...
170 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 15:28:17 ] >>68 LinqやActive Objectが、C++0xに入るわけないだろ。 この辺が入ったC++/CLIはEMCAで標準化されるだろうけど。
171 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 15:41:49 ] そーいえば、C貪とかいう標準化されたどーでもいーものがあったね。 標準化なんてCOBOLでもある。 というか、プログラムの長持ちではCOBOLのが先輩だね。
172 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 16:22:27 ] 168 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/06(木) 15:13:30 アニヲタばっかりだな 169 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/06(木) 15:15:10 車なんだけど...
173 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 16:53:26 ] active最高杉
174 名前:デフォルトの名無しさん [2005/10/06(木) 18:05:44 ] 168 名前: デフォルトの名無しさん [sage] 投稿日: 2005/10/06(木) 15:13:30 アニヲタばっかりだな 169 名前: デフォルトの名無しさん [sage] 投稿日: 2005/10/06(木) 15:15:10 車なんだけど... ワロタ
175 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 00:25:44 ] よくわからんが、車を元ネタにした名前が出てくるアニメがあるって解釈でいいのか?
176 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 00:32:14 ] >>175 レイアースの登場人物の名前は車に由来。 ジョジョの登場人物の名前はミュージシャンに由来。 とCLAMPのアニメを3本見ただけの俺が答える。
177 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 00:32:53 ] つまり「アニヲタばっかりだな」が正解?
178 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 01:28:14 ] >>177 「アニヲタ馬鹿だな」が正解。
179 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 14:04:43 ] アニオタのせいで秋葉原って今ものすごいキモイ町になってる
180 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 14:41:26 ] そういや開業直後にTXに乗ってアキバへ行ったが、駅を出たら見知らぬ光景に遭遇して慣れるのに 時間を要した。ちなみにヨドバシカメラにはまだ行っていない。
181 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 20:32:11 ] >>179 アニヲタはそれほどでもない。むしろエロゲヲタが酷い。
182 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 20:52:23 ] >>181 悪いが区別が付かないのでどうでもいい。
183 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 20:53:42 ] >>182 プログラマとSE
184 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 21:07:08 ] >>183 悪いが区別が付かないのでどうでもいい。
185 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 21:15:49 ] よくテレビや雑誌で晒されてるようなヲタって何ヲタなの? 電車男みたいなやつ
186 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 21:39:55 ] ヲタというより、むしろ朝からパチンコ屋に並んだり、競馬場にたむろしてる連中を連想する。
187 名前:デフォルトの名無しさん [2005/10/07(金) 22:54:11 ] パチンコ屋に並ぶのは朝しかねーだろ? バカかおめー昼夕オープンなんて滅多にないんだぞ しね
188 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 00:03:20 ] とパチンカスが言っております。
189 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 01:40:45 ] >>185 プログラマじゃないの? :-)
190 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 02:08:49 ] >>186 社会の底辺にいる人達か。
191 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 02:13:23 ] なるほど、プログラマは朝からパチンコ屋にならんで競馬場にたむろしてマルチ萌え〜とかセリオたんハァハァって言ってる人たちなのか モニタの上に変なフィギュア飾ってるし
192 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 02:15:16 ] >>191 通常の業務の上にそんなことまでしてたら過労死するな。
193 名前:デフォルトの名無しさん [2005/10/08(土) 21:40:48 ] 朝からパチンコ屋にならんでなんいうやつはアフォ1確 お金をつかって買い物するっていってるような物だぞw
194 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 21:41:33 ] >>193 おまえは中国人かよw
195 名前:デフォルトの名無しさん [2005/10/08(土) 21:43:57 ] デカ顔&短足&チビの日本人よりはマシw
196 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 21:44:57 ] ズボシだったのか いや、悪気はなかったんだ ジョークだ許してくれ
197 名前:デフォルトの名無しさん [2005/10/08(土) 21:44:59 ] COME WITH ME ってカッコイイ
198 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 21:55:29 ] 誰か>>193 の言わんとすることをわかりやすく解説してください。
199 名前:デフォルトの名無しさん mailto:sage [2005/10/08(土) 21:57:38 ] おまいら、巣にカエレ
200 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 00:56:46 ] >>198 日雇いのバイトで得た給料を次の日にパチンコでなくすようなやつなんだ。 そっとしといてやれよ。
201 名前:デフォルトの名無しさん [2005/10/09(日) 01:00:55 ] プログラミングヲタよりは(ry
202 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 13:13:40 ] >>200 その日の内にだろ
203 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 16:34:14 ] >>202 夜勤の場合はその通りだな。
204 名前:デフォルトの名無しさん [2005/10/10(月) 21:48:37 ] ここにいるひとってやっぱ電車男みたいな人ばっかり? 俺は電車男そのものだけど・・・orz
205 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 00:50:45 ] 電車男って、アニメオタクでプログラミングなんてしないんじゃ? (テレビしか見てないけど
206 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 00:51:50 ] 電車男はあまりオタクじゃないよ 完全に消費者だし
207 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 01:27:57 ] もはやC++/CLIはどうでもよくなってる罠
208 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 01:31:00 ] >>168 逝って良し
209 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 11:16:33 ] >207 必死に自作自演してるんだよ。ほっとけ
210 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 02:58:49 ] へー、pure Java の CLRなんてあるのか。 逆もあれば、無限に重ねられるな
211 名前:デフォルトの名無しさん [2005/11/05(土) 01:08:45 ] >>210 詳しく
212 名前:デフォルトの名無しさん mailto:sage [2005/11/05(土) 13:22:36 ] C#のほうが気になる
213 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 01:23:28 ] >>210 ただでさえ重いCLRをJavaなんかで実装したら使い物にならんだろ
214 名前:デフォルトの名無しさん [2005/11/18(金) 01:03:42 ] C#もっと速かったら使いやすいし、いいんだけだな〜
215 名前:デフォルトの名無しさん [2005/11/20(日) 01:35:04 ] 釣れなかったみたいだねプゲラ
216 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 07:00:04 ] checked statement なぜ使えないのだろうか...orz
217 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 08:16:08 ] C++/CLIをちょっと.NETのライブラリとか使いたい部分だけマネージにして後はほとんどアンマネージにしてる人って居る? その場合の速度知りたいんですが・・・ C#ちょっともっさりしすぎ。
218 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 13:42:52 ] >>217 部分的にでもCLRを呼び出している以上起動時のもっさり感は変わらない。 P/Invokeよりは高速とはいえ、ネイティブ−マネージドの遷移は負荷が高いから 混ぜたいなら呼び出しの単位は大きいほうがいい。 画面まわりをネイティブで書いて、メニューからのイベントをマネージドで 処理するような使い方(またはその逆)は向いているが、 特定のロジックをネイティブにして頻繁にマネージドコードから呼び出すのには向いていない。
219 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 20:50:52 ] ホスティングすればいいんじゃないの?>起動の遅さ ttp://d.hatena.ne.jp/akiramei/20051108
220 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 21:33:23 ] STL.NETはどこからダウソできるん?
221 名前:デフォルトの名無しさん [2005/11/24(木) 09:32:05 ] STL.NETじゃね?
222 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 11:46:15 ] > ネイティブ−マネージドの遷移は負荷が高い え?
223 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:21:05 ] >>219 だたホスティングしてもmscoree.dll をCOMで呼び出すだけだからあまり変わらない気がするが、 同じプロセス空間に複数のアップドメインを作ってアセンブリを起動するシェルのようなものを作れば、 それなりに起動は速くなるかもしれないですね。 >>222 え? managed codeからnative codeをオーバーヘッド無しで呼べるといいたいのかな?
224 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:44:09 ] 呼べるでしょ。 データの受け渡しにコストがかかるだけで。
225 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:47:36 ] >>224 呼べません。
226 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 01:53:34 ] 一見そのまま呼べるかのように振る舞うだけじゃなかったか
227 名前:デフォルトの名無しさん [2005/11/25(金) 02:04:50 ] オーバーヘッドって具体的にどんな処理してるんだろ。
228 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 02:08:03 ] マーシャリングとかじゃね?
229 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 02:12:24 ] マネージドとネイティブの世界には分厚い境界線 なるものが存在するんですよ。 その境界線を越えようとするものは某北朝鮮から脱国するがごとく リスクを負わなければならないのですよ。
230 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 06:46:32 ] intしか使わないネイティブを、 SuppressUnmanagedCodeSecurity, LinkDemandすればコストほとんどなしなんじゃないの? 構造体もValueType使えば、ボクシング/アンボクシング行われないしね。
231 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 09:22:48 ] >>229 つ Borland(R) Developer Studio 2006 ttp://www.borland.co.jp/news/20051124_bds2006.html マネージドとネイティブをコンパイルで切り替えだお。
232 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 11:14:41 ] value class制限大杉
233 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 21:30:37 ] ref structとvalue classの違いは? ref structって値型じゃないの? ref classとref structの違いって何よ?デフォルトpublicとprivateの違いだけ?
234 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 22:31:14 ] ref ←→ 値型 ref class と ref struct の違いは class と struct の違いと同じ ref 型がCLRに管理されてるクラス。value 型は primary な値を意味するクラス
235 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 22:44:30 ] OKありがとう。とてもわかった
236 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:02:55 ] 値型だと デフォルトコンストラクタ コピーコンストラクタ デストラクタ ファイナライザ 代入演算子 が定義できなかったよ。 デフォルトコンストラクタが定義できないんで引数無しのタグクラス食わせてるんだけど 何かあるんだろうか... それとデストラクタが定義できないせいで単純にnewすると解放ができない。
237 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:07:16 ] >>236 C#って知ってる?
238 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:08:24 ] > newすると解放ができない。 なんか言ってることおかしくない? 解放って?
239 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:12:33 ] >236 値型は primary な型を作るためのものだから、int とかにデフォルト・コンストラクタや ファイナライザを定義しないでしょ?
240 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:13:13 ] >>236 値型は、初期化しによる初期化、代入などで、 memcpyが行われるだけでいいようなオブジェクトに使う。 定義できなかったと言うより、定義しないでいいものに使う。
241 名前:236 mailto:sage [2005/11/25(金) 23:15:45 ] >>238 template <typename T,typename TAG> value struct a { T *p; a(TAG) { p = new T();//NativeC++のスマートポインタが使えないのでCLIなスマートポインタが必要ぽい } };
242 名前:236 mailto:sage [2005/11/25(金) 23:21:43 ] >>239 ,240 参照型だとコピーコンストラクタいちいち用意するの面倒じゃん。 C++とC++/CLI両対応のソース書きたいので値型にしてる。
243 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:38:57 ] >>242 .Netでは「クラスは参照型」となっているのだからいつか破綻する。
244 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:40:16 ] それは思考が逆で、 コピーコンストラクタが必要ないから値型にしているのであって、 面倒だから参照型を使わないんじゃない。
245 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:41:57 ] 値型か参照型かは性能にもろに影響してくるから 適切に選択した方がいいよ
246 名前:デフォルトの名無しさん mailto:sage [2005/11/25(金) 23:56:47 ] 普通にクラスを書けばいいんじゃないか? わざわざ値型で定義しようとするから、苦労しているだけだと思うが
247 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 08:19:50 ] >>45 LLVMがgccに入りそうな勢いだなあ。
248 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 09:42:42 ] 参照を初期化リストで初期化できないのですが、 なぜなのでしょうか? value struct UseRef { explicit UseRef(int& in_i) :i(in_i) {} int& i; }; ref struct TestRef { int i; UseRef r; TestRef() :r(i) {} };
249 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 13:52:01 ] 値型は生成時にデフォルト値を持つ必要がありますが、標準C++ の int 型はデフォルト値を 規定されていません。そのため、生成時に不定となる値の参照を型として保持できないと思われ
250 名前:248 mailto:sage [2005/11/28(月) 16:40:53 ] >>249 ありがとうございます。 参照型でも試してみましたが、やはりだめみたいでした。 一度、GC Heapにgcnewしてそこからinterior reference?(int%)を取得することで 参照のように扱うことはできました。 どうも値型のメンバには値型かGcHeap(Cloneされる)しかおけないようです。 また、interior ptr|referenceのときもクラスのメンバにはできないようです。
251 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 18:05:46 ] まぁ、仕様書見るとそう書いてありますね
252 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 22:05:15 ] 俺の勘で。 ref struct TestRef { int i; UseRef r; TestRef() : i(0), r(i) {} };
253 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 16:38:04 ] UseRef のデフォルト・コンストラクタが不定値を持つから駄目ぽ
254 名前:デフォルトの名無しさん [2005/12/01(木) 17:33:26 ] 組込型だと 普通のref class とvalue classで通るコードでエラーがでるんだけど 属性とかでなくコンパイラにはじかれてるのかな? Int32 o_int(0); Int32^ g_int = gcnew Int32(0); Int32% r_int = *g_int; //Int32^ rg_int = %r_int;//NG //String o_str;//NG String^ g_str = gcnew String(""); //String% r_str = *g_str;//NG //String^ rg_str = %r_str;//NG
255 名前:デフォルトの名無しさん [2005/12/02(金) 02:00:31 ] なんだか汚い言語になっちゃいましたね perlみてー
256 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 03:41:08 ] C++が汚いのはもとからだろ
257 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 07:44:32 ] >>255 思いつきで拡張してるよね。 C++の世界では有名な人達がやっているんだが…
258 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 07:49:14 ] だれだっけ?
259 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 08:28:53 ] Stanley Lippman staff.develop.com/slip/ blogs.msdn.com/slippman/ www.microsoft.com/presspass/press/2001/oct01/10-19lippmanpr.mspx Herb Sutter www.gotw.ca/ blogs.msdn.com/hsutter/ www.microsoft.com/presspass/press/2002/Mar02/03-13SutterPR.mspx
260 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 12:51:52 ] Perlは美しい。C++もああいうの目指すべき。
261 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 13:27:41 ] >>260 漏れはあまり詳しくないんだが、そうか???本当にそうなのか???????
262 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 15:34:59 ] そんなあなたに Brainf*ck
263 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 00:57:17 ] >>255-257 良くも悪くもC++的っていう気はする。
264 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 11:30:30 ] C++は細かいところで汚いなりに、それなりのポリシーがあったが、 C++/CLIに至ってはなんでもありだ。実装の都合としか思えないものもある。
265 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 19:46:54 ] C++をぐちゃぐちゃにしC++コミュニティーを崩壊させる。 ↓ C++の衰退とC#の反映
266 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 20:47:05 ] C#はメジャーにならない 断言する
267 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 21:11:34 ] 名無しで断言されても……
268 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 22:04:56 ] >>265 それか!!
269 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 18:49:26 ] C++/CLIの設計コンセプトは「拡張機能を使わなければ、既存のC++と変わらないこと」だから 別にC++に変な影響を与えないと思うけど
270 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 20:03:25 ] 果たしてそうかな
271 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 20:18:12 ] >>270 そうだよ。
272 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 20:56:43 ] 関係ないが、親玉格のC(99)がやらかしてくれてるからなあ。
273 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 21:15:11 ] C++はまだ「生きた」言語なんだよ。 まだまだ進化する。
274 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 21:41:25 ] ここに書いて良いのかわからんかったんですが。 タスクマネージャーの「CPU使用率の履歴」みたいな動的な(?)グラフを出せるものを書きたいのですが 何から手をつければいいのか、全くわかりません。 アドバイスよろしくお願いします。
275 名前:デフォルトの名無しさん [2005/12/04(日) 21:46:55 ] age
276 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 22:13:21 ] >>274 とりあえず↓この本読め。 www.amazon.co.jp/exec/obidos/ASIN/4872331265/qid=1133701895/sr=1-1/ref=sr_1_10_1/249-6035794-3226728
277 名前:デフォルトの名無しさん [2005/12/05(月) 09:58:09 ] >>272 C99のマズイところでどんなとこ? 得に思い当たらないんだけど
278 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 11:34:16 ] エラーのthrow/catchが、cとc++で別になったのは痛い。 MFCとC++、C丼とC++、MC++とC++、C++CLIとC++、それぞれ結局別物と思われてるところも痛いけど。
279 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 11:43:35 ] 実際別物
280 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 15:13:07 ] MFCを持ち出してくるところが痛い。
281 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 15:30:50 ] MFCって、mc++とかC++/CLIから使えるんだっけか?
282 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 18:32:19 ] C++/CLIやmc++の構文を使ってないコードを /clrでコンパイルしたものを C++/CLIやmc++のプログラムと読んでいいかどうかによるけど、 そう呼んでいいなら使える。
283 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 18:41:23 ] managed と unmanagedの型でデータ交換したいのですが、 COMを使うしかないのでしょうか?
284 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 19:07:05 ] >>283 具体例を挙げてわかるように質問してくれ。
285 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 19:10:17 ] >/clrでコンパイルしたものを どういったオプションでつか?
286 名前:283 mailto:sage [2005/12/05(月) 19:33:39 ] >>284 混合クラスにできないだけで、 別クラスにしておいて呼び出しは可能だったのね... Marshalingできる時はしたほうがいいのかな ttp://msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx
287 名前:修正 mailto:sage [2005/12/05(月) 21:25:49 ] unmanagedからmanagedの呼び出しはできないみたい。
288 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 22:45:23 ] CLRホスティング・・・
289 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 03:01:26 ] managed c++, c++/CLI なら managed から nativeのモジュールを呼び出すことも cl /MT /c submod.cpp cl /clr mainmod.cpp submod.obj native から managedのモジュールを呼び出すこともできる。 cl /clr /c submod.cpp cl /MT mainmod.cpp submod.obj
290 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 07:34:09 ] 最強
291 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 10:52:01 ] unko
292 名前:デフォルトの名無しさん [2005/12/07(水) 23:15:01 ] C++/CLIの存在意義って? マネージならC#でよくね?
293 名前:マイク ◆yrBrqfF1Ew mailto:sage [2005/12/07(水) 23:19:32 ] そうだな。
294 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 00:28:08 ] やっぱりC#? C++から移植するのってどれぐらい工数かかるんだろうか・・・・
295 名前:デフォルトの名無しさん [2005/12/08(木) 00:32:04 ] ぶっちゃけ、WindowsアプリならVC++6&MFCが最強では? あえてC#を覚えようとする気がしない。 VC++6&MFCでつれないWindowsアプリはない。
296 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 00:39:03 ] かわいそうな人
297 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 01:10:46 ] あえてCを覚えようという気がしない。 機械語で作れないwindowsアプリはない。
298 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 01:24:49 ] あえて計算機を覚えようという気がしない。 脳内で計算できない問題はない。
299 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 06:10:14 ] 切り返すなら同じ性質の物事を書かなきゃ :-P
300 名前:デフォルトの名無しさん [2005/12/08(木) 08:16:12 ] >>297 俺も未だに機械語で書いてるよ Cだとおせーから嫌だ
301 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 08:28:05 ] >>295 なるほど、いろんなWindowsアプリさんたちが釣れるようでつね。
302 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 11:44:15 ] >>295 はLonghornが出たら干される使い捨てデジドカ
303 名前:デフォルトの名無しさん [2005/12/08(木) 20:59:47 ] OSが記述できてしまう C++は絶対に廃れないよ しかも、デバイスドライバを書ける人は絶対に不可欠 C#やJAVAなんてモノが出来ても結局また 新たな言語が出てきて廃れるのは必至
304 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 21:14:47 ] つまりCOBOLと似たようなもんだ。 新しい言語の出現で全盛期より減ったとは言え、需要がなくなることはありえない。
305 名前:デフォルトの名無しさん mailto:sage [2005/12/08(木) 21:44:19 ] 歩く死体か。
306 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 02:03:11 ] Cで必要にして十分な件。
307 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 11:02:38 ] 既存のプログラムが全部マネージ環境で通るようにライブラリとか 整えて欲しい。 printfやstrcmp使うとネイティブとの混合アプリになっちゃうんでしょ? 標準ライブラリの中も.NETにすりゃあいいのに。
308 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 11:24:49 ] 混合になってなんかマズイことでもあるのかい?
309 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 13:12:07 ] >>307 あなたは根本的にCLIの世界を理解してないです。
310 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 16:26:18 ] >>308 混合だとWin以外に持っていけるの?(あるかはしらんけど) あと、切り替え時に異様に遅い感触。 >>309 根本を教えてくれ
311 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 16:43:46 ] 感触って君の思い込みのこと?
312 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 16:53:06 ] >>311 /clrつけてコンパイルしなおしたプログラムが異様に遅い。 .NETにしてもちょっと遅すぎると思ってね。原因がネイティブ 部分の呼び出し負荷くらいしか思い当たらない。
313 名前:310 mailto:sage [2005/12/09(金) 17:37:18 ] 簡単なやつで試してみた。環境はPen4-3GHz int a=0; while(a++<200000000){ stricmp("abc","123"); } ネイティブアプリだと1、2秒、CLIだと12秒くらいかかる。 stricmpをmy_stricmpに変えて、以下のように適当に定義してみると、 ネイティブでもCLIでも1、2秒で終わる。(my_stricmpは適当。要は 標準ランタイムを呼ばなければ良い) int my_stricmp(const char*a,const char*b){ while(*a++==*b++){ if(a[0] == 0) return 0; } return -1; } ちなみに、strcmpだとCLIでも1、2秒で終わるのだが、良く分からん。 strcmpだとCLIでもインライン展開されるのかな?
314 名前:310 mailto:sage [2005/12/09(金) 17:42:54 ] >>313 の例ではネイティブへの切り替え以外に負荷になる要素は 無いと思うんだが、識者の意見希望。
315 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 18:51:09 ] 関数の処理が遅いのか、CLR の起動に手間取っているのかは、ちゃんと分けた?
316 名前:310 mailto:sage [2005/12/09(金) 19:01:59 ] >>315 my_stricmpを使ってネイティブと時間の差が無いのだから、 起動時間の問題じゃないと思う。 あと、ループの回数を増減させれば処理時間も比例する。
317 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 20:03:25 ] >>313 strcmpは?stricmpだとCLIの方はロケールとかで色々面倒くさい ことしてそう。
318 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 20:56:41 ] >>313 ではlstrcmpはどう? これなら絶対にインライン展開できない。
319 名前:310 mailto:sage [2005/12/09(金) 21:15:00 ] >>318 lstrcmp,これから試してみるけど先に質問。 >>317 に関して、 俺、やはり根本が分かって無い模様。strcmpは313に書いた通りなのだが、 stricmpの場合でも、CLIからネイティブと同じルーチンが呼ばれるもんだと 思っていた。 この前提で、中身が一緒なら呼び出してる部分に負荷があるんじゃないかと 思っていたわけだが、ネイティブとCLIで呼び出されるstricmp(に限らず標準 ライブラリ全般)は別物なの?
320 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 22:17:02 ] >>319 その試した見たというコードをどこかのアップローダに晒すというのは どうだい?そうすれば同じ土俵で話ができる。
321 名前:310 mailto:sage [2005/12/09(金) 22:54:16 ] >>318 試してみた。lstrcmpの場合、ネイティブ37秒、CLI47秒だった。 lstrcmpこんなに重いのかというのはともかく、差がstricmpと 同じ。つーことはやはり呼び出し負荷でしょう。もちろんループ 回数も同じで測定している。 >>320 >その試した見たというコード 今までの数字は全部313のサンプルコードでの話。 mainかWinMainで囲ってちょうだい。 INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, INT) { { int a=0; while(a++<200000000){ stricmp("abc","123"); } } return 0; }
322 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 22:55:34 ] アセンブリ(アプリケーション)で閉じてる範囲に置いては、CLIはロードされないんじゃね?
323 名前:310 mailto:sage [2005/12/09(金) 23:02:41 ] >>322 意味が分かりませんorz
324 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 23:06:31 ] >>321 > つーことはやはり呼び出し負荷でしょう。 それ言うなら、 > もちろんループ回数も同じで測定している。 回数変えてファクターが何か調べないと。面白い奴だな(w
325 名前:310 mailto:sage [2005/12/09(金) 23:10:53 ] >>324 回数変えたら実行秒数が比例するけど。 my_stricmpにしてネイティブと差が無いわけだから、違いは 標準ライブラリの呼び出し以外に何か考えられる?
326 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 23:20:29 ] y = ax + b の a を比べろと言えば分かりますか?
327 名前:310 mailto:sage [2005/12/09(金) 23:27:29 ] >>326 何を言ってるのか分かりませんが、 具体的に他にファクターがあるならあげてみて欲しい。 こちらの比べ方に抜けがあるならそこを指摘してくれまいか。
328 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 23:31:27 ] ちょっと、煽りと神経質になってる人もいるみたい まぁ、とりあえず、時間の出たマシンのスペックを教えてちょ 問題になっているのは、msvcm80.dll 辺りかな
329 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 23:54:07 ] 回数を2倍にしても実行時間が2倍になるとは限らない。 325に比例するとは書いてあるけど、比例にもいろいろあるだろうに。
330 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 00:00:17 ] いや、確認した。これは、なんだろう 比較のサンプルソースを出すね C++/CLI int main(array<System::String ^> ^args) { const char *buff = "buffer"; const char *check = "Test"; DateTime dt = DateTime::Now; for ( int i=0; i<2000000; i++ ) { //strcmp(buff,check); mycomp(buff, check); } DateTime endTm = DateTime::Now; Console::WriteLine("Time : {0}", endTm - dt); return 0; } int mycomp(const char* before, const char* after) { while(*before++==*after++) if(before[0] == 0) return 0; return -1; } これで、strcmp とmycompを切り替えるだけで、全然速度が違う。なじぇ?
331 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 00:19:19 ] ワラ
332 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 00:28:24 ] まるで見当はずれかもしれませんが int mycomp(,,,) の前に #pragma unmanaged を置いてみるとどうなりますかね?
333 名前:330 mailto:sage [2005/12/10(土) 00:53:42 ] ごめん。これは速度が違って当たり前だった。ろくにチェックしていない before をちゃんとチェックすると、だいたい16秒でstrcmpと変わらない むしろ、ネイティブだと一瞬なんで、処理に時間がかかる理由が気になる
334 名前:330 mailto:sage [2005/12/10(土) 01:08:50 ] すまん。>>333 は元の関数のコメントアウトをしてなかったorz mycompにすると一瞬で終わるね。もうちょっと、関数の実装をちゃんとするべきなんだろうけど ネイティブに記述された関数はネイティブで処理されてる。となると、C標準関数が問題 なのか・・・
335 名前:310 mailto:sage [2005/12/10(土) 08:50:45 ] >>329 >回数を2倍にしても実行時間が2倍になるとは限らない。 それは比例じゃないと思うけど。 言葉どおり比例と受け取って欲しい。 だからループ外のファクターでは無いと思う。 >>334 マシンの速度が分からないけど、200万回のループで16秒もかかる? あと、strcmpだとこちらではCLIでもネイティブと同じだった。 stricmp,lstrcmpで、ネイティブとの差が2億回のループで10秒。 差が同じなので、処理内容の問題でも無いと思う。 こちらのマシン速度は>>313 です。
336 名前:310 mailto:sage [2005/12/10(土) 10:00:02 ] >>329 言葉が足んなかった、すまん。ax+bのbの部分はごく小さいと思って欲しい。 >>332 試してみた。 CLIでmy_stricmpをunmanagedプラグマで囲ったら、少しだけ遅くなった(3秒くらい)。 囲わなかった場合、今朝計り直してみたら1秒未満。
337 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 10:26:32 ] 「思って欲しい」(w ってんじゃなくて、普通は i<2000000 だけじゃなく、 i<500000、i<1000000、i<2500000も取ってグラフをプロットするわけ。 あと、*cmp("abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz")と、 *cmp("buffer", "Test")で比較するとかさ。 関数呼び出しのオーバーヘッドをみたいなら、 関数内の処理を軽くしたり重くしたりして違いを見るのが定席だろ? strcmpとmycompじゃ実装が全然違うわけだから、そのくらいはしないと、 呼び出しがオーバーヘッドになっているかどうか分からない。 一文字目の比較で関数が返るから、関数呼び出しの差を見えると思ったかもしれないが、 ソースのない方はもしかしたらNULLチェックしているかもしれないし、 タコなコーディングかもしれない。 分からないはずなのに安易に結論づけているから、スルーされてる。 表計算ソフト、数式処理ソフト、グラフプロットツールあれば簡単にグラフ化できるよね。
338 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 10:37:48 ] ・・・2億回で10秒って、別に違いがあって不思議じゃないよな?
339 名前:310 mailto:sage [2005/12/10(土) 10:56:43 ] >>338 単純化しただけであって、回数そのものは突飛でもない。 俺が問題にしてるのはCLIで標準関数呼び出しが遅い ということ。>>337 のいうようにちゃんとやることも出来るが、 そこまでやら無くても「CLIで標準関数呼び出しが遅い」のは 今までの例で明白じゃない?
340 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 11:15:41 ] 最適化の違いだけだったりして 自分で言ってるけど、strcmp でネイティブと違いがないなら「CLIで標準関数呼び出しが遅い」 とは言えないんじゃない?
341 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 11:28:40 ] >>339 明白かどうかわかんないから粘着してんじゃないの? 他のファクターを探す手助けにもなるんだから手抜かずにやれば?
342 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 11:32:24 ] 最適化で思ったんだけど、310 のネイティブの結果って速過ぎない? 漏れ、turion M37 2000 相当で以下のソースで1億回廻したけど、8秒ほどかかった メモリも800MBほど食べた int _tmain(int argc, _TCHAR* argv[]) { const char *a = "sample text a"; const char *b = "sample text b"; std::vector<int> results; time_t stm = 0; time(&stm); for ( unsigned long int i=0; i<100000000; i++ ) { results.push_back(strcmp(a, b)); } time_t etm = 0; time(&etm); std::cout << "Result : " << etm - stm << " Size : " << results.size() << std::endl; return 0; }
343 名前:342 mailto:sage [2005/12/10(土) 11:37:56 ] あ、すまん。濡れ衣だな。パフォーマンスの違いと詰め込み時間を考えれば、妥当か ちなみに、/clr では同等のソースで11秒だった
344 名前:310 mailto:sage [2005/12/10(土) 11:38:06 ] >>340 遅まきながらステップしてみた。 strcmpはCLIでもインライン展開されていた。 stricmpはcallされていて、スタックトレースウインドウに マネージからネイティブへ以降、と表示される。
345 名前:342 mailto:sage [2005/12/10(土) 11:48:28 ] 漏れの環境での比較と詰め込みの結果 CLR native strcmp 11s 8s stricmp 16s 13s lstrcmp 20s 17s なんか、綺麗な結果になった。CLR の起動コストとかで +3s ぐらい
346 名前:310 mailto:sage [2005/12/10(土) 11:50:27 ] >>341 1回、1億回、2億回でほぼ直線状に並んでたから比例と書いた。 1回なら起動の時間は気にならないくらい一瞬で終わる。
347 名前:310 mailto:sage [2005/12/10(土) 11:52:44 ] >>345 ループ1回で+3sかかりますか?
348 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 12:39:12 ] >347 それはなかった。何らかのコストがかかっているのは確かみたい CLR 側のやつはDateTime とか Console::WriteLine を使っていたので、ソースを完全に 同一にすると、 lstrcmp 19s 17s になった。1億回のループでこれだから、あとはパフォーマンス・カウンタでも使わないと 細かくはわからない領域だと思う ちなみにいろいろと切って静かに取ってみたら CLR Native CLRx64 Nativex64 lstrcmp 16s 14s 15s 12s なんて結果になった
349 名前:310 mailto:sage [2005/12/10(土) 12:52:57 ] >>348 342のソースはSTLの負荷が大きいのと、strcmpはインライン化されて マネージ、ネイティブの切り替えは見えにくくなってると思う。 だから純粋にネイティブとCLIの差じゃなかろうか。 STLとっぱらってstricmpとかだけにしたらこちらの結果と 相似に近いのが出るんじゃないかな。 STLはマネージ側で実行されるんでしょ? だからネイティブとの 大きな差にはならないんじゃないのかと。←こっちより差が小さいから
350 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 12:59:11 ] >349 んにゃ。STLはネイティブだよ。ループで代入しているのは、最適化でループ自体が外される のを防ぐため しかし、CLRx64 にはもうちょっとがんがってほすぃ
351 名前:310 mailto:sage [2005/12/10(土) 13:01:25 ] >>350 >STLはネイティブだよ ありゃそうなの? テンプレートっつーくらいだから マネージとしてコンパイルされてるのかと思った。
352 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 13:05:46 ] >351 それはジェネリクスを利用した STL.NET と混同してるんじゃないかな しかし、+2秒はいったい何をしているのだろう
353 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 13:18:58 ] 気になったので試してみた List<int>^ results = gcnew List<int>; time_t stm = 0; time(&stm); for ( unsigned long int i=0; i<100000000; i++ ) { results->Add(lstrcmp(a, b)); } time_t etm = 0; time(&etm); std::cout << "Result : " << etm - stm << " Size : " << results->Count << std::endl; CLR Native CLRx64 Nativex64 lstrcmp 13s 11s 12s 9s なかなか、よい結果です
354 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 22:23:25 ] >>346 数学苦手だった人?
355 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 22:28:52 ] 直線と言っても限りなく水平に近いものから限りなく垂直に近いものまであるわけで。
356 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 00:48:46 ] >>353 スゲーな
357 名前:デフォルトの名無しさん [2005/12/11(日) 03:32:29 ] .net2.0SDKにはC++/CLIのコンパイラって付いてくるの? managedC++は?
358 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 04:57:42 ] ついてこない。
359 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 05:03:06 ] えええええええええええええ
360 名前:デフォルトの名無しさん [2005/12/11(日) 07:55:17 ] .NET 1.0のmanaged c++の頃にやったテストなのだが、 C#やVB.NETでも使えるP/Invokeに比べて、 importlibで呼び出す場合はかなりパフォーマンスがよかった。 単純なNativeコードのDLLを作り繰り返し交互に呼び出すテストで、 かかった時間はP/Invoke 24, importlib 3 nativeコードからimportlibを使っての呼び出し 1.5 の比率。 DLLを作らずobjのリンクの場合、native-nativeで1、managed-nativeで2.5。 というわけでC++/CLIの存在意義はmix modeにあると思っている。
361 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 07:58:58 ] >357 cl /clr cl /clr:oldSyntax ってやってみな
362 名前:デフォルトの名無しさん [2005/12/11(日) 08:05:27 ] >>360 つか、今時Win32 APIをコールする必要があるか???
363 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 08:56:21 ] ある
364 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 10:14:33 ] >>362 まだ大いにあるよ。
365 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 10:49:56 ] >>362 君にはない。
366 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 11:11:19 ] >>362 今時っていうか、今程度の.netじゃ、 まともなWindowsプログラミングやるならWinAPI叩かざるを得ない。
367 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 12:15:19 ] 激同
368 名前:デフォルトの名無しさん [2005/12/11(日) 19:40:02 ] >>366 そうか〜? .NET Frameworkのクラスライブラリだけですべて作れますけど・・・
369 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 20:06:45 ] いまんところ直面した問題 ・IME ・Caret ・ScrollWindowEx
370 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 20:08:00 ] >>369 初心者スレ行けばw
371 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 20:15:13 ] >>370 あほか。流れ嫁。API呼ばなきゃいけない問題だ。かす。
372 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 20:22:17 ] >>371 初心者スレ行けばw
373 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 20:29:00 ] >>368 SHFileOperation VBのMyを使えとか言ったら刺す。
374 名前:流れを読んでレス mailto:sage [2005/12/11(日) 22:03:40 ] >>371 初心者スレ行けばw
375 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 22:21:02 ] >>368 FileDialogのカスタマイズ
376 名前:デフォルトの名無しさん mailto:sage [2005/12/12(月) 00:10:36 ] >>375 初心者スレ行けばw
377 名前:デフォルトの名無しさん mailto:sage [2005/12/12(月) 01:51:23 ] こう見るとできないことだらけだね。 MSはどうするつもりなんだろう
378 名前:デフォルトの名無しさん mailto:sage [2005/12/12(月) 09:21:36 ] そのためのC++/CLIじゃないか
379 名前:デフォルトの名無しさん mailto:sage [2005/12/12(月) 23:05:18 ] >>368 ありふれた業務アプリ程度ならそれほど困ることもないけど、 ちょっとばかしシステムに寄った途端にできないことが増える。 原因が(専ら機能面とは何の関係もない)くだらない要求だったりして 余計に萎えるというおまけが付くこともよくある。 >>377 とりあえず使い物になるVer.3を出せと言いたい。
380 名前:デフォルトの名無しさん mailto:sage [2005/12/13(火) 09:00:43 ] >原因が(専ら機能面とは何の関係もない)くだらない要求だったりして >余計に萎えるというおまけが付くこともよくある。 あるあるww
381 名前:デフォルトの名無しさん mailto:sage [2005/12/13(火) 15:22:20 ] ttp://s03.2log.net/home/nsharp/archives/blog404.html 正直賛同できません。
382 名前:デフォルトの名無しさん [2005/12/13(火) 17:15:19 ] Cに勝る言語はないってことだな
383 名前:デフォルトの名無しさん mailto:sage [2005/12/13(火) 20:46:50 ] Win32への依存度を下げる必然性がないんだから当たり前でしょ?
384 名前:デフォルトの名無しさん mailto:sage [2005/12/13(火) 21:47:52 ] Win95が出たときの3.1使いもそう言ってた
385 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 17:36:34 ] Win16→Win32s→Win32のこと? あれは言語一緒だしね…
386 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 05:37:15 ] 技術的な需要もないことはないけど、それよりただ新しいWindowsを 作らないといけないことだけが先行してるのが萎える。市場に対して 新規性を謳うことだけが最重要課題なんだよな。
387 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 20:41:33 ] 次は ISO だな www.ecma-international.org/publications/standards/Ecma-372.htm
388 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 00:54:50 ] ISOは無理。
389 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 00:59:57 ] C#はISOだぞ C++/CLIだってきっと
390 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 08:57:14 ] CLI は ISO で標準化されてたっけ?
391 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 10:32:21 ] CLI 標準はこれだな ISO/IEC 23271:2003
392 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 10:56:26 ] このへんね。 www.plumhall.com/ecma/ msdn.microsoft.com/visualc/homepageheadlines/ecma/default.aspx
393 名前:デフォルトの名無しさん mailto:sage [2005/12/19(月) 23:38:22 ] itpro.nikkeibp.co.jp/article/COLUMN/20051125/225170/?ST=win に「VC++ExpressEditionは標準C++を学習するための優れた教材である 」 てあるけど、そうなの? .NETのWindowsアプリ作るものかとおもってたよ。
394 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 00:04:06 ] とりあえずVC++は標準C++への準拠度が高いことに間違いない。
395 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 02:58:19 ] これまでは準拠してなかったということ?
396 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 09:38:58 ] そゆこと それからC++でドトネトすると飛んでも文法だし、 大体MFCはキショイというのが定説。
397 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 13:40:38 ] へぇ。2005からはキショクはないのか。 VC++(というIDE)を使ってなかった人も使い出したりするんだろか?
398 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 20:36:35 ] IDEがVC6位軽ければみんな使うだろうに
399 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 22:31:59 ] 自分の価値観を回りに押し付けないように
400 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 23:47:53 ] ただそこに意見が存在するだけで 押し付けられたとか思い込まないように
401 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 14:50:12 ] ttp://mag.autumn.org/Content.modf?id=20050425162104 C++復権すると思う?
402 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 15:45:19 ] >現状で極めて私的な感想から言えば、>JavaとC#の >代替プログラム言語になり得る第1候補はVisual Basicです。
403 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 20:16:06 ] >>401 復権もなにも C++で記述できないプログラムはないんだから・・・
404 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 20:22:13 ] >>403 それは今のCPUがC言語を動かすことを前提としてる面も大きいと思う
405 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 20:28:41 ] CPUがC言語を動かす? 意味不明
406 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 20:32:45 ] 0番付近がNULL対策に実メモリを割り当てないようになってたりするじゃん。 他にC言語で簡単に扱えないメモリレイアウトを要求しないとかさ。
407 名前:デフォルトの名無しさん mailto:sage [2005/12/21(水) 21:27:10 ] >>406 > 0番付近がNULL対策に実メモリを割り当てないようになってたりするじゃん これはOSの問題という側面のほうが大きいと思う。 別にC/C++ではヌルポインタのビットパターンは0でなくとも良いとなっている。 > 他にC言語で簡単に扱えないメモリレイアウトを要求しないとかさ。 そんなもん誰も要求していない。
408 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 07:22:14 ] >>406 x86のI/Oポートは「C言語」では叩けないよ。 喪前様が言ってるのは、例えるなら、見かけの現象だけで 「太陽は地球を回っている」と言ってるのと同じこと。 言語側から見るだけじゃ、本当の意味では計算機は理解できない。 計算機の基礎から勉強したほうがいい。
409 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 08:14:09 ] x86のI/Oポートをたたく必要がない
410 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 10:44:15 ] >>403 「brainfuck復権すると思う?」 「復権も何も、brainfuckで記述できないプログラムはないんだから……」
411 名前:デフォルトの名無しさん mailto:sage [2005/12/22(木) 10:48:17 ] >>410 いまだにつかっていますが、なにか?
412 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 07:42:22 ] みんなの大好きなあの言語が.NETの仲間入り。 brainf*ck.NET
413 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 11:36:51 ] >412 ソースコードキボン
414 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 21:13:53 ] C++/CLIの入門サイトってありますか
415 名前:デフォルトの名無しさん mailto:sage [2005/12/28(水) 10:29:47 ] VB.NET のPGで、構文解析を行う必要が出たときに、 C++/CLI で boost.spirit 使って手軽に構文解析モジュール作成して、 VB.NET から参照設定で呼び出す ってことが簡単に出来るならすばらしいことだと思うよ。
416 名前:デフォルトの名無しさん mailto:sage [2005/12/28(水) 10:32:23 ] マルチランゲージは素晴らしい。 現実はJ#は開封もされない事実。 ブビ厨はC貧を嫌い、C貧はブビ厨を嫌う。 M$の理想は宣伝専用。
417 名前:デフォルトの名無しさん mailto:sage [2005/12/29(木) 00:42:11 ] >415 普通にできるけど?
418 名前:デフォルトの名無しさん mailto:sage [2005/12/29(木) 05:23:34 ] C#で以下のようなコードを using (FileStream fs = new FileStream("test.txt", FileMode.Read)) { } C++/CLIでうまくかけるんですか? FileStreamをスタックみたいにして作れると思ったんですが、できないのでしょうか?
419 名前:418 mailto:sage [2005/12/29(木) 05:25:15 ] すいません。できました。ぜんぜんわかってませんでした。
420 名前:デフォルトの名無しさん mailto:sage [2005/12/29(木) 17:16:57 ] >414 入門するようなもんじゃねぇだろ? C# を先に勉強した方がいいぞ
421 名前:デフォルトの名無しさん mailto:sage [2005/12/29(木) 20:22:02 ] このスレでC#を勧めるのはどうかと思う。
422 名前:デフォルトの名無しさん mailto:sage [2005/12/30(金) 00:13:58 ] そうか? 基本的にC++/CLIのターゲットは、今までC++をやってきた連中が .net Framework を自由に使えるようにと言うことだろ 表面的な文法なら、ref や generics にプロパティ、delegate ぐらいしか増えないわけで 今までC++をやっていたのであれば、それほど大した変更じゃない 問題なのは、.net Framework を使えるか、それをC++/CLIではどのように融合させたのか という点だから、それは入門じゃないだろ。C# の入門書見て、C++/CLI の構文での使い方を 知れば、十分なんじゃねえかと思われ ダイレクトに C++ を知らずに、C++/CLI に手を出すのは、止めた方がいいだろ
423 名前:デフォルトの名無しさん mailto:sage [2005/12/31(土) 08:04:27 ] >>422 の言ってることは確かに理解できるし、俺もほとんど同意だが。 ここはC++/CLIについて語るスレなんだよなw でもマジレスすると、入門サイトありますか?とか聞くようなレベルなら さっさとC#かVBで始めたほうがいいと思う。
424 名前:デフォルトの名無しさん mailto:sage [2005/12/31(土) 13:05:55 ] _asm{} とか書いたらどうなるんだ?って思ってやってみたら、 さすがに main() の中に書いたら怒られた。 関数単位でマネージド、アンマネージドが切り替わるんだね。 _asm{} 入りの関数はネイティブコードとして生成されるみたい。 その呼び出しをうまい具合にやってくれるのがいいね。 いや、C++/CLI で _asm{} 使うような機会があるかどうかは別として。
425 名前:デフォルトの名無しさん mailto:sage [2005/12/31(土) 14:20:04 ] >424 C++/CLI の拡張構文ではグローバルな関数の存在を認めていない だから、ただ関数を生成しただけでは、基本的にネイティブとしてコンパイルされる はずだよ。main はさすがに扱いが違うけど
426 名前:デフォルトの名無しさん mailto:sage [2005/12/31(土) 15:09:22 ] ふと思ったんだが boost on C++/CLI なんて可能だろうか。 ていうか、だったら素直に .NET Framework にある 便利クラス使えよって気もするが。
427 名前:デフォルトの名無しさん mailto:sage [2005/12/31(土) 16:19:01 ] アセンブリ内で閉じてるなら平気だろ CLI 拡張部を使わなければ、標準のC++であることが C++/CLI の設計コンセプトなんだから できない理由はない。聞く前にやれば?
428 名前:デフォルトの名無しさん [2006/01/01(日) 00:43:38 ] if ( DialogResult::OK != openFileDialog1->ShowDialog(this) ) return; コンパイルできません>< t:\dev\www\winform\winform\Form1.h(154) : error C2039: 'OK' : 'System::Windows::Forms::Form::DialogResult' のメンバではありません。 t:\dev\www\winform\winform\Form1.h(23) : 'System::Windows::Forms::Form::DialogResult' の宣言を確認してください。 t:\dev\www\winform\winform\Form1.h(154) : error C2065: 'OK' : 定義されていない識別子です。 ビルドログは "file://t:\DEV\WWW\winform\winform\Debug\BuildLog.htm" に保存されました。 winform - エラー 2、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
429 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 00:46:55 ] if ( Windows::Forms::DialogResult::OK != openFileDialog1->ShowDialog(this) ) return; こうしました><
430 名前:デフォルトの名無しさん [2006/01/01(日) 01:19:56 ] C++/CLIやりたいやつが入門サイトを希望するなんて ギャグ以外の何者でもないだろ。
431 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 12:25:43 ] CLIマッシーンってどんな環境を目指しているの? そのうち出るかもしれない3DのUIとか検索ベースのFSまでのつなぎかな??
432 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 13:21:49 ] いつかでるLISPマシンまでの繋ぎです
433 名前:デフォルトの名無しさん [2006/01/01(日) 15:25:53 ] >C++復権すると思う? それ以前にC++ってメジャーだったっけ?
434 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 19:16:48 ] >433 どっかの記事では1990年代は優勢とか、書いてあったな。
435 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 21:07:00 ] C++/CLIのライブラリは .NET のライブラリをそのままISO標準にするの?? 以前のライブラリを使えるのはいいけど、できればGCで楽したいなー。
436 名前:デフォルトの名無しさん [2006/01/01(日) 21:58:51 ] 1990年代の段階ではC言語の仕事ばっかりやらされていたな。
437 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 22:49:23 ] >>433 Java/C#なんかが出てくる前は優勢だったと言えるだろう。 ただしベターCとしてしか使われなかった割合も大きかっただろうが。
438 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 23:37:51 ] delegateとeventの違いがわかりません。 delegateだけでいいような気がするのですが。。。 eventが存在する理由を教えてほしいです。
439 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 23:40:52 ] delegateを簡単に扱うため
440 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 23:46:17 ] >>439 センセー!簡単になる場面が思いつきません><
441 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 23:52:42 ] event なら delegate の呼び出しが外から出来ないでしょ
442 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 23:53:11 ] >>440 うるせーな。少しは自分で考えろ。 delegateは関数オブジェクトの取り扱いの簡便化ため。 eventはdelegateの呼び出しの簡便化のため
443 名前:デフォルトの名無しさん mailto:sage [2006/01/02(月) 14:27:27 ] >>438 つか比較すること自体が変だ。 delegateは型、eventはメンバ。class(型)とメンバの違いが分かりませんって 言われたってこっちが説明に困るよ。
444 名前:440 mailto:sage [2006/01/02(月) 23:54:45 ] >>441 そこらへんが答えだと思うんですが、まだよくわかりません。 >>442 >eventはdelegateの呼び出しの簡便化のため は >delegateはdelegateの呼び出しの簡便化のため でもいいとおもうんです。eventなど持ち込まなくてもできると思うんです。 >>443 例えば、 public delegate void LogHandler(string message); public event LogHandler Log; を public delegate void LogHandler(string message); public LogHandler Log; と書いても動くと思うんです。 まだ.NET初心者なのではずしてるかもしれませんが。
445 名前:440 mailto:sage [2006/01/02(月) 23:56:41 ] あ、上のコード例はC#です。
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++は。
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 で標準化の審査中
609 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 13:03:53 ] >>608 それは C++/CLI だよね? もう Managed C++ はいらんでそ。
610 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 14:01:33 ] (1)for each( int obj in v) (2)for each( int^ itr in v) (3)for each( int% r in v) for each する場合、どれがお勧め?
611 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 15:26:41 ] >>609 www.ecma-international.org/publications/standards/Ecma-372.htm これがISOに提出された。まあISOになる可能性はないと思うけれど。
612 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 16:55:39 ] >>611 あれ?ないの?
613 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 17:22:33 ] CLI 自体はすでに ISO 標準になってるんだよな。 Java VM も ISO 標準にすればいいのに。 Java 言語とは切り離して。
614 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:06:42 ] で、ISO 標準て何の役に立つの?
615 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:07:31 ] ネームバリュー
616 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:10:32 ] 実質を無視したネームバリューなら、 Java >>>>>>(壁)>>>>>> C丼(I$O) だね。
617 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:13:08 ] >>616 実質的なネームバリューだと思うけど。
618 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 21:22:11 ] >>616 Java のネームバリューってかなり実質的なものだと思うぞ。
619 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 23:26:25 ] >>613 EMCAの時に、J2EEも同時に採用されることにこだわった。 当時は、IBMその他ベンダーが独自ビジネス向けフレームワークの覇権を争っていた。 Javaはまだまだ言語規格の変化が激しいから、10年前なら見送りも妥当だったと思う。 今は、C++みたいにろくにない実装も規格を作るのに抵抗がなくなってきている。 だからJavaも今からISOの提出してもいいと思うけれど、 EMCAのWin系規格みたいに放置されると困るよね。 C#やCLIもそんなことにならないかと心配。
620 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 04:09:12 ] >>618 確かにJavaはネームバリューだけだな
621 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 09:09:07 ] ドトネッツは実質NO.1 (ベーパーウェア部門)
622 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 13:57:47 ] >610 vの中身を書き換えたいときは、必然的に(3) (1)と(2)でコンパイル結果に差が出るかは知らんが、同じなら(2)の方が他の参照型などと統一性が採れると思う
623 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 22:40:58 ] int^ だとボックス化のコストが高くない?
624 名前:610 mailto:sage [2006/02/15(水) 09:08:44 ] >>622 ,623 値型の場合、(1)が無難な気がしてきた。(2)はテンポラリGCポインタなのか...(3)はなんか怪しい... 参照型の場合、(2)しか選択もうない気が、第4の選択肢は危険ぽいし... ref struct Test{ Test(){}int x;Test(int in_x) :x(in_x){} static void test(){ System::Collections::Generic::List<int> v;v.Add(1);v.Add(2);v.Add(3); //case1 //cli::array<int>^ v = {1,2,3}; //case2 #define SHOW for each(int i in v){Console::WriteLine(i);} for each(int i in v){i *= 2;}SHOW;//result->{1,2,3} for each(int^ p in v){(*p) *= 2;}SHOW;//result->{1,2,3} //for each(int^% p in v){(*p) *= 2;}SHOW;//danger for each(int% r in v){r *= 2;}SHOW; //case1->{1,2,3},case2->{2,4,6} -> unsafe code } static void test2(){ System::Collections::Generic::List<Test^> v;v.Add(%Test(1));v.Add(%Test(2));v.Add(%Test(3)); //cli::array<Test^>^ v ={ %Test(1),%Test(2),%Test(3) }; #define SHOW2 for each(Test^ t in v){Console::WriteLine(t->x);} for each(Test^ p in v){(*p).x *= 2;}SHOW2;//result->{2,4,6} for each(Test^% r in v){(*r).x *= 2;}SHOW2;//result->{4,8,12},case2->{2,4,6} -> unsafe code } };
625 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 12:54:23 ] >624 何を悩んでいるのかよくわからん 列挙する型に合わせれば良いんじゃないか? 適材適所だろ
626 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 16:25:30 ] ^うざ
627 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 19:45:53 ] よーく見ると、顔に見えてくる。
628 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 14:49:04 ] VS 2005 C++だす × String str = "Hello"; ○ String ^str = "Hello"; いちち^付けないといけないみたいですね、 ^ってどういう意味デツカ
629 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:09:39 ] >>628 C++/CLIに於けるポインタ
630 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:17:47 ] そっか、それで *を^に変えろって困憊羅が言ってるの、見たような希ガスル しかしなぁー、なぜ換える必要があるのかと、悩む事小10分 *アスタリスクはなんか他の用途でつかってるのかなぁ??
631 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:30:01 ] こう覚えた方が早い * を使っているのは C++ ^ を使っているのは CLI 拡張
632 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:44:42 ] >>630 *のポインタ型同士はポインタ演算があるから演算子多重定義ができない。 ^の追跡ハンドルならそのようなことがないから演算子多重定義ができる。
633 名前:628 mailto:sage [2006/02/18(土) 16:29:22 ] >>631 >>632 サンクスです GUIが使えるWin32でアプリケーションを作りたくて、NETや本を読んで 今学習しているところなんです、Visual Studio 2005 C++の Win32コンソールアプリケーションを開いてボタンを押したら、 テキストボックスにメッセージを表示させたりとかして 動かしているのですけど訳も分からずに、CLIを使っていたんですね(;^ω^) VS2005C++な環境でネイテイブなC++でコンソールアプリケーションは 作れないのでしょうか?MFCも挑戦しようと思いましたが、又別物のようですし 初心者的にはどの方向で進んだら良いでしょう、小一週間悶々としています
634 名前:628 mailto:sage [2006/02/18(土) 16:32:13 ] スマソ × GUIが使えるWin32でアプリケーションを作りたくて ○ GUIで動作するWindowsアプリケーションを作りたくて
635 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:45:58 ] 初心者ならC#へ行ってみてはどうかと惑わしてみる。 VS2005C++使った事無いけど、アンマネージド(ネイティブ)は作れるはずだ。
636 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:55:38 ] 2005は普通に「Win32コンソールアプリケーション」でネイティブを作れるはずだが… Expressだと違うのか?
637 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:01:58 ] >628 GUI でモノを作りたければ、素直に MFC に進んだ方がいいと思われ C++/CLI はちと初心者にはお勧めできない。普通の方法では満足できなくなった玄人向け だから あとは、635 の進めるとおり、C# でモノを作ってみて満足できなくなったら、またこちらに 出戻ってくると言うのもいい
638 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:15:12 ] >>633 コンソールアプリケーションとテキストボックスのつながりがわからん
639 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:36:48 ] すんません、又間違えていました CLRからWindowsフォームアプリケーション作成でした
640 名前:デフォルトの名無しさん [2006/02/18(土) 21:12:37 ] 他スレから誘導されてきました。 C++/CLIを使っているんですが、 自分のクラスライブラリのシングルトンのクラスにあるSystem::Drawing::Size型のプロパティを変更しようとしたら p->Size = System::Drawing::Size(64, 64); と設定はできるのですが、 p->Size.Width = 64; のように個別に設定しようとしたら必ず0になってしまいます。 どうすれば個別に設定できるようになりますか。
641 名前:640 mailto:sage [2006/02/18(土) 21:26:55 ] 投稿して気付いたのですが、Sizeの部分をハンドルにしたら設定出来るようになりました。 何故かがわからないですが・・・。 スレ汚しすいませんでした。
642 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 21:48:34 ] >>641 System.Drawing.Sizeは型値だから扱いが面倒だのう。
643 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 06:34:22 ] >>633 スレ違い pc8.2ch.net/test/read.cgi/tech/1131590396/
644 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 14:36:44 ] >>641 というかそれはあまりよろしくない。たぶん。 p->Size = Size(64, p->Sizte.Width); としなさい(こういうCLRの常識みたいなのもいるから また複雑なんだよな>C++/CLI)。
645 名前:644 mailto:sage [2006/02/19(日) 14:43:34 ] にゃー、コード間違いすぎ p->Size = Size(64, p->Size.Height); こう。
646 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 15:20:04 ] そんなんわからん奴はC#やJavaも微妙だろ。
647 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 15:28:54 ] >>646 …まぁな。実体の追跡もできないレベルだし。 C#はまだ動かないだけで安全だけど、こういうやつには特にC++は使わせたくない。 メモリ関係のバグ大量コードを書く。しかもそういう場合デバッグビルドだと動いたり することもあるから性質が悪い…。
648 名前:デフォルトの名無しさん [2006/02/19(日) 20:48:42 ] Visual C++ 2005 Express Edition の環境で、はまってしまい、皆さんのお知恵を拝借したいです。 Webのダウンロードなのですが、 方法1 WebClient^ wc = gcnew WebClient(); Stream^ st = wc->OpenRead("www.yahoo.co.jp/ "); Encoding^ enc = Encoding::GetEncoding("euc-jp"); StreamReader^ sr = gcnew StreamReader(st, enc); String^ out = sr->ReadToEnd(); Debug::WriteLine(out); これはうまくいきWebデータの取得ができます。 方法2 WebClient^ wc = gcnew WebClient(); Byte ^ myDataBuffer = wc->DownloadData("www.google.co.jp/ "); Encoding^ enc = Encoding::GetEncoding("euc-jp"); String^ out = enc->GetString(data); このコードだとコンパイルエラーです。 エラーメッセージは、 .\MainForm.cpp(50) : error C2440: '初期化中' : 'cli::array<Type,dimension> ^' から 'System::Byte ^' に変換できません。 with [ Type=unsigned char, dimension=1 ] この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 とあります。 バイト配列に入れたいだけなのに。
649 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:05:11 ] >>648 WebClient::DownloadData()の戻り値の型はcli::array<unsigned char>^。 Encoding::GetString()の引数もcli::array<unsigned char>^。
650 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:12:35 ] ^ ←なんかコレうざい。よくわからないけど腹立たしい。
651 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:18:36 ] (^^:
652 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:20:18 ] ^<T>^
653 名前:648 [2006/02/19(日) 21:44:16 ] >>649 Byte を cli::array<Byte> にしたところ、できました。 cli::array<Byte> ^ myDataBuffer = wc->DownloadData("www.yahoo.co.jp/ "); Encoding^ enc = Encoding::GetEncoding("euc-jp"); String^ out = enc->GetString(myDataBuffer); ばっちりです。これで先に進めます。 つい最近まで C++ Builder 使いだったので、いろいろと戸惑ってます。 ポインタは使えず、^ というものが必要だとわかるまで、延べ1日くらいかかってます。 勉強がてら少しずつ移植していきます。 どうもありがとうございました。
654 名前:Pascal mailto:sage [2006/02/19(日) 23:09:23 ] >>650 呼んだ?
655 名前:デフォルトの名無しさん [2006/02/20(月) 00:22:49 ] >>650 あなたの心が汚れてるからですよ(^^;;;
656 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 00:30:26 ] そんなばかな^^;
657 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 01:26:15 ] >>650-652 ヤベ、ツボにはまったw
658 名前:デフォルトの名無しさん [2006/02/21(火) 10:07:18 ] >>422-423 >ダイレクトに C++ を知らずに、C++/CLI に手を出すのは、止めた方がいいだろ >さっさとC#かVBで始めたほうがいいと思う。 とりあえずC#で始めようと思った矢先、C++/CLI とかいうのが目に入って、 「ファイナライザいいな」とか思ってしまったんですが、 やっぱりC#から始めることにします。 >>424 関数単位ですか。 つまり、関数呼び出しを共通化することで様々な実行環境にあるコードを一つのプログラムにまとめることができたと言うことでしょうかね。
659 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 11:10:22 ] >>658 ああ、C#にしたのか。まぁそうしとけ。C++/CLIはネイティブの知識(C++)とCLRの 知識(C#)が両方要求されるひどい言語だ。最低限どっちかぐらい自由に使える ようになってからおいで。…両方自由に使えるぐらいじゃないと使える言語でも ないかもしれないが。 ファイナライザ?C#にもあるぞ。というかCLR用語だそれ。 まぁDisposeがスタックオブジェクトのように書けることをいいたかったんだろうけど。 川俣とかが取り上げているほど、たいしたものじゃない。あの人は大げさに書く文体 が売りだからな。いい悪いは別にして。
660 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:17:52 ] 通のお勧めは関数のオーバーライド ディスポーズ・パターンの変形に目が眩んでちゃ、まだまだ
661 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:25:46 ] >>660 ポリモにならんじゃん
662 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:32:20 ] >>658 ~hogeか!hogeが使われている場合に下のようなコードを自動生成してくれる。 GC.SuppressFinalize(this)がむき出しにならないだけスマートだね。VB.NETにもほしい機能だと思う。 void Dispose(bool disposing) { if (disposing) ~hoge(); else !hoge() } void Dispose() { Dispose(true); GC::SuppressFinalize(this); }; void Finalize() { Dispose(false); } deleteしたり { ClassA a(); ...; } でスコープから離れた場合は Dispose()が呼び出されるだけでその場でGCされるわけではない。
663 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 00:50:01 ] !hogeなんてあったんだ
664 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 07:21:27 ] >>662 いや、えーと、このスレにいる以上知っている。 ildasmでも確認したしな。ああ、そうか、それをC++/CLI用語でFinalizerというのか。
665 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 12:42:51 ] >661 おまいはC++/CLIにおける関数上書きの奥の深さに気付いていない ここに IEnumerable を継承したインターフェイス IEA と IEB がある その双方を実装した ref クラス RAB は明示的オーバーライドによって列挙の方式を IEA と IEB によって変更できる つまり、RAB から取得したインターフェイスによって、for each のオーダーを自由に 選択できるわけだ
666 名前:デフォルトの名無しさん [2006/02/22(水) 16:05:53 ] MSがC++/CLIを捨てるのは何年後くらいですか?
667 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 16:13:12 ] MFCの如くこの劣悪貧を10年使うかも。 C++ってだけでもSTLやBoostが混ざってくると複雑なのに、正直CLIはカンベンて感じだおね。
668 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 17:22:04 ] >>667 駄菓子菓子、これがないとネイティブとかからCLRが非常に使いにくい。 ほら、次でWPFとかなんかたくさんあるし。
669 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 23:36:01 ] マイクロソフトがもうイラネと思ったら容赦なく捨てにくるさ。
670 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:00:23 ] >>669 そりゃ日本だけ。海外ではVBerが反乱おこして、msも今では Love VB, Love C#だとよ。
671 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:53:32 ] C#は、VC++とVBの中間を行くような言語だから、 どっちからも反発が強いだろうね。
672 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:03:54 ] 反発はしないけど、C++で出来るなら C++ Nativeでやっちゃうよ。 必要なとこだけ CLIで .Netなんてライブラリ感覚で使えばいい。
673 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:20:44 ] /clrでNativeコンパイルすると遅くなる?
674 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 08:50:40 ] >673 >348
675 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 09:37:51 ] >>669 要るだろ。 だって、C++市場をCLIで混乱させることにより、 開発者をWin@ブビ or Win@C丼で留めておける。
676 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 10:00:24 ] >>674 遅くなるのは事実としても、何で遅くなるんだろ? 異なるライブラリがリンクされるからか? lstrcmp自体の実装が異なるのか? それとも呼び出し時にスタックチェックでも入ってるのかね…。
677 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 14:21:46 ] >676 単純なループでは簡単に結論が出ない問題かもしれない ちなみに漏れの環境では CLR 6 - 7 sec. Native 8 sec. となった。意外だがCLRの方が早い Win のほうは -02 -0t を付けた状態で、CLRの方はデフォルトのリリースモジュールだ
678 名前: mailto:sage [2006/02/23(木) 22:30:11 ] >>670 そんな話しきいたことネ
679 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 22:47:11 ] 誰か、C++/CLI で吐いた実行ファイル、 mono で動かした奴いる?? 以前 VS.NET 2003 の C# で書いたコンソールアプリなら mono で動かしたことあるんだけど。
680 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 23:22:55 ] mono がそもそも .net framework 2.0 に対応してたか? してるなら、/clr:pure で動くだろう
681 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 08:17:28 ] nullptr
682 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 11:48:08 ] ガッ^
683 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 17:24:15 ] >>678 blogs.msdn.com/hiroyask/archive/2006/02/13/530769.aspx ケツの穴が広がるぐらい、ハードに読めや。
684 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 21:07:35 ] >>683 良く読んだよ >表の顔の日記 > 裏の顔の日記 > さっさと消えてくんないかな。 うざいんだけど、 まじで。
685 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 04:29:20 ] という電波でも飛んでるのか?
686 名前:648 [2006/02/25(土) 11:39:03 ] また教えてください。 C++での構造体の以下の宣言 typedef struct tagHOGE{ int x; long y[4]; }HOGE; これをマネージ環境にしようとした場合 typedef struct tagHOGE{ int x; long y[4]; ← ここが混合型らしい }HOGE; .\MainForm.cpp(26) : error C4368: 'y' をマネージ 'HOGE' のメンバとして定義できません。混合型はサポートされていません というエラーが出ます。 単に4つのlong型の配列の定義がしたいのですが、マネージ環境では、どのようなやり方があるでしょうか?
687 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 11:43:26 ] typedef struct → typedef value struct では?
688 名前:648 [2006/02/25(土) 12:05:23 ] >>687 そうです。コピペ間違いました。 value struct HOGE{ int x; int y[4]; }; と記述してます。
689 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:17:18 ] ・・・value型使わず、ネイティブ型で定義すれば?
690 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:20:37 ] あとは ref にして array<long>^ y で宣言して、コンストラクタで初期化するか
691 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:23:04 ] value struct HOGE { int x; array<long>^ y; }; はコンパイルが通るが、仕様上これでいいのか?
692 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:38:17 ] ok ハンドルは nullptr で初期化される
693 名前:648 [2006/02/25(土) 12:58:50 ] 皆さん、早速のレス、ありがとうございます。 >>689 ネイティブで定義すればできることは確認してます。 ただそうすると少し複雑なソフトを組んだ場合、きちんとメモリの後処理をしないと メモリリークが発生するので、マネージにすればメモリガベージの効用であまり複雑に 考えなくともよいかな、と思っているのです。 >>691 そのやり方もわかります。 各関数で、 void func1(void) { HOGE wk1; wk2.y[2] = 123; } void func2(void) { HOGE wk2; wk2.y[2] = 456; } というようなことをしたいのです。 2〜3日あがいてみて自分ではできなそうだったら、ネイティブで定義してやっていきます。 マネージ環境に慣れていけば、そのうち、何か気づきがあると信じて進むしかありません。
694 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:05:44 ] 2〜3日あがくなら2〜3日かけてマニュアル読んだほうがいいような気がする
695 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:45:46 ] >>693 値型にGCを求める必要がある?
696 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 14:23:50 ] C++/CLIのスレ見てると無意味にvalueを使いたがる人が多い気がするな。 valueは動作に癖があるから基本refで作ったほうがいいと思う。
697 名前:デフォルトの名無しさん [2006/02/25(土) 16:22:08 ] value使ったほうが処理速度が速いとでも思い込んでいるんじゃ? クセがあるには同意。
698 名前:648 [2006/02/25(土) 17:38:04 ] いろいろとサイトをまわりまして、以下のようにしたところ動いているように見えます。 public ref struct HOGE { int x; array<long>^ y; HOGE() { y = gcnew array<long>(4); } }; void func(void) { HOGE^ abc = gcnew HOGE; abc->x = 10; abc->y[2] = 20; for(int i=0; i<4; i++){ Debug::WriteLine(abc->y[i]); } } 検討違いのコードでなければよいですが。 みなさん、いろいろとレスありがとう。
699 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 20:55:45 ] >>698 これでも平気。 void func() { HOGE abc; abc.x = 10; abc.y[2] = 20; for (int i = 0; i < 4; i++) { Debug::WriteLine(abc->y[i]); } }
700 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 22:33:45 ] C++は真のローカル変数を使える言語なんだから、(ユーザー定義オブジェクト がスタック上に配置できる)GCが必要な場合ってのはそんなに多くはならない ってビョーン先生が言ってた。
701 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:11:17 ] >>700 それはわかるけれど、C++/CLIはCLIの世界にあわせないといけないからさ。
702 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:42:48 ] C++/CLIは二つの言語が同居しているようなものだからな。 C++の拡張というより建て増し。
703 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:49:05 ] >699 それだと、配列のサイズが3で固定されちゃわない?
704 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 00:22:20 ] >>702 二世帯住宅
705 名前:デフォルトの名無しさん [2006/02/26(日) 00:49:18 ] ビョーン先生が取り扱っている案件はそうかもしれんけどな。 動的にオブジェクトが増えたり減ったりする案件のほうが多い。
706 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 00:56:47 ] >>700 しかしビョーン先生はGCをそんなに否定していない。 既存のC/C++のコードと互換性を保ったまま導入できるのなら、 C++に入れてもいいというようなことをD&Eで書いている。
707 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 20:57:17 ] >>705 vector使えばええやん。メンバかローカルにしておけばdeleteいらん。
708 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 21:08:56 ] >>707 グローバルでもdeleteいらんぞ
709 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 21:14:38 ] 別に GC なんて C++/CLI の利点じゃないだろ 単に .net framework を既存の C++ と混同することなく使えるってとこが一番重要さ C++/Smalltalk とか C++/Squeak とか出てこないかな
710 名前:デフォルトの名無しさん [2006/02/27(月) 01:56:21 ] 【初心者歓迎】C/C++室 Ver.25【環境依存OK】から誘導されてきました( `・ω・´)ノヨロシクー VC8でopenFileDialogを使いたくて MSDNのソースを試してみようと ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.openfiledialog.aspx 説明を読み フォームに Button を配置して using namespace System;を宣言して、 下記のコードを試したのですがエラーが出ます、何か読み込んでいないファイルがあるか設定のミスだと思うのですが、原因が分かりませんよろしくお願いします。 private: voidbutton1_Click(Object^/*sender*/,System::EventArgs^/*e*/) { Stream^myStream; OpenFileDialog^openFileDialog1=gcnewOpenFileDialog; openFileDialog1->InitialDirectory="c:\\"; openFileDialog1->Filter="txtfiles(*.txt)|*.txt|Allfiles(*.*)|*.*"; openFileDialog1->FilterIndex=2; openFileDialog1->RestoreDirectory=true; if(openFileDialog1->ShowDialog()==::DialogResult::OK) { if((myStream=openFileDialog1->OpenFile())!=nullptr) { //Insertcodetoreadthestreamhere. myStream->Close(); } } } error C3083: 'DialogResult': '::' の左側のシンボルには、型を指定しなければなりません error C2039: 'OK' : '`global namespace'' のメンバではありません。 error C2065: 'OK' : 定義されていない識別子です。
711 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 07:06:19 ] >>710 System::Windows::Forms::DialogResult::OK とフルで書く。
712 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 07:26:28 ] >>711 最後まで仕様が揺れた所かも知れないね。
713 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 10:47:00 ] この状況って System::Windows::Forms まで using で指定しているから、単純にグローバル スコープ指定していることが問題なんじゃね? 12行目の ::DialogResult を意味なく、:: で始めるな、と
714 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 11:06:47 ] >>713 ところがどっこい DialogResult::OK と書くと今度は System::Windows::Forms::Form::DialogResultが無いというエラーになる。 using namespace は探しに行ってくれないらしい。
715 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 11:38:26 ] ん、サンプルだと :: で始めてるな っていうか、>710 って名前空間 System しか宣言してないって言ってるが using namespace System::Windows::Forms が宣言されている環境では ::DialogResult::OK でエラーなくコンパイルできるな 先頭 :: の名前検索ルールって、グローバル指定じゃないんだ・・・
716 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 13:38:23 ] >>714 using namespace System::Windows::Forms; してあるということ? その"Form"は何よ? >>715 namespace N { int x; }; using namespace N; int x; int f(void) { return x; } ←このxはambiguousになる。それで正しい。
717 名前:715 mailto:sage [2006/02/27(月) 13:45:08 ] まず、 >710 の問題は、単に System::Windows::Forms が using 指定していないから using namespace System::Windows::Form; を付ければおっけー >716 ::DialogResult ってなっているから、先頭に :: を付ける場合ってグローバル名前空間の 名前空間指定だと思ってた。カレント解決してくれるんだ
718 名前:716 mailto:sage [2006/02/27(月) 13:55:54 ] >>717 いや、「正しい」はグローバル参照の方。 > using namespace System::Windows::Form; > を付ければおっけー Forms
719 名前:715 mailto:sage [2006/02/27(月) 18:46:14 ] ということは、MSの実装はバグかMS独自仕様か、微妙なとこだな
720 名前:710 [2006/02/27(月) 19:46:54 ] 皆さんどうもありがとう、遅くなってすみません 今帰宅しました ヘッダー部分ですが #pragma once #include <fstream> #include <vcclr.h> #include <stdlib.h> namespace hoge { using namespace System; using namespace System::IO; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace std; と宣言しているのですが 皆さんの、ご指導通りやってみましたが、 error C3083: 'DialogResult': '::' の左側のシンボルには、型を指定しなければなりません error C2039: 'OK' : '`global namespace'' のメンバではありません。 error C2065: 'OK' : 定義されていない識別子です。 .\hoge(8) : error C2337: 'STAThreadAttribute' : 属性が見つかりません。 とこんな感じで、 ワケ 川・∀・川 ワカメです
721 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:17:53 ] >>720 その一 using namespace ... using namespace ... namespace hoge { と順番を変えたら ::DialogResult::OK でコンパイルが通る。 その二 hoge::DialogResult::OK でコンパイルが通る。 恐らく下のも通るはず。 [hoge::STAThreadAttribute] その三 namespace hoge { を使わずすべてGlobalに書く これが仕様なのかバグなのかは俺にもわかんね〜
722 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:17:53 ] 気になって少々試してみたが、関数内でusingすればDialogResult::OKと書いてもエラーにならなかった。 void button1_Click(System::Object^ sender, System::EventArgs^ e) { using ::System::Windows::Forms::DialogResult; OpenFileDialog ofd; ofd.InitialDirectory = "c:\\"; ofd.Filter = "txtfiles(*.txt)|*.txt|Allfiles(*.*)|*.*"; ofd.FilterIndex = 2; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == DialogResult::OK)
723 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:39:09 ] ほとんど素のC++の話題になってるけど、まあいいか。 なんでDialogResultが重なってんだろ? using ::System::Windows::Forms::DialogResult; if (ofd.ShowDialog() == OK) か using ::System::Windows::Forms; if (ofd.ShowDialog() == DialogResult::OK) ならわかるけど。
724 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:45:59 ] >>723 C++/CLIの列挙子は列挙型の中のスコープにある。
725 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 23:10:50 ] >>721 *.h でこれをやると using が include 先に伝播してしまうので思わぬ名前の重複が起きてしまう。 >using namespace ... >using namespace ... >namespace hoge { 妥協案としては、メンバー関数の実態を *.c に分離してから::DialogResult::OKと指定する。 using namespace hoge; namespace hoge { void hoge::button1_Click(System::Object^ sender, System::EventArgs^ e) { if (ofd.ShowDialog() == ::DialogResult::OK)
726 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 00:29:25 ] ISO C++だとusingディレクティブは名前を可視にするだけで、 usingディレクティブが書かれた名前空間へ名前を持ってくるものではなかったはず。 namespace foo {int x;} namespace bar {int y;} using namespace foo; using bar::y; ::x = 10; //NG. x = 0;或いはfoo::x = 0;としなければならない。 ::y = 20; //OK. もちろんy = 0;或いはfoo::y = 0;も問題ない。
727 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 00:59:11 ] namespace N { namespace M { enum E { zero = 0 }; }; }; using namespace N; int f(void) { return M::zero; } あるいは、 namespace N { namespace M { enum E { zero = 0 }; }; }; using namespace N::M; int f(void) { return zero; } なんじゃないのか? // Eのenum名指定なしでanonymous enumにしても同じ。
728 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 01:38:12 ] >>727 CLRタイプのenum class と Cタイプのenumの2種類あって、 後者の話ならそのとおり。
729 名前:710 mailto:sage [2006/02/28(火) 21:38:39 ] 皆さんのおかげで、openFileDialogを動かす事ができたのですが 肝心な事を忘れていました、ファイルを選択してボタンを押しても 実際にファイルが開かないんですよね(;^ω^) // Insert code to read the stream here. ってコメントアウトしてある部分が気になるけど、ここに何か 書かないといけないのかな?
730 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 21:43:05 ] 教えてクンマンセー!
731 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 21:53:32 ] コメントが何のために有るのかわかってるのか? っていうか読めよ。
732 名前:710 mailto:sage [2006/02/28(火) 21:54:54 ] >>731 英語読めません(´・ω・`)
733 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 21:57:00 ] >>732 んじゃ、英語の勉強から。英語書けないならともかく、読めないんじゃ プログラミングなんてやってられない。
734 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 22:35:55 ] 翻訳サイトも使えないようなヤツはプログラミングやめれ
735 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 22:40:27 ] ていうか、732は710の偽なんですが
736 名前:732 mailto:sage [2006/03/01(水) 00:45:52 ] 俺は嘘つきだから俺の言うことは嘘ばっかりさ。さてこの嘘はホントかわかるかねwww
737 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 01:08:24 ] そんなおもしろくないよ?
738 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 01:32:16 ] >>733 ひまわりが専門なので関係ないでしょ
739 名前:710 mailto:sage [2006/03/01(水) 02:21:51 ] ゚・*:.。..。.:*・゜ヽ( ´∀`)人(´∀` )ノ・゜゚・*:.。..。.:* できたYO! 英語のサイトで(・∀・)イイ!!ヒント見つけて 多少漏れのセンスでアレンジしましたがなにか つーかさー"StreamReader c++ textBox"で具具っても C#のサンプルや話題が多くて、参考にならなかったんで 英語でぐぐったら キタキタキタキタ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!! やっぱり本場はいいサンプルが多いな、でもそのものズバリはなかったが { // Insert code to read the stream here. System::IO::StreamReader ^ sr = gcnew System::IO::StreamReader(openFileDialog1->FileName); String ^temp = sr->ReadToEnd(); textBox2->Text=temp; //MessageBox::Show(sr->ReadToEnd()); sr->Close(); myStream->Close(); }
740 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 02:32:10 ] C++/CLI の場合でも .NET Framework のサンプルがほしければ C#やVBのをそのまま使えるってのに
741 名前:710 mailto:sage [2006/03/01(水) 02:37:58 ] |∀・).。oO(・・・) そうなのか?
742 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 02:38:23 ] ガンガレ
743 名前:710 mailto:sage [2006/03/01(水) 02:43:27 ] ムリッポ
744 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 07:19:26 ] >>740 うむ。 ちょっと間接参照の記述が違うくらいで、 流れは C# のコードのままでいいな。 まぁそれが C++/CLI の真骨頂でもある。
745 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 14:15:46 ] >>739 C++/CLIなんだからいちいちgcnewする必要はないと思う。
746 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 14:50:01 ] >>739 つかCloseもfinally句に書いてないし。 C#ならusing、C++/CLIならスタックオブジェクトにしろよなほんと。
747 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 16:30:41 ] で、STLはどうしてるんだ、おまえら?
748 名前:デフォルトの名無しさん [2006/03/01(水) 16:49:26 ] C++/CLI でGUIなアプリつくるべ、と、フォームをデザインして 遊んでます。で、みなさん、アプリで必要となる大量の 変数たちは、class Form1 のメンバとしてずらずら宣言してしまって 構わないんでしょうか? 今までは UNIX 系でのコンソールアプリ主体で、自前の アプリケーションクラスを用意して main() の中から そいつをインスタンス化して、という感じでやってました。 Windows でのグラフィカルなアプリでの作法では、 自動生成された class Form1 にどんどんメンバを 追加しちゃっていいんですか? 当然イベントハンドラなどはデザイナで追加されていくわけで、 手動で追加したメンバのためにフォームデザイナが混乱して しまわないかすごく不安です。
749 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 16:54:58 ] STLが無い、C++なんて。 クソ。
750 名前:デフォルトの名無しさん [2006/03/01(水) 16:57:44 ] >>749 え?C++/CLI で STL つかえないの?
751 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 17:06:05 ] >>750 ネイティブ型に対しては使える。 そしてマネージ型対応のSTL/CLI(旧称STL.Net)がVC++ 2005と同時に公開されるはずだったのだが、 伸びに伸びて未だ公開されていない。 www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp いっそのこと俺たちで作るかw。
752 名前:デフォルトの名無しさん [2006/03/01(水) 17:18:06 ] >>751 あ〜びっくりした。 そうだよな、ネイティブ型に対しては使えるよな? C++ で書きためてきた std::vector 使ってる 数値計算用のライブラリがあって、どうしても それから逃れられない + DirectX で可視化したい、 という要求があって、それ満たすには C++/CLI しか ないだろ、ってことでこれから使おうと思ってたんで、 ちょっと焦った。
753 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 18:24:32 ] >>752 いやいやいや、お前DirectXをなんと心得る?
754 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:09:05 ] >>753 まだ、OpenGL のかわりみたいなもん、 くらいの認識です。頂点データの扱いとか ぜんぜんちがうんですかね? その話題はスレ違いですが。 目的は動き回る多数の分子模型の ようなものなんですが。
755 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:16:26 ] DirectXはまだネイティブがメインなのにどうしてSTLの無いC++/CLIを無理に使おうとするのか
756 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:28:40 ] com::ptr 型がそこにあるから
757 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:29:40 ] OpenGLでもいいし。
758 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:40:32 ] >>755 いや、それすらまだ知らないんですよ。 普通に次元の可視化するときに、 フォームにぺたぺたとやってえらく簡単に できたもんで、この勢いで 3D もいける? とか思ったわけです。 >>757 いわれていれば、そうかも
759 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 20:01:27 ] >>758 そのノリでやりたいんなら(ビジネスっていうかグラフ化とかな)、 確かにマネージのAvalonが向いてる。けどもまだない。残念。 DirectXとOpenGLは例えばDirectXはCOMだったりとか細かくは違う。 けど理論はあんまり違わんので好きなほうでどうぞ。 一般的には凝ったことしなければOpenGLのほうが簡単。
760 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 20:11:40 ] スレ違いなんだが、VTKとかいろいろあるじゃん? > フォームにぺたぺたとやってえらく簡単に > できたもんで、この勢いで 3D もいける? そんな子どもっぽい理由じゃなくて、(発端じゃなくて直線的な選択の事ね) 道具くらいちゃんと自分で選べるようになろうよ。 sal.linet.gr.jp/E/1/index.shtml でも漁れ。多くがWindowsもOK。 OpenGLやDirectXを直接叩くなんて馬鹿らしいよ。
761 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 20:27:15 ] >>760 THX 論文に貼る図だと、動画じゃないので普通に gnuplot で作ってるんですが、プレゼンだと やっぱ動かなきゃな、ってことで取り組んでます。 色々あるんですね、こりゃ楽しそうだ。
762 名前:710 mailto:sage [2006/03/01(水) 21:11:31 ] 今晩も盛り下がっていますね皆さん( ノ゚Д゚)こんばんわ >>744 間接参照の仕方を巧く解説してるサイトってない? >>745 newでは困憊羅君が、言うこと聞いてくれませんでした >>746 スタックオブジェクトって、なに?グラフや絵を描くメソッドのことかな?と聞いてみる 夕べ ttp://www.athomejp.com/goldfish/vcs/openfiledialogreader.asp ここのソースをC++に書き換えたらどんな風になるのかな? C#の.の使い方がポイントだと思うが、もう少し理解できない 多分>>744 の言っていた、間接参照の仕方の事だと思うのだが C++の場合漏れは、::が出てきたら 何々の何々と読んでいるのだが、C#の.の読み方(解釈)教えてください //ファイルを指定させる DialogResultresult=openFileDialog1.ShowDialog(); if(result==DialogResult.OK) { //指定されたファイルを読み取る System.IO.Streamstream=openFileDialog1.OpenFile(); System.IO.StreamReaderstreamR= newSystem.IO.StreamReader(stream, System.Text.Encoding.Default); stringstr=streamR.ReadLine(); //ファイルを読み取り while(str!=null) { //デバッグ出力 Debug.WriteLine(str); str=streamR.ReadLine(); } //StreamReaderをクローズ streamR.Close(); }
763 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 21:42:20 ] >>762 C#の . はC++(/CLI)だと、 . -> ::のどれか。 . 値(ポインタ・ハンドルでないもの)と参照(ネイティブのT&とマネージドのT%) -> ポインタ・ハンドル :: 静的メンバやその他(クラス内で親クラスを参照するときなど) なるべく同じようにC++/CLIへ写すとこうなる。 //ファイルを指定させる DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult::OK) { // 指定されたファイルを読み取る System::IO::Stream^ stream = openFileDialog1.OpenFile(); System::IO::StreamReader^ streamR = gcnew System::IO::StreamReader(stream, System::Text::Encoding::Default); System::String^ str = streamR->ReadLine(); // ファイルを読み取り while (str != nullptr) { // デバッグ出力 Debug.WriteLine(str); str = streamR->ReadLine(); } streamR->Close(); } (続く)
764 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 21:43:14 ] これをスローカル変数を使うようにして、 個人的にReadLineが2度もソース上に現れるのが気になったのでそれを修正したもの。 //ファイルを指定させる DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult::OK) { // 指定されたファイルを読み取る System::IO::Stream^ stream = openFileDialog1.OpenFile(); System::IO::StreamReader streamR(stream, System::Text::Encoding::Default); System::String^ str; // ファイルを読み取り do { str = streamR.ReadLine(); // デバッグ出力 Debug.WriteLine(str); } while (str != nullptr); }
765 名前:デフォルトの名無しさん [2006/03/01(水) 21:48:12 ] >>764 Debug.WriteLine に nullptr 渡すのってありだっけ。 }
766 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 22:15:08 ] >>765 どうみてもまずいですね。 本当にありがとうございました。 そう書こうと思ったけど、その前に試してみた。 System::Diagnostics::Debug::WriteLine(static_cast<String^>(nullptr)); 全く問題なかった。 ついでに言うとそれ::にするの忘れてた。すまん。 結局こうすればよかったな。 while (System::String^ str = streamR->ReadLine()) { // デバッグ出力 System::Diagnostics::Debug::WriteLine(str); }
767 名前:748 mailto:sage [2006/03/02(木) 04:01:28 ] 盛り上がってるところ済みません。 どなたか >>748 に答えてくださるかた おられませんでしょうか・・・
768 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 05:10:09 ] >>763 解説Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
769 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 06:39:27 ] >>762 スタックオブジェクト=auto変数
770 名前:デフォルトの名無しさん [2006/03/02(木) 07:16:31 ] C++/CLIで char *ptr; ptr=(char *)malloc(sizeof(hoge)); free(ptr); が使えるのに感動した!
771 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 07:41:26 ] >>767 シングルウィンドウのアプリケーションならそれでいいと思う。
772 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 09:47:47 ] 質問させてください。 System::Collections::Generic::ListかSystem::Collections::ArrayListで 要素へのinterior_ptrを得る方法はないでしょうか。 ToArray()はコピーを返すのでだめでした。
773 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 19:35:49 ] >>772 ArrayList や List では無理、固定サイズの配列ならいける。 array<int>^ x = { 10, 20, 30, 40, 50 }; interior_ptr<int> r = &(x[3]);
774 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 23:43:37 ] VS2003のC++で書いた int __pin* px = &pX -> x; こういう、書き方はVC8では通らないようですね?
775 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 23:50:15 ] >>774 cli::pin_ptr<int> px = &pX->x;
776 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 08:25:28 ] >774 /clr:oldSyntax
777 名前:デフォルトの名無しさん [2006/03/03(金) 20:40:09 ] おっすオラ悟空 C++/CLI コンソールアプリの main では コマンドライン引数として String^ の array への ^ が 渡されるんだけど、今まで使ってたコマンドライン処理 ルーチンに int argc, char** argv って感じの おなじみのアンマネージドな形式で渡したい。 簡単な方法無い?????
778 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 20:49:34 ] >777 普通に int main(int argc, char**argv) で宣言すれば? C++/CLI は CLI 拡張であって、旧来の機能がなくなった訳じゃない
779 名前:デフォルトの名無しさん [2006/03/03(金) 20:53:27 ] おっす、オラ悟空 >>778 うまくいったぞ これで boost::program_options がつかえそうだぞ ところで boost のライブラリのうち /clr でビルドに しっぱいするのは graph, test, wave みたいだぞ。 ほとんどは *.hpp だからビルド不要だけど.
780 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 20:54:45 ] おっすオラ悟空 もしかして C++/CLI ってすげぇ戦闘能力じゃねぇか? スカウターが壊れちまったぜ
781 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 20:59:36 ] ゴクウがスカウターつけんなよ
782 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 21:01:41 ] じゃ、お前にやる
783 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 22:11:59 ] >>781 すげーワラタ
784 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 00:03:43 ] STL.Netが待ちきれなくて、System::Collections::Generic::ListのラッパをVectorという名で作ってみようとしたが、難しい。 クラスライブラリ化して他言語からも使えるようにとか考え出したら駄目だこりゃ。
785 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 05:40:23 ] CLIだとメンバにref object(ref ptrは可) おけないからSTL.NETは ptr_contenaみたいになるよね?
786 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 09:42:38 ] 何処で聞こうかと迷いましたがここでお願いします .NET Framework クラス ライブラリで メール送信するSystem.Net.Mailというクラスがあるのですが 受信するクラスはどれですか?
787 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 13:39:45 ] Socket で imap か pop のポートに繋げてプロトコルながしゃいいんでない?
788 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 13:44:22 ] 追加 ttp://mobiquitous.com/programming/apop-imap.html ま、ライブラリとかもぐぐりゃ出てくるんだが
789 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 19:41:13 ] void func(const std::string & s); ってのは書けるけど void func(const String ^ s); ってなふうにはかけないのね。
790 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 20:51:19 ] ハンドルは追跡ポインタだから const したら追跡できないだろ
791 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:02:23 ] >>790 ポイント先のオブジェクトを変更したくないよ ってのを明示したかった。const な String へのハンドル、 って書きたかったんだ。
792 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:07:25 ] 意味はわかるが、const の意味を拡張しない限りできんだろ const や volatile は GCヒープには使えないと思わないとな
793 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:14:03 ] う〜む、渡された側で不用意に変更して しまわないようにしたかったんだけどな。 マネージドなオブジェクトに対しては無理なのか。
794 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:19:51 ] 普通にconst指定出来たが、何をもって書けないと言っているんだ?
795 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:31:41 ] >>794 「const System::String ^ この型での const/volatile 修飾子はサポートされていません」 って、コンパイラが優しくおこってくれた。
796 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:46:00 ] コンソールアプリで確認したけど、エラーなんて出なかったが。 #include "stdafx.h" using namespace System; void func(const String^ s) { Console::WriteLine((String^)s); } int main(array<System::String ^> ^args) { func(L"Hello World"); return 0; }
797 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 21:58:02 ] >>796 いいなぁ。 うちのコンパイラは出るんだ。 なんかスイッチの関係かな。 もうちょっと調べてみるよ。
798 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 22:02:33 ] それ、コンパイル警告C4400で、警告レベルは4。 どうやら漏れが警告レベルを一番高くしてるから表示されてるみたいだ。
799 名前:MSDN Libraryによると mailto:sage [2006/03/04(土) 22:04:20 ] const (C++) 修飾子および volatile (C++) 修飾子は、 共通言語ランタイムの型の変数では使用できません。 次の例では C4400 エラーが生成されます。 // C4400.cpp // compile with: /clr /W4 // C4401 expected using namespace System; #pragma warning (disable : 4101) int main() { const String^ str; // C4400 volatile String^ str2; // C4400 }
800 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 22:04:21 ] いいなぁって、駄目だろ。const 指定できちゃ(w String^ hello = "Hello, World"; func(hello); だとエラーだったりして
801 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 22:15:41 ] .NETの共通として通用しないだけで、 C++/CLI上では値を変更しようとするとエラーになるし、 特に問題はないと思うけど。 ちなみに>>800 のも通った。
802 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 23:24:16 ] >>800 これが通るんだからそれが通らないわけが無いだろ。 void func(const std::string& s); std::string hello = "Hello, World"; func(hello);
803 名前:デフォルトの名無しさん mailto:sage [2006/03/04(土) 23:31:02 ] まぁそれ以前にあれだ、System::StringはImmutableなオブジェクトだ。 どっちにしろ変更できん…わけでもないけど裏技
804 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 13:02:40 ] private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { pin_ptr<const wchar_t> text = PtrToStringChars(textBox1->Text); //16進数に変換 wchar_t* pEnd; unsigned long hoge = std::wcstoul(text, &pEnd, 16); //入力されたデータの判定(省略) wchar_t* foo; foo=NULL; //unsigned long 型の整数を文字列に変換 _ultow_s (hoge,foo,32,16); String ^tmp=Convert::ToString(*foo); textBox2->Text=tmp; } ボタンを押したらtextBox1に、入力した文字を16進数に変換し、データの判定を行い 再び文字変数に変換し、textBox2に表示させるという、プログラムです、 foo=NULL;を入れないと、: warning C4700: 初期化されていないローカル変数 'foo' が使用されますと、警告され foo=NULL;としたらエラーは出ないのですが いづれの場合でも、実行すると Debug Assertion Failed! Expression:buf!=NULL とお叱りを受けます、どうしたらよいでしょうか? オナガイシマス。
805 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 16:21:54 ] 漏れには foo に割り当てられているはずの 16 wchar_t が見えないんだがどこにあるんだ? MSDN で _ultow_s が領域確保してくれるのかどうかぐらい確かめろ pin_ptr<Char> text = textBox1->Text->ToCharArray(); wchar_t* pEnd = 0; unsigned long hoge = std::wcstoul(text, &pEnd, 16); wchar_t foo[16]; memset(foo, 0, 16*sizeof(wchar_t)); _ultow_s (hoge,foo,32,16); String ^tmp = gcnew String(foo); textBox2->Text = tmp; MSDN を読んで出直してこい
806 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 17:22:58 ] >>805 ありがとう 出直す前に、スマソ unsigned longって32bitですよね、多分そのせいだと思うけど 9桁以上入力すると、結果がオーバーフローしちゃってffffffffに なっちゃいます、予期せぬ結果です wchar_tが16ビットのせいだと思うのですが、こんなときはどうしたら いいのでしょうか、教えて君で申し訳ないですが御教授お願いします。
807 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 17:30:43 ] >>806 (VC++の)unsigned longは32ビットで0〜0xffffffffの数値を格納できる。 だから十六進法で8桁までだ。wchar_tに非は無い。 たとえばunsigned long longなら64ビットあるから十六進法で倍の16桁までいける。
808 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 17:44:29 ] >>806 ありがとう unsigned long ↓ unsigned long longにしてみたら : warning C4244: '引数' : 'unsigned __int64' から 'unsigned long' への変換です。データが失われる可能性があります。 警告が出てしまい、実行するとやはり9桁でオーバーフローしてしまいました 手のほどこし方はもう無さそうですね、(´・ω・`)
809 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 17:44:57 ] UInt32::Parseじゃいかんの?
810 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 18:16:11 ] >>808 32ビットしか返さない関数使ってるんだから当たり前だな
811 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 18:18:02 ] >808 だから、自分の使っている関数の方とかをチェックしてこいといってるだろうに 受け取り側を unsigned long long にしても、変換関数が対応していなけりゃ駄目だろ おまいさんは文字列を 64 ビット長の整数値に変換したいんだから、それに対応した 変換関数を探してこい >809 がいいヒントをくれているじゃないか .net framework で 64ビット長符号なし整数値の型を探してそのメソッドを調べろよ
812 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 19:01:42 ] >>811 どうもありがとう >>806 です ttp://msdn2.microsoft.com/ja-jp/library/system.convert.touint64.aspx Convert.ToUInt64 (Int32) これでいいのかな?
813 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 19:09:18 ] ・・・おまいさん、文字列を UInt64 に変換したいんだろう? だったら使うべき変換関数は Convert.ToUInt64(String^) じゃないのかい これなら、いちいち配列変換しなくてもいいわけだし UInt64::Parse(String^) だってあるだろうに もちろん、UInt64.ToString() とすれば、文字列への変換もできるぞ C++/CLI は (3.14).ToString() ってやって文字列を取得することだってできるんだから
814 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 20:42:17 ] std::wcstoul を愛しているんだろうから、そっとしておいてやれよ
815 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:01:33 ] (´ε`;)ウーン… unsigned long long hoge; にすると _ultow_s (hoge,foo,16,16); ここで、 : warning C4244: '引数' : 'unsigned __int64' から 'unsigned long' への変換です。データが失われる可能性があります。 String ^tmp = Convert::ToUInt64(*foo); とすると : error C2440: '初期化中' : 'unsigned __int64' から 'System::String ^' に変換できません。 使用可能なユーザー定義された変換演算子がない、または 演算型のボックス化された形式からターゲット型への標準変換は存在しません なんですよね、全くなにやってんだか・・・・
816 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:11:47 ] >>815 Convert::ToUInt64は文字列をUInt64(unsigned long long)に変換するほうだ。
817 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:14:03 ] がー! だから、型と関数を考えて、ちゃんとメソッドを構成する英語を嫁と UInt64 hoge = 0LL; if ( UInt64::TryParse(textBox->Text) ) hoge = UInt64::Parse(textBox1->Text); String^ tmp = hoge.ToString(); でいいんだって なんでわざわざ wchar_t の配列に変換するのかな ちゃんと、キーワードでぐぐるかMSDN見てる?
818 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:25:28 ] 文字列を数値にするのには次のものがある。 Cのato〜とstrto〜。そしてそれぞれワイド文字版の_wto〜(非標準)とwcsto〜がある。sscanf/swscanf類もある。 C++のistringstream類。 .Net FrameworkのConvert::To〜と〜::Parce。 数値を文字列にするのには次のものがある。 Cの_〜toa、_〜tow(非標準)。sprintf/swprintf。この行のは全てVC8の_s版(全て非標準)もある。 C++のostringstream類。 .Net FrameworkのConvert::ToStringとObject::ToString。 ちなみにそれぞれ対称性がある。 C++のstream以外は全て数値の型により関数名などが異なっている。 だからunsigned longを使うかunsigned long longを使うかで違いが出てくる。
819 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:28:41 ] というか、unsigned long long int って型はまだ標準じゃないよな
820 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:31:17 ] >>819 C++にはまだないが、C++/CLIには存在する。 signe.japan.webmatrixhosting.net/ecma372/12_type.aspx
821 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:44:23 ] >820 それは知ってるが、標準関数が対応してないってこと ってそこ直リンすんなよ
822 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:46:10 ] >>821 だからC/C++のunsigned long longが関係するところは全て非標準だな。
823 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 21:49:23 ] そだな。非標準の型は全部 CLI 型表記にした方がわかりやすいと思うんだが 変に今までと一緒なもんだから、間違えやすいんじゃないかな
824 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:01:51 ] それよりも混乱する原因はC、C++、.Net Frameworkのクラス・関数が入り乱れているからのほうが大きいと思う。 答えているほうだって、あれ使え、いやこれ使えって具合だし。 そもそも一旦十六進法の文字列へ変換するまではともかく、その後文字列へ変換する必要性がわからない。 そのままtextBox2->Text = textBox1->Text;でいいと思うのだが。 大文字小文字を揃えたいだけならtextBox1->Text->ToUpper()で十分だし。
825 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:01:55 ] >>817 さん どうもです >>なんでわざわざ wchar_t の配列に変換するのかな >>814 さんの書いたとおり std::wcstoulと_ultow_sの呪縛に囚われていました こうやって見ましたが private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { UInt64 hoge = 0LL; if ( UInt64::TryParse(textBox1->Text)) hoge = UInt64::Parse(textBox2->Text); String^ tmp = hoge.ToString(); } if ( UInt64::TryParse(textBox1->Text))ここで : error C2661: 'System::UInt64::TryParse' : 1 個の引数を伴うオーバーロードされた関数はありません。 こうなるのですが・・・
826 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:04:35 ] >>825 MSDN見ろ。 TryParseは2つ目に結果を格納する引数がある。
827 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:26:47 ] >>826 さんどうもです private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { UInt64 hoge = 0LL; if ( UInt64::Parse(textBox1->Text)) hoge = UInt64::Parse(textBox2->Text); else String^ tmp = hoge.ToString(); } こうしたら、できましたが、実行すると アプリケーションのコンポーネントで、ハンドルされていない例外が発生しまし。 中略 入力文字列の形式が正しくありません。 ust-In-Time (JIT) デバッグを呼び出すための詳細については、 ダイアログ ボックスではなく、このメッセージの最後を参照してください。 中略 ************** JIT デバッグ ************** Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、 またはコンピュータ (machine.config) の構成ファイルの jitDebugging 値を system.windows.forms セクションで設定しなければなりません。 アプリケーションはまた、デバッグを有効にしてコンパイルされなければ なりません。
828 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:28:57 ] >825 勘違いしたんじゃ、ないぞ。MSDNを見るようわざと間違えたんだからな 決して、名前だけで bool 値を返すんだろとか考えて適当に書いた訳じゃ、ないんだからな
829 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:30:52 ] >>827 MSDN見ろ。1つめの引数の文字列の書式が書いてある。UInt64::Parseは十進法しか受け付けない。 Convert::ToUInt64なら基数が指定できるけど、Try版がないから例外を受けるしかないと思う。
830 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:30:54 ] スマソ Try外していました しかし、TryParseの問題を解決しても 例外エラーは出そうな感じがするんだが
831 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:39:02 ] >827 だから、MSDN で UInt64 のメソッドぐらいチェックしろと そろそろ何をしたいのかがわからんのだが。自分が書いているコードの意味がわかってる? textBox2 に textBox1 の内容をコピーしたいのなら >824 が言ってるとおり textBox2->Text = textBox1->Text; だけでいいはずだし、いったん、数字にしてなんかの検証をしたいのなら なぜ、いきなり textBox2->Text から数値を取ってるんだ? マジに書くと if ( !String::IsNullOrEmpty() ) { try { UInt64 hoge = UInt64::Parse(textBox1->Text); textBox2->Text = hoge.ToString(); } catch( ... ) { } } まぁ、例外処理は除いたが、いったん数値にして、別のテキスト・ボックッスに文字列として 代入するならこんな感じだろ
832 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:40:02 ] あ、 if ( !String::IsNullOrEmpty() ) →if ( !String::IsNullOrEmpty(textBox1->Text) ) だったorz
833 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 23:06:15 ] そもそも、目的はbutton1を押すとtextBox1に入力した 16進数の入力判定を行い、(条件として、空でないこと、16進数16桁であること) button2を押したら、openFileDialogを呼び出しファイルを選択してOKを押したら textBox2に選択したファイルを読み込ませ(ここは既に実装できています) 最後にbutton3を押したらtextBox1とtextBox2を結合し、saveFileDialogで 名前を付けて保存するという、単純なものなのですが16進数変換と入力判定の所で どつぼにはまってしまいました。 文字入力 ↓ 16進数変換&入力チェック ↓ 外部ファイル読み込み ↓ 16進数+外部ファイル結合 ↓ 名前を付けて保存
834 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 23:24:16 ] とりあえず判定は829のように例外が投げられるかどうか調べるしかないと思う。
835 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 00:26:19 ] ちょっと理解できてきたみたいです //16進数を受け付ける UInt64 hoge =Convert::ToUInt64(textBox1->Text,16); //10進数を受け付ける UInt64 hoge = UInt64::Parse(textBox1->Text); textBox2->Text = hoge.ToString(); やっと16進数の入力を考えれるようになりましたが UInt64 hoge =Convert::ToUInt64(textBox1->Text,16); textBox2->Text = hoge.ToString(); で出力すると、ご丁寧にも16進数から10進数に変換されています ヮ(゚д゚)ォ!
836 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 00:28:58 ] 16進で出力すればいいじゃん。 何言ってんだ?
837 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 01:07:29 ] やっとできました、どうも皆さん アリガタマキン ( ´∀`)ノ⌒ω)Д`)ブニュ UInt64 hoge =Convert::ToUInt64(textBox1->Text,16); wchar_t foo[16]; memset(foo, 0, 16*sizeof(wchar_t)); _i64tow_s (hoge,foo,16,16); String ^tmp = gcnew String(foo); textBox2->Text = tmp; しかし、例外処理が超難関だな(;´д`)トホホ… try {}catch( )の構文前からスマートでかっこいいと思っていたので 覚えたいと思っていたんだがな、ムズそうだな・・・・ 今更泥臭くMessageBoxで条件判定するのも、なんだかなぁー
838 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 01:19:03 ] 学生さん?
839 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 04:30:32 ] >>837 textBox2->Text = Convert::ToUInt64(textBox1->Text, 16).ToString("x"); ちゅうかうざい。
840 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 07:57:43 ] ToString が書式指定できることを知らんと言うのもありがちで、MSDNを見れば・・・ だが、Express の配布で C++/CLI を使う初心者がこんな感じに騒いだらこの先恐ろしいな
841 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 08:43:29 ] L"..."を template引数で使うとconst wchar_t*にならない? (generic,overloadだとStringになった) void call_overload(String^ s){Console::WriteLine("String");} void call_overload(const wchar_t* w){Console::WriteLine(L"const wchar_t*");} template <typename T> void call_template(T t){Console::WriteLine( (T::typeid)->Name );} generic <typename T> void call_generic(T t){Console::WriteLine( (T::typeid)->Name );} call_overload(L"123");//String call_template(L"123");//Char* call_generic(L"123"); //String
842 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 11:11:27 ] 仕様にそう書いてあった template では const char* や const wchar_t* が渡されたら、char や wchar_t の配列として 扱い、ジェネリック関数は型引数で const char* や const wchar_t* が渡された場合には String として型推論するというルールだって call_template(gcnew String("123")); とやると、String としてちゃんと帰ってきた
843 名前:デフォルトの名無しさん [2006/03/06(月) 13:16:33 ] MFCはどうなるんでつか? STL.CLIみたく、MFC.CLIが出るんでつか?
844 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 13:20:15 ] つ CWinFormsControl
845 名前:デフォルトの名無しさん [2006/03/06(月) 13:27:29 ] Microsoft .NET Framework の Windows フォームを使用したペインティング テクニック www.gotdotnet.com/japan/team/windowsforms/windowsformspainting.aspx これを参考に、C++/CLI からのグラフィックスの基礎を勉強しています。 最後の TextClipping というアプリケーションの例で、 protected override void OnPaintBackground(PaintEventArgs e) という C# における記述が出てくるのですが、 同様の記述を C++/CLI でやってみたところ、 override 仕様にも基本クラスで OnPaintBackground は virtual じゃないよ、って言われます。 .NET Framework 2.0 で何か変更になったのでしょうか?
846 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 14:19:42 ] 自分のメソッドの宣言で virtual は書いたけど override 指定していない方に つI
847 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 14:49:30 ] 汚い文法だなぁ
848 名前:デフォルトの名無しさん [2006/03/06(月) 15:17:51 ] >>864 OnPaintBackground つーのは、規定クラス System::Windows::Forms で virtual で宣言 されている「はず」だったんですが・・・ んじゃ、OnPaint とかを乗っ取る事はできないのかなぁ。
849 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 15:28:57 ] fつべvうぇ45wvw34
850 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 15:57:19 ] >848 まぁ、漏れあてなんだろうけど、C++/CLI では暗黙のオーバーライドは禁止されている ちゃんと virtual void OnPaintBackGround(...) override ←これ { ... } と記述してる? これ書いても上書きできていないの?
851 名前:デフォルトの名無しさん [2006/03/06(月) 17:32:02 ] >>850 忘れてました orz
852 名前:デフォルトの名無しさん [2006/03/06(月) 21:01:39 ] >>100 本買ってまで勉強する必要はないんじゃない?
853 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 18:46:38 ] private: void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ ){ hoge = ""; 〜 } private: 内で定義した変数って、よそのプロシージャーでは当然使えませんよね グローバル変数で定義すれば、いいのだろうけど NETで ※どんなアルゴリズムでも、グローバル変数なしで 記述できることが証明されています。 グローバル変数は後述するように、非常に強力な反面、 大きな危険性を秘めています。 とはいえ、絶対に知っておくべき事柄です。 らしい、button1で発生した変数を、button2のイベントが起きたときに 継承させる方法を 、グローバル変数無しで実現できるの?
854 名前:デフォルトの名無しさん [2006/03/07(火) 19:41:37 ] >>853 まずもってプロシージャってのが C++ にあるか ってのは置いといて、そのフォームのメンバ変数は button1_Click() からでも button2_Click() からでも アクセスできるじゃん。
855 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 20:40:47 ] そんなことはないやろ、 private: void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ ){ hoge = ""; 〜 } private: void button2_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ ){ textBox2->Text=hoge; 〜 } : error C2065: 'temp' : 定義されていない識別子です。
856 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 20:57:37 ] >>855 それ別の位置でコンパイルエラー出てるだけじゃないか? そのコードの中にtempなんて識別子は出てないのだが
857 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 21:14:41 ] >856 この人が言ってるの、auto 変数のことじゃない? メソッド内部で宣言したローカル変数にアクセスしたがってるんだよ
858 名前:デフォルトの名無しさん [2006/03/07(火) 21:20:23 ] >>857 そんなもん、VB でもできんわ・・・ プロシージャとかいってるからたぶん VB使いかな?とか思った。
859 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 21:53:50 ] やっぱり、無理やな
860 名前:デフォルトの名無しさん [2006/03/07(火) 21:55:54 ] >>853 の頭の中には、ローカル変数とグローバル変数しか内のだろうか。
861 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 21:56:09 ] プロシージャが WinProc のことなら、Form 間でのアクセスのことかも 何にしても、そんな状態でC++/CLIに手を出すのはやめた方がいいと思う
862 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 22:24:46 ] そもそもC++/CLIでなくてもC#でもなんでもやめたほうがいいな。
863 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 22:51:56 ] >>862 も人生をやめたほうがいいな。
864 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 02:13:35 ] C++/CLI がこんなにも複雑なのがいけないと思います!
865 名前:デフォルトの名無しさん [2006/03/08(水) 02:40:33 ] まぁ何でもあり(?)なのが C++/CLI だしなぁ。 複雑さを避けたいなら、C#だよな。 あ、VB.NET って手もあるか。
866 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 02:58:40 ] >>865 > まぁ何でもあり(?)なのが C++/CLI だしなぁ。 まさにC++から派生した、って感じだな
867 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 07:35:51 ] 言語仕様を拡張せずに .NET 対応は出来なったのかなぁ。 managed_ptr<Object> obj = managed_new<Object>(); みたいな。
868 名前:デフォルトの名無しさん [2006/03/08(水) 07:39:15 ] >>867 managed C++ であんまりうまくいかなかったから、 結局言語使用の拡張に踏み切ったんだろ。
869 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 08:18:59 ] >867 逆に、どこまでが既存の C++ でどこからが CLI 拡張かわかりやすくていいと思うよ mc++ の混乱ぷりから考えるに、MSが出した仕様にしてはさっぱりしすぎて不思議 時代が変わっても、フレームワークをさくっと切り替えるだけで対応できるし、VES も 簡単に交換可能なところが夢があると思われ また、C++ 自体の拡張の邪魔にならないところとかもいい Sun も JNI の仕様をこれにしないかな。そしたら、JVM も使う気になるのに
870 名前:デフォルトの名無しさん [2006/03/08(水) 08:24:21 ] Java をネイティブ拡張したものがが仮にあったとして、 C++/CLI とどっちを使う??
871 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 08:38:56 ] その仮とやらの質による。存在しないものと比較しても仕方がない
872 名前:デフォルトの名無しさん [2006/03/08(水) 09:48:43 ] おい!!!! だれだよ、俺のプロジェクトで勝手に /clr:pure にした奴は! おかげで全部 __clrcall になっててリンクできずに 一晩悩んだじゃないか! さて、そろそろ帰るか。
873 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 19:50:08 ] >>870 Javaをネイティブ拡張したもの≒C#
874 名前:デフォルトの名無しさん [2006/03/08(水) 20:04:29 ] Java = C++-- C# = Java++ = C++--++
875 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:20:07 ] >>873 ネイティブじゃナインじゃん
876 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:26:46 ] String^ arg_1 = abc; String^ arg_2 = def; textBox1->Text = arg_1 + arg_2; としたら abcdef と出力出来ますが textBox1->Text = arg_1 + endl + arg_2; : error C2679: 二項演算子 '+' : 型 'overloaded-function' の右オペランドを扱う演算子が見つかりません (または変換できません)。 となり、期待していた abc def が出来ません 誰かrg_1とarg_2の間に改行を入れて abc def となる様にしてください。 オナガイシマス
877 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:33:42 ] System::Environment::NewLine
878 名前:デフォルトの名無しさん [2006/03/08(水) 21:34:09 ] textBox1->Text = arg_1 + endl + arg_2; じゃなくて textBox1->Text = arg_1 + "\n" + arg_2; でいいじゃん。 std::endl はマニピュレータで、、 マネージド型である String に対して + 演算子がオーバーロードされているなんてことはまずない。
879 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:36:40 ] "\r\n"にしないとだめではないか?
880 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:45:08 ] 変だな? textBox1->Text = arg_1 + "\n" + arg_2; としたら コンパイルも通ったんだけど textBox1に表れた文字が abc・def 全角文字の・に似た記号が出ます(多分全角の・とは違う気がするが、定かではない) 秀丸に貼り付けると abc def と改行されてるんだが、なぜ?
881 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:47:30 ] >>880 サンクスできましたが、解説もオナガイシマス なんで "\n"では駄目で"\r\n"なの?
882 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:54:42 ] Windowsの改行コードは"\r\n"だから。 UNIXとかのコンソールプログラムでは\nで Macは"\r"
883 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:56:39 ] そしてC/C++は\nを使い、テキストモードでの入出力時には環境固有の改行コードと\nとで変換をしている。
884 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:57:50 ] ウィンドウズはそういうもん。 Unix : 円 n Windows : 円 r 円 n 旧 mac : 円 r コンソールアプリは透過的に 円 n ⇔ 円 r 円 n やってくれるが テキストボックスとかはやってくれない。 秀丸じゃなくってノートパッドならやっぱりナカテンが出ると思う。
885 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 21:58:49 ] みんなでケコーン OS X は ¥n になったよ ... 関係ないですが。
886 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 22:01:40 ] >>882->>885 >>881 です ご丁寧にありがとうございました、よく理解できました しかし皆さん本当に良く知ってますね
887 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 22:01:47 ] >>884 どっちかと言うと円記号よりもバックスラッシュ。
888 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 22:16:41 ] 完璧な回答を出しているのにスルーされてる>>877 がカナシス
889 名前:デフォルトの名無しさん mailto:sage [2006/03/08(水) 22:31:06 ] >>887 さん ありがとう スマソ、やっぱりC++/CLIならこうですよね (゚д゚)(。_。)(゚д゚)(。_。) ウンウン msdnでよく調べます
890 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 18:13:54 ] String型の変数arg_1を書き込みたいのですが、 下記のコードでコンパイルも通りるのですがアプリケーションのコンポーネントで、 ハンドルされていない例外が発生しました〜後略 別のプロセスで使用されているため、プロセスはファイル'C*\hoge.txt'に アクセスできません。 となってしまいます、どこがおかしいのでしょうか? protected: void button3_Click(Object^ /*sender*/, System::EventArgs^ /*e*/){ using ::System::Windows::Forms::DialogResult; Stream^ myStream ; SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog(); saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ; saveFileDialog1->FilterIndex = 2 ; saveFileDialog1->RestoreDirectory = true ; if(saveFileDialog1->ShowDialog() == DialogResult::OK) { if((myStream = saveFileDialog1->OpenFile()) != nullptr) { // Code to write the stream goes here. System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter(saveFileDialog1->FileName); sw->Write(arg_1); sw->Close(); myStream->Close(); } } }
891 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 18:29:48 ] なんでSaveFileDialog->OpenFileで開いてるのにさらにStreamWriterで開き直す? すでに開いているストリームに対してStreamWriterを使うのならStream^を渡す。
892 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 18:50:37 ] 最近よう、気のせいか初心者歓迎スレに変わってきてないか? なんか、聞けばいいと思っている輩が増えてきた気がするんだが
893 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 18:53:25 ] >>891 SaveFileDialog->OpenFileに書き込むには どうしたらいいですか?
894 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 19:15:18 ] System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter(myStream); 初心者はC#かVBからはじめるのがいいよ。MSDNの見方くらい覚えような。
895 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 20:52:02 ] >>894 ありがd
896 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 01:26:35 ] C++/CLI みたいなマニアな言語を使おうとする奴が なぜこんなところで教えてくんしてるのか判らん。 (マニア、というのは、それでないと書けないほどのアプリを 書かないといけないはめになっていないと使わないだろう、 ぐらいの意味。) MSDN 読めるぐらいでないと C++/CLI 手を出さないと思うんだが、 どうなってんだろう?
897 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 03:18:05 ] しらんがな。
898 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 08:44:22 ] >>896 少しはC++をやっていて、新しい言語に手を付けずに.Netが使えるぞと思っているんだよ、きっと。 実際はC++とC++/CLIとは別物だということを知らず。
899 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:08:02 ] つーか、自然な流れだと思うぞ。 一般的にC++が普及してた。 ライブラリはMFCやらWin32APIやらATLを使ってたであろう。 そして、MSの次期スタンダードなライブラリが、.NETになった。 じゃあ、C++から.NETを使おうか。 こんな感じでしょ。 間違いだとも思わない。
900 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:11:06 ] ええっと、言語間の違いよりも、 ライブラリ間の違いのほうが余程大きいと思うんですが...
901 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:18:01 ] 一般的に旧VBが普及してた。 PC以外で死滅気味だった言語が台頭。サーバーサイドJavaや組み込みC++。 サーバーサイドや組み込みに足を踏み入れるドトネトとC丼を強制。 ブビ厨氏滅&ドトネト氏産。 オネガイC++からドトネト使ってトンでも言語mc++ → C++/STL.CLI
902 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:22:57 ] >>901 日本語でおk
903 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:44:39 ] 899=線能されてる C++の文法複雑+マネージドの理解+旧COMの理解を要するなんてサイアクじゃん。 で、C++のBoostなんかは使えないという利点が無いオマケ月。
904 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:51:19 ] >>903 ネイティブな領域では普通に Boost 使えてるけど? たとえば Boost.Serialization で既存のデータを読み込んで、 Windows Forms で表示したり ADO.NET で DB に投入したりできる。
905 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:54:30 ] >>904 書いてて自分の文章の複雑さに気付かない?
906 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 09:56:50 ] pc8.2ch.net/test/read.cgi/tech/1139313234/115 こういうこともあるみたいだけど。
907 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 10:01:59 ] >>904 ネイティブな領域では普通に Boost 使えてるけど? なんだ、丸々大ウソか。 さすが線能されてるだけある。 M$もCOMでC++を汚しきったが、mc++で文法破壊、CLIでライブラリ破壊だね。
908 名前:904≠899 mailto:sage [2006/03/10(金) 10:16:42 ] >>906 それ書いたの俺。で、そのオチが >>872
909 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 10:20:06 ] >>908 >だれだよ、俺のプロジェクトで勝手に /clr:pure にした奴は! PUREでない混合だと激遅になるドトネトに何の意味があるのかと小一時間。
910 名前:904≠899 mailto:sage [2006/03/10(金) 10:24:15 ] >>909 pure でやるなら、既存のライブラリの多くを あきらめるってことなので、俺なら C# を選択する。
911 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 10:28:38 ] >あきらめるってことなので、俺なら C# を選択する。 ソースコードの価値ってのは既存コードだったり、 環境変わってもコンパイルしたりすると動くことだったりするのに、 馬の骨C丼に何の価値があるのかと。
912 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 10:29:34 ] ttp://pc8.2ch.net/test/read.cgi/tech/1141828033/1 ,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ| あ…ありのまま 今 起こった事を話すぜ! |i i| }! }} //| |l、{ j} /,,ィ//| 『.NET framework 2.0を入れたと思ったら i|:!ヾ、_ノ/ u {:}//ヘ 何故かノータッチデプロイメントがぶっ壊れた』 |リ u' } ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人 な… 何を言ってるのか わからねーと思うが /' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも 何をされたのか わからなかった… ,゙ / )ヽ iLレ u' | | ヾlトハ〉 |/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった… // 二二二7'T'' /u' __ /:::::::/`ヽ /'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ 移植や修正が必要だとか / // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ ノ ' / ノ:::::`ー-、___/:::::// ヽ } _/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしいものの 片鱗を味わったぜ…
913 名前:904≠899 mailto:sage [2006/03/10(金) 10:31:16 ] >>911 だから今俺は C++/CLI 使ってるんだってば。
914 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 10:37:16 ] >>913 で、C++/CLI複雑じゃない?それだけ価値あるということ?
915 名前:904≠899 mailto:sage [2006/03/10(金) 10:38:48 ] >>914 使わざるを得ない場面があるということ。 あと、マゾにはたまらないって言うこと。
916 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 11:13:29 ] 自分で判断できないような人はC#やっといた方がいい。 C++/CLIは必要があって使うもの。
917 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 11:29:40 ] 既存のライブラリの多くを諦める事になるからC♯って意味分からん。 C♯だったら、多くを諦めるどころか、全部諦めにゃならんだろw ヤケクソやってんのか?w
918 名前:904≠899 mailto:sage [2006/03/10(金) 11:45:23 ] >917 そんなこといってないじゃん。 既存のライブラリを使いたいから /clr:pure あきらめて C++/CLI つかってます、って書いてんのに。
919 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 11:56:18 ] ヒント;M$ジレンマ
920 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 13:48:25 ] >>918 君は正しい。ただあんまり一生懸命レスすること無い。疲れるだけだから。
921 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 19:38:26 ] 昔:VB-VC-Windwos 今:.NET Framework-C++/CLI-Windows
922 名前:デフォルトの名無しさん mailto:sage [2006/03/10(金) 20:36:09 ] 伸びてると思ったら不毛な議論が続いてたようだな。 アンチが何したいのかわからんがこんなところで騒いでも無駄ですよ
923 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 09:58:42 ] 皆さんはやっぱり、C++/CLIでもファイルの入出力とか自作のライブラリー等 作成されてるのですか?Stream オブジェクトとか、MSDN見る限り、素人目には 既に完成されていると思うのですが、個人的にパラメータを渡して読み込み、書き込み モードで開いたりとかテキストモードで開いたり、バイナリモードで開いたりとか、やったほうがもっと楽でミスも少なくて、いいのかなぁーと思ったりするのですが、 いかがなものでしょう?
924 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 10:07:31 ] 逆に聞くが>>923 は今まで入出力に自作のライブラリを使っていたのか?
925 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 10:10:33 ] >>923 C++/CLI でも、っていうか、マネージドの領域では .NET Framework べったりのプログラミングしてます。 C++/CLI 使うメリットはネイティブとの橋渡しができる ことだと思ってるんで、ネイティブの領域では 従来通りの自作のライブラリーを多用しています。
926 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 10:36:50 ] >>923 何言っているんだかわからん。 Streamのどこが気に入らなくて、どういうことをやっているわけ?
927 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 10:47:06 ] >>926 抽象化されていないもっとファイルシステムべったりの いじり方をしたいのでは、と推測するけど、まぁそういうことが したけりゃ Windows API 叩くのも C の標準ライブラリ 叩くのも低レベルファイルアクセス関数群叩くのも C++ の標準 I/O ストリーム使うのも自由、としか言いようがないな。
928 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 20:59:39 ] テキストボックスに 0 1 2 3 4 5 6 7 8 9 と表示したいけど for( int i = 0 ; i < 10 ; i++ ){ String^arg = Convert::ToString(i); textBox1->Text = arg + "\r\n"; } これだと 9 しか表示できないんですよね(;´∀`) うーんわからん
929 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 21:03:49 ] これはひどい
930 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 21:04:01 ] > textBox1->Text = arg + "\r\n";
931 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 21:05:39 ] >>928 そりゃ、Text に最後に設定されるのが "9\r\n" だからだろ。 arg = じゃなくて arg += とかじゃないの? と、試しもせずにカキコ
932 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 21:09:22 ] >>931 で、そのargはどこに行くんだ
933 名前:928 mailto:sage [2006/03/11(土) 21:17:24 ] >>930 さん >>931 さん 残念ですが巧くいきません、同じ結果です
934 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 21:27:42 ] textBox1->Add(arg);
935 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 21:31:10 ] StringBuilder^ builder = gcnew StringBuilder(); for(int i = 0;i < 10; i ++) { builder->AppendFormat("{1}{0}",System::Environment::NewLine,i.ToString()); } this->textBox1->Text = builder->ToString();
936 名前:928 mailto:sage [2006/03/11(土) 21:58:21 ] >>935 さん ありがと、巧くいきました StringBuilderクラス初めて知りました builder->AppendFormat("{1}{0}",System::Environment::NewLine,i.ToString()); の"{1}{0}"は何を意味するものですか?
937 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 22:15:05 ] >>936 引数の2番目({1})と1番目({0}) .NETでは基礎的なこと。
938 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 22:21:51 ] うんざりするほどの教えてクンだな
939 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 22:28:44 ] 理解していない {1}{0} を教えてもらった通り 使っただけで「うまくいきました」と言える神経が理解出来ない
940 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 23:07:57 ] 正直、C# に移って .net framework の使い方から勉強してきてほしいものだ .net framework 総合ってあったよな
941 名前:デフォルトの名無しさん mailto:sage [2006/03/11(土) 23:23:19 ] enum classのインスタンスを switchの条件式に使うとunsafeにならない? Reflectorでみたらunsafeになってたんだけど...orz
942 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 00:01:20 ] しかし、海外ではC#なんて朽ち果ててるのに、ここは鎖国な人ばかりですか?
943 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 00:03:12 ] >>942 じゃ、その海外では何を使ってるの? あちこちでその書き込み見るんで、 マジで教えて欲しいんだが。 それにここ C++/CLI のスレッドだし。
944 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 01:06:44 ] 北米でのサンデープログラマはJavaよりもC#が多いってニュースみたことあるけど
945 名前:943 mailto:sage [2006/03/12(日) 01:14:43 ] ちなみに、クライアントサイドでのJavaの案件なんて ほとんど見たこと無い。
946 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 01:19:23 ] ref class のデータメンバにどうしてもネイティブクラスの インスタンスを持たせたいんだけど、混合はできないから ポインタで持たせるしかない? ref class ManagedClass { 中略 NativeClass* nativeClass; 中略 }; みたいに。せめて std::auto_ptr つかって ref class ManagedClass { 中略 std::auto_ptr<NativeClass> nativeClass; 中略 }; って書きたいけど、結局は混合になるからだめなんだよな。
947 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 01:36:31 ] gcroot auto_gcroot
948 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 02:08:28 ] >>943 VB。つーか、こんな簡単な事もわからないヤツがいるのか。 日本人同士で馴れ合ってるから、バカになるんだよ。
949 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 02:38:05 ] >>948 明らかにどっちもやったことない苦し紛れ臭漂うコメントだな。
950 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 03:25:39 ] >>949 いや、ぜんぜん。 つーか、やったことがある・ないって話はしてない。ばかだね。あんた。
951 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 03:38:45 ] >>950 ないのならいかに自分が馬鹿な話をしてるかわからんのも仕方ない。
952 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 03:45:21 ] >>951 もうチョイ日本語、勉強しましょうねー。
953 名前:952 mailto:sage [2006/03/12(日) 04:05:27 ] アンカミス ×>>951 ○>>952
954 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:05:29 ] >946 そのためのファイナライザと割り切るしかないんでない 心配なら、管理クラスを別途作って、そこからポインタを受け取ってもいいんだし
955 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:09:20 ] 初歩的な質問ですみませんが、お願いします hoge_0.txt hoge_1.txt 略 hoge_9.txt という10個のファイルを作ろうと思い for(int i = 0;i < 10; i ++){ Stream^ myStream ; String^x=Convert::ToString(i); StreamWriter^ sw = gcnew StreamWriter ("c:\\hoge_"+x+ ".txt"); sw->Close(); myStream->Close(); } (書き込む部分は省略させて貰います) コンパイルは通りますが、 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 と表示されてしまいます、 hoge_0.txt一つだけc:\直下に作成されています どうしてでしょうか?
956 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:13:58 ] コード見直せ 明らかにおかしいだろ
957 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:15:06 ] StreamWriterをCloseするときにStreamも一緒にCloseしてるからじゃね。
958 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:16:39 ] C(++) もやったことないのに C++/CLI に手を出すのは無謀
959 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:17:16 ] コンパイラさんが myStream が初期化されてないよって警告出さんのか
960 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:24:17 ] 指摘されて今気づきました Stream^ myStream ; myStream->Close(); を、おまじないみたいに勘違いしてたようです
961 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 04:30:55 ] おまじないとな
962 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 05:24:46 ] 次スレのテンプレにあれだ、初心者お断りとでも書いとけ。 ___________________ | |★ 初心者に扱える言語ではありません ★ | | ・初心者はまず C/C++ か C# をしましょう。 | ・両方とも中級者以上になったら来てください。 | Λ Λ / (,,゚Д゚)⊃ チュウイ! 〜/U / U U  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
963 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 05:42:05 ] C#はやらんでもええ。
964 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 06:05:50 ] >>963 いや、このスレにずっといて必要だと思ったから書いたのだけど? CLRの基本的なことも分かってないようなやつは危ない。 C#では仕様的に避けられてたり、ふらっとスレでも聞かないような レベルの質問ばかりじゃん。 んで一番速く理解できるのはC#だし、C++と文法似てるし。
965 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 08:36:56 ] というか、移行組にとって辛いのは、.net framework の使い方がわからないというところじゃね? だから、C++ はわかるけど、それを CLI の流儀でどう書けばいいのかわからなくて、初心者スレ で聞くような質問をここでしてしまう、と 最近紹介されて知名度が上がってきた分、飛びついてくる奴らがなんかくらくらするような 質問をしてしまうわけで、.net スレへ誘導というのも、言語の垣根を越えた C++/CLI の可能性を 示すという点でいいのかも
966 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 08:45:29 ] C++/CLI は C++ しか知らない人がマネージドなプログラムを 書くための言語ではなくて、C++ で仕事してきて、かつ、 C# などで .NET Framework 上で動くプログラムも作ってきて、 両方の資産とノウハウを抱えている人がそれらの分断に悩んで たどり着くソリューションだと思う。
967 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 08:52:04 ] >966 それは漏れもそう思うんだけど、実際にはあの顔文字使う教えてクンみたいなやしが あれだけ言われても MSDN もチェックせずに気軽に尋ねにきていやがるこのスレの現状を 考えると、あるべき論ではなぁ スレのふいんきをもっと殺伐させて、気軽に質問できないようにした方がいいかもな 後は、答えるときは罵倒しながら、丁寧に答えるとか >980 スレ立てよろ てんぷれ作る?
968 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 09:51:53 ] とりあえず教えて君はレベルに関係なくスルーすればいいんじゃないのかな? 排除を全面に出しすぎるのも大人げないというか。 managed C++ → C++/CLI www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp#transguide_topic [特集] Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005 www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html Calling Native Functions from Managed Code msdn2.microsoft.com/library/ms235282 (en-US,VS.80).aspx C++/Cli Essentials www.amazon.com/exec/obidos/tg/detail/-/0321174054/ Shared Source Cli Essentials www.amazon.co.jp/exec/obidos/ASIN/059600351X C++/CLI設計者のblog blogs.msdn.com/hsutter/ blogs.msdn.com/slippman/ STL.NET www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp www.dinkumware.com/ C++の今後 216.55.183.63/pdc2005/slides/TLN309_Sutter.ppt
969 名前:デフォルトの名無しさん [2006/03/12(日) 10:03:33 ] >>1 に >>964-966 あたりのことをさらっとかいておくとよいのでは? ---------------- C++/CLI は単なる C++ の拡張ではなく、既存の C++ のコード資産と .NET Framework をはじめとしたマネージドなコード資産の橋渡しを するものです。.NET Framework でのプログラミングになれていない人は Visual Basic .NET や C# である程度基礎的な概念を学習してから 取り組む方がよいでしょう。 ---------------- とか。
970 名前:デフォルトの名無しさん [2006/03/12(日) 10:04:11 ] >>968 排除は本望じゃないけど、誘導は必要だ、ということで。
971 名前:デフォルトの名無しさん [2006/03/12(日) 11:01:01 ] C# と同じような間隔で XML ドキュメントを書き込んでたら、 C++/CLI では XML ドキュメントってサポートされてないんだね。 そのへんは C++ と同じなんだから当たり前か。 ところで、マウスポインタを識別子の上に持って行ったときに 現れるチップでもコメントを表示して欲しい名x。亜
972 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 11:21:35 ] 工作員がスゲー。再度言う。C#はやる必要なし。
973 名前:デフォルトの名無しさん [2006/03/12(日) 11:30:48 ] >>972 やってもいいじゃん。
974 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 11:34:39 ] はじめからC++/CLIで.NETをはじめたいというのがいても悪くは無いが、 そういう需要があれば、ふらっとC++/CLIとかぐすたれC++/CLIとか別のスレ立てたいね。
975 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 11:46:42 ] >>974 。゚+.(・∀・)゚+.゚イイ!! 行き場が無くて、彷徨っています。 スレ立てオナガイシマス
976 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 12:06:17 ] >>972 何で工作員?C/C++、C#両方使える上で最適だと思える判断をして書いて いるんだけど? C++を分かっていて、C#分かってれば実際問題仕様書読めばかけるから。 どう考えても最短距離だし、C++/CLIはC++のスタンス上危険なコードも 許容するからそれが危険であるとも分からないし、特殊な仕様が結構ある。 しかも、はっきりいって質問のレベルがふらっとC#スレにも劣ってるから。 他言語ならまだ入門書を読め、といえばすむがC++/CLIにそんなものあるの? C#初心者よりレベルが低い状態で、情報も少ないのに、C#より考えることが 大量にあって複雑なC++/CLIが何とかなるとお思いで?
977 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 12:51:20 ] C++/CLIをやるには.NETの知識が必用だが、 その知識を得るための情報はC#を対象に書かれていることが多い。 つまり必然的にC#の知識が必用になる。
978 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 13:02:42 ] C++/CLIは合の子だから、 C++とCLIのそれぞれの特徴を知る必要がある。 C#はCLIへの近道だと思う。まあC#使う必要はないが。
979 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 13:17:30 ] けどC++ができるのであればC#は大したことは無いと思う。
980 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 14:13:45 ] いや、だから言語仕様が大したことかとかいってるんじゃなくて、 CLI の流儀、.net framework の流儀をつかむために いちど純 .net のをやっておいたほうがいいんではということでしょ。
981 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 14:22:30 ] やっぱり、単に日本だけで馴れ合ってるだけじゃん。 C++/CLIの資料が少ないから、C#で代用しろ? 現実的だが、人に勧めるような話じゃないことに気がつけよ。 C#なぞという無用な知識を入れる必要は無し。 C++/CLIの資料はあるだろ? managedの時代なら C# が参考になるが…、C++/CLIになっても必要なのか?
982 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 14:38:16 ] >>981 もうチョイ日本語、勉強しましょうねー。
983 名前:デフォルトの名無しさん [2006/03/12(日) 14:52:35 ] 一度もアセンブラを使ったことがない人に ポインタの具体的なイメージを持ってもらうのは困難。 同じように一度も C# や VB.NET のような .NET Framework を想定した元を使ったことの無い人に マネージドなプログラミングについてのイメージを持ってもらうのは困難。
984 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 15:02:29 ] C#をというより、クラスライブラリの使い方レベルの質問は受け付けたくないというの話さ。 次スレと、それとは別に初心者用スレを立ててくるよ。それでいいだろう?
985 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 15:25:25 ] くだらねー。そんなことで C# を薦めるな。
986 名前:デフォルトの名無しさん [2006/03/12(日) 15:27:48 ] とりあえず初心者スレを立ててきた。 くだすれC++/CLI(初心者用) pc8.2ch.net/test/read.cgi/tech/1142144110/l50 連続でスレ立てができなようだから、次スレはもう少し待って。
987 名前:デフォルトの名無しさん [2006/03/12(日) 15:28:21 ] >>985 じゃ、おまいさんは何をすすめるお? J# ? プギャー(AA略
988 名前:986 mailto:sage [2006/03/12(日) 15:50:33 ] 連続規制でスレが建てられないのでだれか次の内容で頼みます。 2 に >>968 の内容もアップしてあげてください。 --- C++/CLI について語ろうぜ Part2 おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ! このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。 .NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に お願いします。 前スレッドはこちら pc8.2ch.net/test/read.cgi/tech/1126450441/l50 姉妹スレ くだすれC++/CLI(初心者用) pc8.2ch.net/test/read.cgi/tech/1142144110/l50 managed C++ やろうぜ!! 002 pc8.2ch.net/test/read.cgi/tech/1139043535/l50
989 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:06:36 ] >>988 Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks d(゚Д゚ )☆スペシャルサンクス☆( ゚Д゚)b ♪♪♪ d(`Д´)b♪♪♪サンキュ
990 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:08:02 ] >>988 立ててみるわ。
991 名前:990 mailto:sage [2006/03/12(日) 16:09:29 ] 立てた。 pc8.2ch.net/test/read.cgi/tech/1142147319/
992 名前:990 mailto:sage [2006/03/12(日) 16:10:53 ] >>968 もコピペしといた。 不足分はよろしく。
993 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:43:41 ] >>987 そうやって、脳内で勝手に盛り上がって楽しいか? なんか変な薬でも飲んでるのか? 飲んでるなら止めなさい。 飲んでないなら医者に行って飲みなさい。
994 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 17:53:31 ] >>987 J# 使う奴は氏ね
995 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 17:54:41 ] J#使ったことない俺にだって、J#の中傷ぐらい非難されずに可能なのだ
996 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 18:21:29 ] ヒント:擁護する人がいない
997 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 18:32:44 ] 誰も使っていない言語を意地で維持する必用は無いと思うんだがな。 金と時間の無駄。
998 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 18:37:23 ] j#は 1.1.x 互換じゃ使いようもないし、System系の名前空間のクラスを使うともうJavaには見えないね。 他に敵を作って内紛のタゲそらしをするのは常套手段だな。まるで中共政府のようだ
999 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 18:38:42 ] 1000get
1000 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 18:39:03 ] ぬるぽ
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。