【.NET】 C++/CLI について語ろうぜ 【最適】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!
2デフォルトの名無しさん:2005/09/11(日) 23:57:10
専用スレが今の時期にいるのか?
3デフォルトの名無しさん:2005/09/11(日) 23:58:57
あくまでも MSの推奨は C#だろ。
4デフォルトの名無しさん:2005/09/12(月) 00:00:42
C#ってプラットホーム呼び出しとか面倒じゃね?
態々DllImportってうぜー
5デフォルトの名無しさん:2005/09/12(月) 00:15:55
C++/CLIって普通にSTLとかBoostとか使えるのかな?
6デフォルトの名無しさん:2005/09/12(月) 01:01:16
2005β2でSTLは使えたぞ
Boostはまだ未検証
7マイク ◆yrBrqfF1Ew :2005/09/12(月) 01:06:04
.netなんてC++を使うまでも無いだろ
8デフォルトの名無しさん:2005/09/12(月) 01:09:22
なにを使えと?
まさかC#?
9デフォルトの名無しさん:2005/09/12(月) 01:12:43
VC++のエディタは支援機能がVC#に比べて弱い
10デフォルトの名無しさん:2005/09/12(月) 01:20:29
エディタなんてIDEのものは普通使わんだろ?
支援機能がないと書けないの?
11デフォルトの名無しさん:2005/09/12(月) 01:27:23
>>10
今時そんなこと言ってる人間はJavaの世界でもいなくなったのに。
12マイク ◆yrBrqfF1Ew :2005/09/12(月) 01:47:57
4年前からまだterapadだな俺
13デフォルトの名無しさん:2005/09/12(月) 07:16:46
>>4
くまぐまDllImport
14デフォルトの名無しさん:2005/09/12(月) 09:50:25
>あくまでも MSの推奨は

推奨は消えるからヤヴァス。>NetBUEI、VBX、VB、WinDNA、COM
15デフォルトの名無しさん:2005/09/12(月) 11:51:07
COMは消えない
16デフォルトの名無しさん:2005/09/12(月) 11:58:35
AJAX >>>>>(壁)>>>>> COM
17デフォルトの名無しさん:2005/09/12(月) 12:17:29
>>16
AjaxのXMLコンポーネントは何でできてるかご存知で?
18デフォルトの名無しさん:2005/09/12(月) 12:18:52
COMだと?
19デフォルトの名無しさん:2005/09/12(月) 12:21:09
C++/CLIについて語ろうぜ!
20デフォルトの名無しさん:2005/09/12(月) 12:28:40
重複スレです

managed C++ やろうぜ!!
http://pc8.2ch.net/test/read.cgi/tech/1014486422/
21デフォルトの名無しさん:2005/09/12(月) 12:30:34
managed C++ と C++/CLI は異なるものですが・・・
22デフォルトの名無しさん:2005/09/12(月) 13:10:25
C++を複雑化すんなって漢字。

C++/COMもヘッダー巨大&ワケワカだったし。
23デフォルトの名無しさん:2005/09/12(月) 13:24:30
自分の頭の悪さを言語のせいにするな
24デフォルトの名無しさん:2005/09/12(月) 13:27:45
25とこなつ:2005/09/12(月) 20:26:45
いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
26デフォルトの名無しさん:2005/09/13(火) 00:34:04
hとcppに分けるの面倒
予期せぬEOFが云々
とかもうぜー
27デフォルトの名無しさん:2005/09/13(火) 00:49:56
>>16
AjaxとCOMを並列に語る発想がすごいよね
28デフォルトの名無しさん:2005/09/13(火) 00:51:38
AjaxとCOMが別物だと思っているしとハケーンw
29デフォルトの名無しさん:2005/09/13(火) 01:48:28
VC#のほうが簡単だよ
30デフォルトの名無しさん:2005/09/13(火) 01:50:23
>>28
基地外さらしage
31デフォルトの名無しさん:2005/09/13(火) 01:52:40
C#死亡・・・
たぶんMSは、C#をなかったことにするのでないかい?
こんだけ推し進めといて、アッサリ切り捨てるのがMSのやり方だーね
32デフォルトの名無しさん:2005/09/13(火) 07:04:48
はいはいネガティブネガティブ
33デフォルトの名無しさん:2005/09/13(火) 07:49:18
> デファクトスタンダードに最も近い
本当かよw
34デフォルトの名無しさん:2005/09/13(火) 08:17:41
まぁ近いだろうな。消去法で。
35デフォルトの名無しさん:2005/09/13(火) 09:46:47
>>31
マジレスすると全く正反対。
ヒント:J#
36デフォルトの名無しさん:2005/09/13(火) 09:50:46
Sunとの和解内容は秘密だから分からないけれど、
当然将来J#を選択できる内容になっているんだろうな。
報道ではJ#完全打ち止めだけども…
37デフォルトの名無しさん:2005/09/13(火) 09:55:57
C++/CLI のフリー環境は作れないわけではないと思われ
VMに何を利用するかによるが、じきにGNUあたりで出てくるんでないかね
38デフォルトの名無しさん:2005/09/13(火) 10:46:48
ネイティブ以外興味ないよ
39デフォルトの名無しさん:2005/09/13(火) 10:53:55
GNU/UNIX系は、他環境のコード(例えばWin32)を取り込んでUNIXでコンパイルできるようにする文化だから、
ネイティブコンパイルできるようになるだけっぽい。
40デフォルトの名無しさん:2005/09/13(火) 10:57:52
41デフォルトの名無しさん:2005/09/13(火) 10:58:30
>>39
アフォ?
42デフォルトの名無しさん:2005/09/13(火) 11:11:57
>>41
いいえ、あなたがアフォです。
43デフォルトの名無しさん:2005/09/13(火) 12:11:59
>>42
やっぱり!
44デフォルトの名無しさん:2005/09/13(火) 12:33:01
>40
ECMA での MC++ (=C++/CLI)を Mono VM でサポートってことは、SGI と共同で
C++/CLI の MonoVM 環境を作るつもりなんだ。他のコミッティはどうするんだろう
しかし、中間コードから CIL を出力って、これがうまくいけば凄いね。VES 上でC/C++が
動くんかいな
45デフォルトの名無しさん:2005/09/13(火) 12:45:09
いや、SGIが作るのはWHIRLを中間に使うgcc変種。
最終的にはネイティブを出力。

WHIRLは高水準のものから低水準のものまで多段で扱う流儀なので、
高水準のものからなら、CLIへのコンバートはそれほど難しくないと思われ。
whirl2cってのがあるくらいだから。open64のwhirl.pdfの1.3節
46デフォルトの名無しさん:2005/09/13(火) 14:45:49
んーってことは、ただのネイティブ変換なんだ
モジュール起動時にVESにアタッチして、マネージド・オブジェクトとあったこったやったり
しない訳ね。ちょっとそれだと魅力ないなぁ。構文だけ一緒なだけなんだ
まだ、JNI をいじってラップかますほうが C++/CLI っぽいか
47デフォルトの名無しさん:2005/09/13(火) 19:49:32
48デフォルトの名無しさん:2005/09/13(火) 20:27:44
そうかそうか
49デフォルトの名無しさん:2005/09/13(火) 23:07:52
>>33
まだ出てもいないのにデファクトなわけないだろwwwwww
50デフォルトの名無しさん:2005/09/14(水) 00:44:49
>>46
ちょっと勘違いがあるみたいなんだが、open64はCLIと何の関係もない。
RTLを使わないgccの変種を作っている。(WHIRLを使う)

で、その成果を利用すると、CLIへの変換が容易、
あるいはいきなりCLI生成な更なる変種を作るのが容易。
ってな感じの状況が>>40。一つ目のURLのFAQを読んでね。
51デフォルトの名無しさん:2005/09/14(水) 01:04:19
>50
んー、それは理解している。でも、C++/CLI の魅力は IL にして VES 上でのみ動かす事じゃなく、
ネイティブとマネージドが共存するメモリモデルを持っていることだから、C# の亜種なら
要らないでしょ
52デフォルトの名無しさん:2005/09/14(水) 09:12:12
まだその段階にないというだけなんでは?
53デフォルトの名無しさん:2005/09/14(水) 19:39:29
>52
そうだけど、方向性が違うでしょ。実行モジュールから MonoVM をアタッチして、その上に
部分変換した IL を流し込むやり方は、遠いよ
JNI みたくVM上に直接オブジェクトを作るアプローチの方が手っ取り早いと思うんだけどな
54デフォルトの名無しさん:2005/09/16(金) 00:47:53
あげ
55デフォルトの名無しさん:2005/09/17(土) 15:47:46
あげ
56デフォルトの名無しさん:2005/09/19(月) 00:32:42
あgt
57デフォルトの名無しさん:2005/09/19(月) 07:50:33
いつになったらC++/CLI使えるようになるの?
58デフォルトの名無しさん:2005/09/19(月) 10:44:10
今でも使えるよ
59デフォルトの名無しさん:2005/09/19(月) 11:11:11
printfが使えるらしい
60デフォルトの名無しさん:2005/09/19(月) 20:00:34
Visual Studio .Net 2003 で動作していた、
アセンブラ ファイルを含むプロジェクトが
Visual Team Suite 2005 Beta2 では、
error PRJ0003 : 'cmd.exe' の起動中にエラーが発生しました。
とのエラーになる。

どなたか、アセンブラ ファイル(.asm)を含むプロジェクトを
試された方、アドバイスお願いします。
61デフォルトの名無しさん:2005/09/19(月) 21:20:11
asm の部分をコメントアウトしてコンパイルしてみたら?
問題は別のところにあるんじゃねぇ?
62デフォルトの名無しさん:2005/09/19(月) 21:58:39
>61
いや、インラインではないんだ。
別に拡張子.asmのファイルを含んだ
プロジェクトで、例えば、
abc.cpp
abc.asm
この2つのファイルを含んだプロジェクト
をビルドすると、エラーとなるわけ。
abc.asmのカスタム ビルド ステップ指定は
以前のVSN_2003と同様ですがね。
63デフォルトの名無しさん:2005/09/19(月) 22:52:32
cmd.exeってことは起動に失敗してるんだろ
アセンブラがパス通ってないか、無いんじゃねーの
64デフォルトの名無しさん:2005/09/19(月) 22:52:48
2009年のC++の姿でも見ておけ。これでもC++がいいのか。
ttp://216.55.183.63/pdc2005/slides/TLN309_Sutter.ppt
65デフォルトの名無しさん:2005/09/19(月) 23:01:22
pptってなんだよ
変てこなバイナリつくんなよ
66デフォルトの名無しさん:2005/09/19(月) 23:18:43
>64
良くなるじゃん。ラムダと自動変数と関数子に並列処理やメモリのクリティカルなアクセス保持、
遅延実行、メッセージの言語サポート、非同期実行による処理の委託、スコープによる
処理の実行の同期、アルゴリズムをスレッド化してくれるし、並列化STLとかも来るとなると、
なんか、あれふ、みたいだな

>62
関数呼び出し部をコメントアウトして、asm はあるけど使わないとどうなるの、と訊いた
つもりなんだが
漏れも 63 が正しいと思うカスタム・ビルドで指定してるコマンドが間違ってるんじゃね?
67デフォルトの名無しさん:2005/09/19(月) 23:25:23
ConcurやLinqなんて入るのか?
VC++/CLIだけだろ?
68デフォルトの名無しさん:2005/09/19(月) 23:31:50
>67
これ、C++0x (多分、x==9)の予定だよ。だから、これをサポートしたコンパイラが出てくるのは
5年後から。まぁ、独自拡張でいろいろ試したりするだろうけど

それよりもまず、名前空間を拡張して欲しいなぁ
namespace company.product_name
{
...
}
って書きたいよ
69デフォルトの名無しさん:2005/09/19(月) 23:43:58
>>65
恥さらし乙
70デフォルトの名無しさん:2005/09/19(月) 23:51:48
>>68
C++0xは全部じゃないよ。
Linqなんて言語レベルでやるのが良いのかどうか。
C++は機構だけ提供するのが好きな言語だから。
71デフォルトの名無しさん:2005/09/19(月) 23:53:44
65 名前:デフォルトの名無しさん[] 投稿日:2005/09/19(月) 23:01:22
  pptってなんだよ
  変てこなバイナリつくんなよ
72デフォルトの名無しさん:2005/09/20(火) 09:49:04
もうこれ以上言語を拡張するのはやめてほしい>C++0x
これだけ仕様が肥大すると、規格準拠コンパイラが存在しなくなって互換性も糞もなくなるぞ(もうなってるか・・・)

C/C++と親和性の高い言語を新しく設計したほうがマシ。
73デフォルトの名無しさん:2005/09/20(火) 19:01:40
>>72
だめだ。それをやると、D言語の二の舞になって、ユーザーを得られない。
74デフォルトの名無しさん:2005/09/20(火) 20:32:24
D言語はセンス悪いもん。

ConcurやLinqは、高レベル過ぎるから、
新しいのつけるならプリミティブを抽出して欲しいな。

Javaのfor each程度のものならすぐにつけてもいいけれど。
75デフォルトの名無しさん:2005/09/20(火) 20:34:44
諦めてガジェットとして見るべ
便利なとこだけつまみ食いすればいいよ。結局実用外のところは、廃れるだろう
理解しなくても、ツールとしてコードは書けるし、それで充分だと思う
76デフォルトの名無しさん:2005/09/21(水) 19:18:08
今回のVS_2005 C++/CLI は、たぶん
生き残ると思う。

秩序と混沌、
いつの世でも、新たな革新的技術は、
混沌が土壌だったからね。

アセンブラ〜C#まで、必要とあらば一望の下に。
77デフォルトの名無しさん:2005/09/21(水) 20:35:36
>>76
生き残るか生き残らないかは、君が決める事ではない。
まだ発売されてもいないのに。MSの社員か?
78デフォルトの名無しさん:2005/09/21(水) 20:43:29
>77
生き残ると、私が今国会で決めたのだ!
小泉君に聞いてみな。
79デフォルトの名無しさん:2005/09/21(水) 20:55:12
>>77
思うというのは予想であって、予想というのは
事の決着に直接関与しない人間でもすることだし、
事が始まるより前にすることだよ。

「神戸新聞杯はやっぱディープインパクトが勝つと思うよ」
「勝つか負けるかは、君が決める事ではない。
まだ発走してもいないのに。厩舎関係者か?」

・・・っていう会話くらい変。
80デフォルトの名無しさん:2005/09/21(水) 20:58:48
>>79
つ[チラシの裏]
81デフォルトの名無しさん:2005/09/21(水) 21:32:48
長年プログラミングをしていると
オブジェクト指向だの何だの、
これらの概念は、すでに独自の手法で
取り込み、我がものとしているハズ。

でなければ、いくら最新最強と言われる、
処理系を手にしようと、扱う人によっては....。

それにしても、C++/CLI は、有望、だと思う。
82デフォルトの名無しさん:2005/09/21(水) 21:33:10
/ | ハ    \ ////    ヽ
! l |l、、\     ` 丶 、'´_ 、     、
! l ‖\、 \_     _ /, -`ヽ    }
、 l ‖_ >:=‐  ̄ ̄「 l| l    } 、  ヽ   んっ んんっ…
ヽ 、i`─ '´ ___   | ll ⌒; j  、   ヽ
 \ヽ r,ニ、‐‐'‐' u .l ll   '_ノ   、    ヽ 
   ` \"\):、    | l|  `、 ヽ  、   ヽ
      ヽ  ゞ'^     ! ll   `、 ヽ  、    ヽ
     丿   .:::.  | l|     \ ヽ、 、   ヽ
     丶、_        | l|/lヽ   `>=‐- ミヽ   `、
          `⌒ヽ_  | l| | ハ  /´     `ヽ   、
  チュパ  /  /. `´| l| | l / 〃        `、  、
 チュパ  /   /     | l| | l' 〃            


                             【ゴールデンレス】

このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
83デフォルトの名無しさん:2005/09/21(水) 22:50:20
この板アホアンチ多くね?
健全にMSの話題ができん。
84デフォルトの名無しさん:2005/09/21(水) 23:00:17
技術の話ならするよ。
マンセーやアンチは置いといてさ。
85デフォルトの名無しさん:2005/09/22(木) 08:42:24
>>80
いや、独り言じゃないから。
馬鹿をメタクソにやり込めただけだから :-P
8672:2005/09/22(木) 08:57:32
>>73
 俺 が 悪 か っ た

でもほんとこれ以上肥大させるのは勘弁して欲しい。
SubversionのFAQだったかな、「svnはなぜC++でなくCで記述されているのですか?」「C++だとポータビリティが低下するからです」。
わざわざ醜い言語仕様にして後方互換性を保ってもこのザマ。
まあそこがC++らしいっちゃらしいんだけどね。
87デフォルトの名無しさん:2005/09/22(木) 12:16:31
C++でもテンプレートを禁止すれば互換性はかなり保てると思う。

けど俺はテンプレートのないC++なんて使いたくないがな。
88デフォルトの名無しさん:2005/09/22(木) 12:29:33
89デフォルトの名無しさん:2005/09/22(木) 12:34:16
そこでMozilla Portability Guideですよ。
90デフォルトの名無しさん:2005/09/22(木) 12:38:26
91デフォルトの名無しさん:2005/09/25(日) 14:11:17
>>53
GNU.NETのcsccは、Cのコードとミックスできるようだな。
WindowsのVC++ .NETで書けるCとのミックスコードを、コンパイルできるらしい。
(ただしCからWindows固有の機能を使ってはダメ)
92デフォルトの名無しさん:2005/09/25(日) 19:10:44
いみなくね?
93デフォルトの名無しさん:2005/09/26(月) 02:16:25
C++/CLIで書いてもC#で書いてもはたまたVB.NETで買いても
吐き出される中間コードはどれも一緒だよ
94デフォルトの名無しさん:2005/09/26(月) 02:49:26
dotGNU Portable.NETってCLIのクラスライブラリ用いてlibc作ってなかったっけ?
95デフォルトの名無しさん:2005/09/26(月) 06:44:54
pnet-ctools - Development tools for compiling C to IL bytecode

This package provides the tools & links to the toolchain for compiling programs written in C to IL bytecode.
96デフォルトの名無しさん:2005/09/26(月) 09:13:12
>93
pure とか mixed とかいろいろあるんだよ
97デフォルトの名無しさん:2005/10/01(土) 10:07:04
「Inside the C++ Object Model」を書いていたStanley B. Lippmanが、
http://www.amazon.co.jp/exec/obidos/ASIN/0201834545/
C++/CLIの本書いてるなあ。

C++/Cli Essentials (MICROSOFT .NET DEVELOPMENT)
http://www.amazon.com/exec/obidos/tg/detail/-/0321174054/
http://www.compman.co.uk/htmlcat/0321174054_CplusplusCLI_Essentials.asp

Essential C++の人
http://www.amazon.com/exec/obidos/tg/detail/-/0201485184/
98デフォルトの名無しさん:2005/10/03(月) 10:35:22
今までmanaged C++本買い捲って勉強してた人たちはどーなるわけ?
99デフォルトの名無しさん:2005/10/03(月) 11:12:18
>>98
今まで通りでしょ?
C++/CLIへの大きな準備が一つ済んでるだけ。

変換ガイド: Managed Extensions for C++ から C++/CLI へのプログラムの移行
Stanley B. Lippman
Microsoft Corporation
2. マネージ型
http://www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp#transguide_topic3
100デフォルトの名無しさん:2005/10/03(月) 11:23:49
今まで通りなら、もうC++/CLI本を買わなくて良いわけね?
101デフォルトの名無しさん:2005/10/03(月) 11:48:23
>>100
そんな事ないな、C++/CLI特有の癖が出るから
こんなコードにしとけってのはある
102デフォルトの名無しさん:2005/10/03(月) 11:49:50
で、mc++系の本はドブに捨てときゃいいわけ?
103デフォルトの名無しさん:2005/10/03(月) 12:50:53
>>99
C++/CLIでManaged C++が捨てられるのだけは確定では?
大きな準備がどうとかほざいてる奴は同様にCOMも死んでないって言うんだろうねえ。
そもそも「移行」ってどんことか知らない奴は気楽に言ってくれる。
104デフォルトの名無しさん:2005/10/03(月) 12:53:26
どうしてMSがらみのマはいつもいつも「移行」に追い立てられなきゃならんのかな。
いつも「移行」だよ。簡単ですからとか、技術の発展ですとか言われてナ。
105デフォルトの名無しさん:2005/10/03(月) 12:58:51
>>104
そうは言っても、いずれは捨てていく物もある訳で
ある程度かき回してくれるおかげでオープンシステムになっていてもニッチ産業以外の所で小さい所が勝負できる
106デフォルトの名無しさん:2005/10/03(月) 13:05:41
>>104
その点COBOLなら変化がなくて安心ですね(^^)
107デフォルトの名無しさん:2005/10/03(月) 13:12:55
>>104 >>105
あおりのつもりかも知れんが、コンピューターの世界はレイヤーで残っていくもんだよ。

Javaで呼び出す部分にCOBOLで作らせたり、いろいろと。

実行環境はふつー継承されるもんで、丸ごと消えるってのはありえない。
108デフォルトの名無しさん:2005/10/03(月) 13:18:07
使われる前に消え去った.NET1.0、2.0、mc++って一体...
109デフォルトの名無しさん:2005/10/03(月) 14:09:06
managedを理解してないと、
C++/CLIでmanagedとunmanagedを混在させたコードを書けないよ。
managedだけでいいって人は、managed C++は捨てていいと思う。
C++/CLIではその辺(__gcとか)を隠してくれるから。

自分は言語が好きだから、managed C++→C++/CLIの以降はいい事だと思うけれど、
現場は大変だよね。(けどmanaged C++で仕事始めているところってあるの?)
110デフォルトの名無しさん:2005/10/03(月) 14:12:08
C、C++のライブラリが使えるのが重要なんであって、そんなんやったらC++の意味無いやん。
111デフォルトの名無しさん:2005/10/03(月) 14:41:10
今110が正解を言った!
まあ、_tmainなんて腐ったもの見たくねーよな、みんな。
112デフォルトの名無しさん:2005/10/03(月) 14:42:02
本当はWinMainもみたくなかったよママン
113デフォルトの名無しさん:2005/10/03(月) 14:47:00
>>109
>managedを理解してないと、
>C++/CLIでmanagedとunmanagedを混在させたコードを書けないよ。
>managedだけでいいって人は、managed C++は捨てていいと思う。
すると、C++/CLIが規格通っても、新しく勉強する人はmanaged C++から
勉強しなきゃいけないの?そんなに大変ならJava使いたいよね。

>自分は言語が好きだから、managed C++→C++/CLIの以降はいい事だと思うけれど、
>現場は大変だよね。
学生やら工作員の人は楽でいいよね。現場は大変だよ。

>(けどmanaged C++で仕事始めているところってあるの?)
それはない。.NET自体、ないしな。(w
114デフォルトの名無しさん:2005/10/03(月) 14:53:34
さあ、盛り上がってきます他。
115デフォルトの名無しさん:2005/10/03(月) 14:54:19
>>113
.NETはあるってw
VB.NETだけど
116デフォルトの名無しさん:2005/10/03(月) 15:32:46
>>108
.NET2.0ってなくなっちゃったの?
117デフォルトの名無しさん:2005/10/03(月) 15:37:11
C++/CLI、標準になってないのに__propertyをpropertyにしているな。
それからspaced keywordダサ過ぎ…
118デフォルトの名無しさん:2005/10/03(月) 15:37:47
>>116
managed APIはなくなって、単なるライブラリになちゃたお。

じゃ、C++/CLIいらねーじゃん。

ttp://pc.watch.impress.co.jp/docs/2005/0804/mobile301.htm
          
マイクロソフトOBでWindows 1.xの時代からWindowsの開発に関わっていた方(2000年に退職)から
コメントをいただいた。引用させていただくと

“私の住むシアトル近辺のマイクロソフトOBの間では、2004年の前半に「Longhornがキャンセルに
なったらしい」という噂がさかんに交わされ、その後次々と「OFSはLonghornとは別」、
「Managed APIは採用しない」とのアナウンスがありました。結局の所、もともと計画していた
Longhorn は出せなくなったけれども、いまさらキャンセルになったとは言えないので、出せるもの
だけかき集めてLonghornと呼ぶことにした、という見方がこちらでは一般的です”
119デフォルトの名無しさん:2005/10/03(月) 16:36:52
>>118
>managed APIはなくなって、単なるライブラリになちゃたお。

これの意味が分らないんだけどどういうこと?
120デフォルトの名無しさん:2005/10/03(月) 16:42:39
> 同氏のコメントには「Managed APIは採用しない」というものもあるが、
> 確かにWinFXの位置付けも変化してきているように思える。一昨年秋の
> Professional Developers Conferenceでは、WinFXはLonghornの
> ネイティブアプリケーションが利用するManaged CodeベースのハイレベルAPIで、
> 次世代Windowsが実現する機能を新しいクラスライブラリでくるんだものだ
> と話していた。対してWin32を使うのは(WinFX混在も不可能ではないが)
> レガシーアプリケーションのみという話だったように記憶している。

managed APIの意味は分ったお。でも.NET2.0って元々Win32のラッパーじゃなかった?
121デフォルトの名無しさん:2005/10/03(月) 16:55:48
俺も>>118は意味がわからんところが多いな。
実際問題managed objectが存在しなくなるなんて事言っているわけじゃないでしょ?
俺は要らないんだけれど、今更そんな変更出来るわけがないし(w
まあ適当なところでお茶を濁すつもりじゃないかと。
122デフォルトの名無しさん:2005/10/03(月) 17:35:41
まぁようするに
本来のVistaはmanagedプログラミングしか許さない設計で
NativeC++でプログラムすると速度が遅くなるはずだったのが
開発の遅れと.Netが糞なせいでNativeC++とmanagedが対等の関係
もしくは NativeC++ > managed になっちゃった!
って事だろ
123デフォルトの名無しさん:2005/10/03(月) 17:59:22
つまり今と状況は変わらないと。
124デフォルトの名無しさん:2005/10/03(月) 18:28:10
いつものパターン
125デフォルトの名無しさん:2005/10/03(月) 19:13:19
最近になってやたらとXPのCM入れたりしてるのは、Longhornの遅れが響いてるのかな。
126デフォルトの名無しさん:2005/10/03(月) 19:16:26
>>120 >>121

>でも.NET2.0って元々Win32のラッパーじゃなかった?

OS本体がマネージドなWinFXとなって、下位互換のためだけに、その上にWin32APIをエミュレートする予定だったお。
127デフォルトの名無しさん:2005/10/03(月) 22:24:08
急にスレ伸びたなおい。

言語仕様としてスコープの概念が使える(スコープ切れでデストラクタを呼び出させる)のは
やっとキタかって感じだな。

C++使いからみてJava/C#あたりのGC系言語の大きな不満といえば、あとは
constメンバかな。あれはやっぱりCLIに組み込むのは難しいのかなぁ。。。

#もちろんmodoptに仕込むとかは今でもやってると思うけど、
#多言語との相互運用とかいろいろ考えるとむりぽかなぁ。。。
128デフォルトの名無しさん:2005/10/03(月) 23:01:16
メモリの配置位置がそもそも移動するから無理ぽ。常時pinするような状況になるわけで
それならヒープに普通に置いた方がめんどくさくなくない?
129デフォルトの名無しさん:2005/10/03(月) 23:09:59
>>127
俺はそれよりもSTLを使いたいがためにC++を使っている。
130デフォルトの名無しさん:2005/10/03(月) 23:11:52
つSTL.NET
131129:2005/10/03(月) 23:22:26
>>130
それは知っている。
こういうのがないから俺もJavaやC#は好きになれんと言いたかった。
132デフォルトの名無しさん:2005/10/03(月) 23:38:13
STL.NET がC#にも対応したら、複雑だな
133デフォルトの名無しさん:2005/10/04(火) 00:12:25
>>126
そもそもそんな事したらIntelが黙って無いだろ
それはCPUは何でも良いって事になるんだぞ
134デフォルトの名無しさん:2005/10/04(火) 08:31:33
別にintelは気にしないだろ。昔から殺伐した仲だし
32bit->64bit移行もあるから、そこらを切り離すのは普通の判断だべ
135デフォルトの名無しさん:2005/10/04(火) 09:40:41
>>126
> OS本体がマネージドなWinFXとなって、下位互換のためだけに、
> その上にWin32APIをエミュレートする予定だったお。

この設計がもう滅茶苦茶バッドセンスなわけだが…それでいて、

>>122
> NativeC++でプログラムすると速度が遅くなるはずだったのが

って、それお前等がそうやっているからやん…

やはり最初はnativeの上にmanagedをwrapしていくことから地道に始めるべきだったかと。
136デフォルトの名無しさん:2005/10/04(火) 09:44:53
>>132
一応、言語依存をなくす方向だよね。> STL.NET
CLI的なgenericにして。

ただこんなこと(言語非依存)やっていると、どんどん実装が遅れる。
ISO C++の時みたいに仕様だけどんどん出来て実装が追い付かない。

まあ流石にHaskell.NETは置いてきぼりだろうが(w
137デフォルトの名無しさん:2005/10/04(火) 10:39:29
>>135
概ね同意。
でも、営業的にはもうWin32APIを切り捨てたいというのがあるんだよな?確か。
その為に移行期間としてエミュレーションで動くようにして、徐々に
減らしていくぞと。この方向は間違ってはいなそう。

営業的見解から言い出したことが、やってみたら
(技術的にか時間的にか環境的にか知らないが)やっぱり難しかった
って結果のような気がする。個人的にはゆっくり移行で良いと思ってるので
この流れで良いかな。
138デフォルトの名無しさん:2005/10/04(火) 12:27:46
VC8には、STL/CLI(STL.NET)が入らない
http://www.ailight.jp/blog/sha256/archive/2005/10/04/9826.aspx

残念でした。
139デフォルトの名無しさん:2005/10/04(火) 12:48:22
>>137
> 営業的見解から言い出したことが、

"光の速さの経営"的見解に決まっているでしょ…

>>138
まだ無理。正直C++依存性が残ってる。
早く入れすぎて悪い設計を改変できず負の遺産、
これがMSの技術面の一番悪いところだから、入れないことはいいんじゃないの?
140デフォルトの名無しさん:2005/10/04(火) 13:06:46
>>137
>でも、営業的にはもうWin32APIを切り捨てたいというのがあるんだよな?確か。
>その為に移行期間としてエミュレーションで動くようにして、徐々に
>減らしていくぞと。この方向は間違ってはいなそう。

だから、困るっちゅーに。
ソースコードってのは生き残るもんであって。
141デフォルトの名無しさん:2005/10/04(火) 13:23:19
結局は、
・Win32じゃないNative APIも。
・Win32はNativeの上に互換ライブラリで。(ただし少しは改変必要)
・managedの世界もありまっせー。
になるんじゃまいか?
142デフォルトの名無しさん:2005/10/04(火) 13:25:14
>>117
> それからspaced keywordダサ過ぎ…

いまさらcppの意味まで変えようつーのにはたまげた…
(cpp単体での)互換性切り捨てすぎ…というかアホ? > MS/Lippman
143デフォルトの名無しさん:2005/10/04(火) 17:23:27
もうC++の名を捨てて新しい言語として出直したらいいのに


……そりゃC#か
144デフォルトの名無しさん:2005/10/04(火) 21:29:10
145デフォルトの名無しさん:2005/10/04(火) 23:43:18
結局C++をなんとかしようとしてどうにもなりませんでしたというわけだ。
Javaはガベージコレクタはありますがcloseメソッドをその都度呼び出せとだましとおす気だ。
closeがdeleteだったらバカは気づいただろう。
C#は誰も理解していないしその存在が不明だ。この言語はいったいなんなのだ。
C++/CLIは超難解なC++言語でがんばって数十メガのVMがロードされるというわけだ。
むくわれない。

あきらめろ。もうC++はboostとがんばれよ。
146デフォルトの名無しさん:2005/10/05(水) 00:21:27
人の邪魔をするな。
俺は俺だ。お前がどう感じようが関係ない。
147デフォルトの名無しさん:2005/10/05(水) 00:42:35
>>145
今時のパソコンで数十メガなんて意味を持たない
148デフォルトの名無しさん:2005/10/05(水) 00:45:18
わざわざ対象のスレにまで来てネガティブキャンペーンをするやつは
結局のところ、自身の不安の裏返しなのだ。
149デフォルトの名無しさん:2005/10/05(水) 01:12:28
せっかくC#おぼえたのにー
150デフォルトの名無しさん:2005/10/05(水) 01:13:10
無駄銭だったねw
151デフォルトの名無しさん:2005/10/05(水) 02:00:48
そもそもC++&.NETが間違いだよなぁ。
まあ今更だけど。
152デフォルトの名無しさん:2005/10/05(水) 02:45:38
無駄じゃない!全然無駄じゃない!
153デフォルトの名無しさん:2005/10/05(水) 04:14:57
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄ァァァ!!!
154デフォルトの名無しさん:2005/10/05(水) 08:39:38
だからぁ、普通のC++ライブラリを混ぜれて、コンパイラオプションでWin32/Win64/ドトネトが切り替わるなら、どんどん使ってやる。
155デフォルトの名無しさん:2005/10/05(水) 10:49:38
>154
C++/CLI はその通りですが何か?
156デフォルトの名無しさん:2005/10/05(水) 10:53:11
STLさえ使えなくて、パチモンのSTLドトネトが要るなんて...
157デフォルトの名無しさん:2005/10/05(水) 11:18:23
>C++/CLIは超難解なC++言語でがんばって数十メガのVMがロードされるというわけだ。
・゚・(つД`)・゚・

>今時のパソコンで数十メガなんて意味を持たない
     ∧_∧
     ( ´∀` )  このゴミ、どこに捨てたらいい?
     /⌒   `ヽ
    / /    ノ.\_M
    ( /ヽ   |\___E)
    \ /   |   /  \
      (   _ノ |  / ウワァァン ヽ
      |   / /  |ヽ(`Д´)ノ|
      |  / /  ヽ(>>147)ノ
      (  ) )     ̄ ̄ ̄
      | | /
      | | |.
     / |\ \
     ∠/

158デフォルトの名無しさん:2005/10/05(水) 11:48:48
>>157
「C++/CLIは」というより、
Longhornは常にCLRが動いていて、その上でサービスを受けるわけでしょ。
C#やVBだって同じ。
159デフォルトの名無しさん:2005/10/05(水) 11:58:04
      ∧_∧
     ( ´∀` )  このゴミ、どこに捨てたらいい?
     /⌒   `ヽ
    / /    ノ.\_M
    ( /ヽ   |\___E)
    \ /   |   /  \
      (   _ノ |  / ウワァァン ヽ
      |   / /  |ヽ(`Д´)ノ|
      |  / /  ヽ(Longhorn)ノ
      (  ) )     ̄ ̄ ̄
      | | /
      | | |.
     / |\ \
     ∠/
160デフォルトの名無しさん:2005/10/05(水) 12:31:44
>>158
LHは1.1じゃなかったっけ?
161デフォルトの名無しさん:2005/10/05(水) 13:47:31
2.0 だろ。WinFX は PlatformSDK のような扱いになるらしいが
>>158
もともとCOMサーバが動いてるんだから、変わらないでしょ
CLR は COM 後継なんだし
162デフォルトの名無しさん:2005/10/05(水) 14:45:51
後継にしては今までのソースが全て吹っ飛んでしまうのは何故?
163デフォルトの名無しさん:2005/10/05(水) 18:45:25
そこでC++/CLIですよ
164デフォルトの名無しさん:2005/10/05(水) 18:55:03
>162
(゚Д゚)ハァ?
165デフォルトの名無しさん:2005/10/06(木) 02:33:02
>>162
レガシー
166デフォルトの名無しさん:2005/10/06(木) 14:27:21
>>165
もうカルディナは必要ありません。
167デフォルトの名無しさん:2005/10/06(木) 14:37:56
Vistaはネッツに吸収されました。
168デフォルトの名無しさん:2005/10/06(木) 15:13:30
アニヲタばっかりだな
169デフォルトの名無しさん:2005/10/06(木) 15:15:10
車なんだけど...
170デフォルトの名無しさん:2005/10/06(木) 15:28:17
>>68
LinqやActive Objectが、C++0xに入るわけないだろ。

この辺が入ったC++/CLIはEMCAで標準化されるだろうけど。
171デフォルトの名無しさん:2005/10/06(木) 15:41:49
そーいえば、C貪とかいう標準化されたどーでもいーものがあったね。

標準化なんてCOBOLでもある。
というか、プログラムの長持ちではCOBOLのが先輩だね。
172デフォルトの名無しさん:2005/10/06(木) 16:22:27
168 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/06(木) 15:13:30
  アニヲタばっかりだな

169 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/06(木) 15:15:10
  車なんだけど...
173デフォルトの名無しさん: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デフォルトの名無しさん:2005/10/07(金) 00:25:44
よくわからんが、車を元ネタにした名前が出てくるアニメがあるって解釈でいいのか?
176デフォルトの名無しさん:2005/10/07(金) 00:32:14
>>175
レイアースの登場人物の名前は車に由来。
ジョジョの登場人物の名前はミュージシャンに由来。

とCLAMPのアニメを3本見ただけの俺が答える。
177デフォルトの名無しさん:2005/10/07(金) 00:32:53
つまり「アニヲタばっかりだな」が正解?
178デフォルトの名無しさん:2005/10/07(金) 01:28:14
>>177
「アニヲタ馬鹿だな」が正解。
179デフォルトの名無しさん:2005/10/07(金) 14:04:43
アニオタのせいで秋葉原って今ものすごいキモイ町になってる
180デフォルトの名無しさん:2005/10/07(金) 14:41:26
そういや開業直後にTXに乗ってアキバへ行ったが、駅を出たら見知らぬ光景に遭遇して慣れるのに
時間を要した。ちなみにヨドバシカメラにはまだ行っていない。
181デフォルトの名無しさん:2005/10/07(金) 20:32:11
>>179
アニヲタはそれほどでもない。むしろエロゲヲタが酷い。
182デフォルトの名無しさん:2005/10/07(金) 20:52:23
>>181
悪いが区別が付かないのでどうでもいい。
183デフォルトの名無しさん:2005/10/07(金) 20:53:42
>>182
プログラマとSE
184デフォルトの名無しさん:2005/10/07(金) 21:07:08
>>183
悪いが区別が付かないのでどうでもいい。
185デフォルトの名無しさん:2005/10/07(金) 21:15:49
よくテレビや雑誌で晒されてるようなヲタって何ヲタなの?
電車男みたいなやつ
186デフォルトの名無しさん:2005/10/07(金) 21:39:55
ヲタというより、むしろ朝からパチンコ屋に並んだり、競馬場にたむろしてる連中を連想する。
187デフォルトの名無しさん:2005/10/07(金) 22:54:11
パチンコ屋に並ぶのは朝しかねーだろ?
バカかおめー昼夕オープンなんて滅多にないんだぞ
しね
188デフォルトの名無しさん:2005/10/08(土) 00:03:20
とパチンカスが言っております。
189デフォルトの名無しさん:2005/10/08(土) 01:40:45
>>185
プログラマじゃないの? :-)
190デフォルトの名無しさん:2005/10/08(土) 02:08:49
>>186
社会の底辺にいる人達か。
191デフォルトの名無しさん:2005/10/08(土) 02:13:23
なるほど、プログラマは朝からパチンコ屋にならんで競馬場にたむろしてマルチ萌え〜とかセリオたんハァハァって言ってる人たちなのか
モニタの上に変なフィギュア飾ってるし
192デフォルトの名無しさん:2005/10/08(土) 02:15:16
>>191
通常の業務の上にそんなことまでしてたら過労死するな。
193デフォルトの名無しさん:2005/10/08(土) 21:40:48
朝からパチンコ屋にならんでなんいうやつはアフォ1確
お金をつかって買い物するっていってるような物だぞw
194デフォルトの名無しさん:2005/10/08(土) 21:41:33
>>193
おまえは中国人かよw
195デフォルトの名無しさん:2005/10/08(土) 21:43:57
デカ顔&短足&チビの日本人よりはマシw
196デフォルトの名無しさん:2005/10/08(土) 21:44:57
ズボシだったのか
いや、悪気はなかったんだ
ジョークだ許してくれ
197デフォルトの名無しさん:2005/10/08(土) 21:44:59
COME WITH ME
ってカッコイイ
198デフォルトの名無しさん:2005/10/08(土) 21:55:29
誰か>>193の言わんとすることをわかりやすく解説してください。
199デフォルトの名無しさん:2005/10/08(土) 21:57:38
おまいら、巣にカエレ
200デフォルトの名無しさん:2005/10/09(日) 00:56:46
>>198
日雇いのバイトで得た給料を次の日にパチンコでなくすようなやつなんだ。
そっとしといてやれよ。
201デフォルトの名無しさん:2005/10/09(日) 01:00:55
プログラミングヲタよりは(ry
202デフォルトの名無しさん:2005/10/10(月) 13:13:40
>>200
その日の内にだろ
203デフォルトの名無しさん:2005/10/10(月) 16:34:14
>>202
夜勤の場合はその通りだな。
204デフォルトの名無しさん:2005/10/10(月) 21:48:37
ここにいるひとってやっぱ電車男みたいな人ばっかり?
俺は電車男そのものだけど・・・orz
205デフォルトの名無しさん:2005/10/11(火) 00:50:45
電車男って、アニメオタクでプログラミングなんてしないんじゃ? (テレビしか見てないけど
206デフォルトの名無しさん:2005/10/11(火) 00:51:50
電車男はあまりオタクじゃないよ
完全に消費者だし
207デフォルトの名無しさん:2005/10/11(火) 01:27:57
もはやC++/CLIはどうでもよくなってる罠
208デフォルトの名無しさん:2005/10/11(火) 01:31:00
>>168逝って良し
209デフォルトの名無しさん:2005/10/11(火) 11:16:33
>207
必死に自作自演してるんだよ。ほっとけ
210デフォルトの名無しさん:2005/10/20(木) 02:58:49
へー、pure Java の CLRなんてあるのか。
逆もあれば、無限に重ねられるな
211デフォルトの名無しさん:2005/11/05(土) 01:08:45
>>210
詳しく
212デフォルトの名無しさん:2005/11/05(土) 13:22:36
C#のほうが気になる
213デフォルトの名無しさん: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デフォルトの名無しさん:2005/11/22(火) 07:00:04
checked statement なぜ使えないのだろうか...orz
217デフォルトの名無しさん:2005/11/22(火) 08:16:08
C++/CLIをちょっと.NETのライブラリとか使いたい部分だけマネージにして後はほとんどアンマネージにしてる人って居る?
その場合の速度知りたいんですが・・・
C#ちょっともっさりしすぎ。
218デフォルトの名無しさん:2005/11/22(火) 13:42:52
>>217
部分的にでもCLRを呼び出している以上起動時のもっさり感は変わらない。
P/Invokeよりは高速とはいえ、ネイティブ−マネージドの遷移は負荷が高いから
混ぜたいなら呼び出しの単位は大きいほうがいい。
画面まわりをネイティブで書いて、メニューからのイベントをマネージドで
処理するような使い方(またはその逆)は向いているが、
特定のロジックをネイティブにして頻繁にマネージドコードから呼び出すのには向いていない。
219デフォルトの名無しさん:2005/11/22(火) 20:50:52
ホスティングすればいいんじゃないの?>起動の遅さ
ttp://d.hatena.ne.jp/akiramei/20051108
220デフォルトの名無しさん:2005/11/22(火) 21:33:23
STL.NETはどこからダウソできるん?
221デフォルトの名無しさん:2005/11/24(木) 09:32:05
STL.NETじゃね?
222デフォルトの名無しさん:2005/11/24(木) 11:46:15
> ネイティブ−マネージドの遷移は負荷が高い

え?
223デフォルトの名無しさん:2005/11/25(金) 01:21:05
>>219
だたホスティングしてもmscoree.dll をCOMで呼び出すだけだからあまり変わらない気がするが、
同じプロセス空間に複数のアップドメインを作ってアセンブリを起動するシェルのようなものを作れば、
それなりに起動は速くなるかもしれないですね。

>>222
え? managed codeからnative codeをオーバーヘッド無しで呼べるといいたいのかな?
224デフォルトの名無しさん:2005/11/25(金) 01:44:09
呼べるでしょ。
データの受け渡しにコストがかかるだけで。
225デフォルトの名無しさん:2005/11/25(金) 01:47:36
>>224
呼べません。
226デフォルトの名無しさん:2005/11/25(金) 01:53:34
一見そのまま呼べるかのように振る舞うだけじゃなかったか
227デフォルトの名無しさん:2005/11/25(金) 02:04:50
オーバーヘッドって具体的にどんな処理してるんだろ。
228デフォルトの名無しさん:2005/11/25(金) 02:08:03
マーシャリングとかじゃね?
229デフォルトの名無しさん:2005/11/25(金) 02:12:24
マネージドとネイティブの世界には分厚い境界線
なるものが存在するんですよ。
その境界線を越えようとするものは某北朝鮮から脱国するがごとく
リスクを負わなければならないのですよ。
230デフォルトの名無しさん:2005/11/25(金) 06:46:32
intしか使わないネイティブを、
SuppressUnmanagedCodeSecurity, LinkDemandすればコストほとんどなしなんじゃないの?

構造体もValueType使えば、ボクシング/アンボクシング行われないしね。
231デフォルトの名無しさん:2005/11/25(金) 09:22:48
>>229

つ Borland(R) Developer Studio 2006 ttp://www.borland.co.jp/news/20051124_bds2006.html

マネージドとネイティブをコンパイルで切り替えだお。
232デフォルトの名無しさん:2005/11/25(金) 11:14:41
value class制限大杉

233デフォルトの名無しさん:2005/11/25(金) 21:30:37
ref structとvalue classの違いは?

ref structって値型じゃないの?

ref classとref structの違いって何よ?デフォルトpublicとprivateの違いだけ?
234デフォルトの名無しさん:2005/11/25(金) 22:31:14
ref ←→ 値型

ref class と ref struct の違いは class と struct の違いと同じ
ref 型がCLRに管理されてるクラス。value 型は primary な値を意味するクラス
235デフォルトの名無しさん:2005/11/25(金) 22:44:30
OKありがとう。とてもわかった
236デフォルトの名無しさん:2005/11/25(金) 23:02:55
値型だと
デフォルトコンストラクタ
コピーコンストラクタ
デストラクタ
ファイナライザ
代入演算子
が定義できなかったよ。

デフォルトコンストラクタが定義できないんで引数無しのタグクラス食わせてるんだけど
何かあるんだろうか...
それとデストラクタが定義できないせいで単純にnewすると解放ができない。
237デフォルトの名無しさん:2005/11/25(金) 23:07:16
>>236
C#って知ってる?
238デフォルトの名無しさん:2005/11/25(金) 23:08:24
> newすると解放ができない。

なんか言ってることおかしくない?
解放って?
239デフォルトの名無しさん:2005/11/25(金) 23:12:33
>236
値型は primary な型を作るためのものだから、int とかにデフォルト・コンストラクタや
ファイナライザを定義しないでしょ?
240デフォルトの名無しさん:2005/11/25(金) 23:13:13
>>236
値型は、初期化しによる初期化、代入などで、
memcpyが行われるだけでいいようなオブジェクトに使う。
定義できなかったと言うより、定義しないでいいものに使う。
241236:2005/11/25(金) 23:15:45
>>238
template <typename T,typename TAG>
value struct a
{
T *p;
a(TAG)
{
p = new T();//NativeC++のスマートポインタが使えないのでCLIなスマートポインタが必要ぽい
}
};
242236:2005/11/25(金) 23:21:43
>>239,240
参照型だとコピーコンストラクタいちいち用意するの面倒じゃん。
C++とC++/CLI両対応のソース書きたいので値型にしてる。
243デフォルトの名無しさん:2005/11/25(金) 23:38:57
>>242
.Netでは「クラスは参照型」となっているのだからいつか破綻する。
244デフォルトの名無しさん:2005/11/25(金) 23:40:16
それは思考が逆で、
コピーコンストラクタが必要ないから値型にしているのであって、
面倒だから参照型を使わないんじゃない。
245デフォルトの名無しさん:2005/11/25(金) 23:41:57
値型か参照型かは性能にもろに影響してくるから
適切に選択した方がいいよ
246デフォルトの名無しさん:2005/11/25(金) 23:56:47
普通にクラスを書けばいいんじゃないか?
わざわざ値型で定義しようとするから、苦労しているだけだと思うが
247デフォルトの名無しさん:2005/11/26(土) 08:19:50
>>45
LLVMがgccに入りそうな勢いだなあ。
248デフォルトの名無しさん: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デフォルトの名無しさん:2005/11/28(月) 13:52:01
値型は生成時にデフォルト値を持つ必要がありますが、標準C++ の int 型はデフォルト値を
規定されていません。そのため、生成時に不定となる値の参照を型として保持できないと思われ
250248:2005/11/28(月) 16:40:53
>>249
ありがとうございます。
参照型でも試してみましたが、やはりだめみたいでした。
一度、GC Heapにgcnewしてそこからinterior reference?(int%)を取得することで
参照のように扱うことはできました。
どうも値型のメンバには値型かGcHeap(Cloneされる)しかおけないようです。
また、interior ptr|referenceのときもクラスのメンバにはできないようです。
251デフォルトの名無しさん:2005/11/28(月) 18:05:46
まぁ、仕様書見るとそう書いてありますね
252デフォルトの名無しさん:2005/11/28(月) 22:05:15
俺の勘で。
ref struct TestRef
{
  int i;
  UseRef r;
  TestRef() : i(0), r(i)
  {}
};
253デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/02(金) 03:41:08
C++が汚いのはもとからだろ
257デフォルトの名無しさん:2005/12/02(金) 07:44:32
>>255
思いつきで拡張してるよね。
C++の世界では有名な人達がやっているんだが…
258デフォルトの名無しさん:2005/12/02(金) 07:49:14
だれだっけ?
259デフォルトの名無しさん:2005/12/02(金) 08:28:53
260デフォルトの名無しさん:2005/12/02(金) 12:51:52
Perlは美しい。C++もああいうの目指すべき。
261デフォルトの名無しさん:2005/12/02(金) 13:27:41
>>260
漏れはあまり詳しくないんだが、そうか???本当にそうなのか???????
262デフォルトの名無しさん:2005/12/02(金) 15:34:59
そんなあなたに Brainf*ck
263デフォルトの名無しさん:2005/12/03(土) 00:57:17
>>255-257
良くも悪くもC++的っていう気はする。
264デフォルトの名無しさん:2005/12/03(土) 11:30:30
C++は細かいところで汚いなりに、それなりのポリシーがあったが、
C++/CLIに至ってはなんでもありだ。実装の都合としか思えないものもある。
265デフォルトの名無しさん:2005/12/03(土) 19:46:54
C++をぐちゃぐちゃにしC++コミュニティーを崩壊させる。



C++の衰退とC#の反映
266デフォルトの名無しさん:2005/12/03(土) 20:47:05
C#はメジャーにならない
断言する
267デフォルトの名無しさん:2005/12/03(土) 21:11:34
名無しで断言されても……
268デフォルトの名無しさん:2005/12/03(土) 22:04:56
>>265
それか!!
269デフォルトの名無しさん:2005/12/04(日) 18:49:26
C++/CLIの設計コンセプトは「拡張機能を使わなければ、既存のC++と変わらないこと」だから
別にC++に変な影響を与えないと思うけど
270デフォルトの名無しさん:2005/12/04(日) 20:03:25
果たしてそうかな
271デフォルトの名無しさん:2005/12/04(日) 20:18:12
>>270
そうだよ。
272デフォルトの名無しさん:2005/12/04(日) 20:56:43
関係ないが、親玉格のC(99)がやらかしてくれてるからなあ。
273デフォルトの名無しさん:2005/12/04(日) 21:15:11
C++はまだ「生きた」言語なんだよ。
まだまだ進化する。
274デフォルトの名無しさん:2005/12/04(日) 21:41:25
ここに書いて良いのかわからんかったんですが。
タスクマネージャーの「CPU使用率の履歴」みたいな動的な(?)グラフを出せるものを書きたいのですが
何から手をつければいいのか、全くわかりません。
アドバイスよろしくお願いします。
275デフォルトの名無しさん:2005/12/04(日) 21:46:55
age
276デフォルトの名無しさん:2005/12/04(日) 22:13:21
277デフォルトの名無しさん:2005/12/05(月) 09:58:09
>>272
C99のマズイところでどんなとこ?
得に思い当たらないんだけど
278デフォルトの名無しさん:2005/12/05(月) 11:34:16
エラーのthrow/catchが、cとc++で別になったのは痛い。

MFCとC++、C丼とC++、MC++とC++、C++CLIとC++、それぞれ結局別物と思われてるところも痛いけど。
279デフォルトの名無しさん:2005/12/05(月) 11:43:35
実際別物
280デフォルトの名無しさん:2005/12/05(月) 15:13:07
MFCを持ち出してくるところが痛い。
281デフォルトの名無しさん:2005/12/05(月) 15:30:50
MFCって、mc++とかC++/CLIから使えるんだっけか?
282デフォルトの名無しさん:2005/12/05(月) 18:32:19
C++/CLIやmc++の構文を使ってないコードを /clrでコンパイルしたものを
C++/CLIやmc++のプログラムと読んでいいかどうかによるけど、
そう呼んでいいなら使える。
283デフォルトの名無しさん:2005/12/05(月) 18:41:23
managed と unmanagedの型でデータ交換したいのですが、
COMを使うしかないのでしょうか?

284デフォルトの名無しさん:2005/12/05(月) 19:07:05
>>283
具体例を挙げてわかるように質問してくれ。
285デフォルトの名無しさん:2005/12/05(月) 19:10:17
>/clrでコンパイルしたものを
どういったオプションでつか?
286283:2005/12/05(月) 19:33:39
>>284
混合クラスにできないだけで、
別クラスにしておいて呼び出しは可能だったのね...

Marshalingできる時はしたほうがいいのかな
ttp://msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx
287修正:2005/12/05(月) 21:25:49
unmanagedからmanagedの呼び出しはできないみたい。

288デフォルトの名無しさん:2005/12/05(月) 22:45:23
CLRホスティング・・・
289デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/06(火) 07:34:09
最強
291デフォルトの名無しさん:2005/12/06(火) 10:52:01
unko
292デフォルトの名無しさん:2005/12/07(水) 23:15:01
C++/CLIの存在意義って?

マネージならC#でよくね?
293マイク ◆yrBrqfF1Ew :2005/12/07(水) 23:19:32
そうだな。
294デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/08(木) 00:39:03
かわいそうな人
297デフォルトの名無しさん:2005/12/08(木) 01:10:46
あえてCを覚えようという気がしない。
機械語で作れないwindowsアプリはない。
298デフォルトの名無しさん:2005/12/08(木) 01:24:49
あえて計算機を覚えようという気がしない。
脳内で計算できない問題はない。
299デフォルトの名無しさん:2005/12/08(木) 06:10:14
切り返すなら同じ性質の物事を書かなきゃ :-P
300デフォルトの名無しさん:2005/12/08(木) 08:16:12
>>297
俺も未だに機械語で書いてるよ
Cだとおせーから嫌だ
301デフォルトの名無しさん:2005/12/08(木) 08:28:05
>>295
なるほど、いろんなWindowsアプリさんたちが釣れるようでつね。
302デフォルトの名無しさん:2005/12/08(木) 11:44:15
>>295はLonghornが出たら干される使い捨てデジドカ
303デフォルトの名無しさん:2005/12/08(木) 20:59:47
OSが記述できてしまう
C++は絶対に廃れないよ
しかも、デバイスドライバを書ける人は絶対に不可欠
C#やJAVAなんてモノが出来ても結局また
新たな言語が出てきて廃れるのは必至
304デフォルトの名無しさん:2005/12/08(木) 21:14:47
つまりCOBOLと似たようなもんだ。
新しい言語の出現で全盛期より減ったとは言え、需要がなくなることはありえない。
305デフォルトの名無しさん:2005/12/08(木) 21:44:19
歩く死体か。
306デフォルトの名無しさん:2005/12/09(金) 02:03:11
Cで必要にして十分な件。
307デフォルトの名無しさん:2005/12/09(金) 11:02:38
既存のプログラムが全部マネージ環境で通るようにライブラリとか
整えて欲しい。

printfやstrcmp使うとネイティブとの混合アプリになっちゃうんでしょ?
標準ライブラリの中も.NETにすりゃあいいのに。
308デフォルトの名無しさん:2005/12/09(金) 11:24:49
混合になってなんかマズイことでもあるのかい?
309デフォルトの名無しさん:2005/12/09(金) 13:12:07
>>307
あなたは根本的にCLIの世界を理解してないです。
310デフォルトの名無しさん:2005/12/09(金) 16:26:18
>>308
混合だとWin以外に持っていけるの?(あるかはしらんけど)
あと、切り替え時に異様に遅い感触。

>>309
根本を教えてくれ
311デフォルトの名無しさん:2005/12/09(金) 16:43:46
感触って君の思い込みのこと?
312デフォルトの名無しさん:2005/12/09(金) 16:53:06
>>311
/clrつけてコンパイルしなおしたプログラムが異様に遅い。
.NETにしてもちょっと遅すぎると思ってね。原因がネイティブ
部分の呼び出し負荷くらいしか思い当たらない。
313310: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でもインライン展開されるのかな?
314310:2005/12/09(金) 17:42:54
>>313の例ではネイティブへの切り替え以外に負荷になる要素は
無いと思うんだが、識者の意見希望。
315デフォルトの名無しさん:2005/12/09(金) 18:51:09
関数の処理が遅いのか、CLR の起動に手間取っているのかは、ちゃんと分けた?
316310:2005/12/09(金) 19:01:59
>>315
my_stricmpを使ってネイティブと時間の差が無いのだから、
起動時間の問題じゃないと思う。

あと、ループの回数を増減させれば処理時間も比例する。
317デフォルトの名無しさん:2005/12/09(金) 20:03:25
>>313
strcmpは?stricmpだとCLIの方はロケールとかで色々面倒くさい
ことしてそう。
318デフォルトの名無しさん:2005/12/09(金) 20:56:41
>>313
ではlstrcmpはどう?
これなら絶対にインライン展開できない。
319310:2005/12/09(金) 21:15:00
>>318
lstrcmp,これから試してみるけど先に質問。

>>317に関して、
俺、やはり根本が分かって無い模様。strcmpは313に書いた通りなのだが、
stricmpの場合でも、CLIからネイティブと同じルーチンが呼ばれるもんだと
思っていた。

この前提で、中身が一緒なら呼び出してる部分に負荷があるんじゃないかと
思っていたわけだが、ネイティブとCLIで呼び出されるstricmp(に限らず標準
ライブラリ全般)は別物なの?
320デフォルトの名無しさん:2005/12/09(金) 22:17:02
>>319
その試した見たというコードをどこかのアップローダに晒すというのは
どうだい?そうすれば同じ土俵で話ができる。
321310: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デフォルトの名無しさん:2005/12/09(金) 22:55:34
アセンブリ(アプリケーション)で閉じてる範囲に置いては、CLIはロードされないんじゃね?
323310:2005/12/09(金) 23:02:41
>>322
意味が分かりませんorz
324デフォルトの名無しさん:2005/12/09(金) 23:06:31
>>321
> つーことはやはり呼び出し負荷でしょう。

それ言うなら、

> もちろんループ回数も同じで測定している。

回数変えてファクターが何か調べないと。面白い奴だな(w
325310:2005/12/09(金) 23:10:53
>>324
回数変えたら実行秒数が比例するけど。

my_stricmpにしてネイティブと差が無いわけだから、違いは
標準ライブラリの呼び出し以外に何か考えられる?
326デフォルトの名無しさん:2005/12/09(金) 23:20:29
y = ax + b の a を比べろと言えば分かりますか?
327310:2005/12/09(金) 23:27:29
>>326
何を言ってるのか分かりませんが、
具体的に他にファクターがあるならあげてみて欲しい。

こちらの比べ方に抜けがあるならそこを指摘してくれまいか。
328デフォルトの名無しさん:2005/12/09(金) 23:31:27
ちょっと、煽りと神経質になってる人もいるみたい
まぁ、とりあえず、時間の出たマシンのスペックを教えてちょ
問題になっているのは、msvcm80.dll 辺りかな
329デフォルトの名無しさん:2005/12/09(金) 23:54:07
回数を2倍にしても実行時間が2倍になるとは限らない。
325に比例するとは書いてあるけど、比例にもいろいろあるだろうに。
330デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/10(土) 00:19:19
ワラ
332デフォルトの名無しさん:2005/12/10(土) 00:28:24
まるで見当はずれかもしれませんが
int mycomp(,,,) の前に #pragma unmanaged を置いてみるとどうなりますかね?
333330:2005/12/10(土) 00:53:42
ごめん。これは速度が違って当たり前だった。ろくにチェックしていない
before をちゃんとチェックすると、だいたい16秒でstrcmpと変わらない
むしろ、ネイティブだと一瞬なんで、処理に時間がかかる理由が気になる
334330:2005/12/10(土) 01:08:50
すまん。>>333 は元の関数のコメントアウトをしてなかったorz
mycompにすると一瞬で終わるね。もうちょっと、関数の実装をちゃんとするべきなんだろうけど
ネイティブに記述された関数はネイティブで処理されてる。となると、C標準関数が問題
なのか・・・
335310:2005/12/10(土) 08:50:45
>>329
>回数を2倍にしても実行時間が2倍になるとは限らない。
それは比例じゃないと思うけど。
言葉どおり比例と受け取って欲しい。

だからループ外のファクターでは無いと思う。

>>334
マシンの速度が分からないけど、200万回のループで16秒もかかる?

あと、strcmpだとこちらではCLIでもネイティブと同じだった。

stricmp,lstrcmpで、ネイティブとの差が2億回のループで10秒。

差が同じなので、処理内容の問題でも無いと思う。
こちらのマシン速度は>>313です。

336310:2005/12/10(土) 10:00:02
>>329
言葉が足んなかった、すまん。ax+bのbの部分はごく小さいと思って欲しい。

>>332
試してみた。
CLIでmy_stricmpをunmanagedプラグマで囲ったら、少しだけ遅くなった(3秒くらい)。
囲わなかった場合、今朝計り直してみたら1秒未満。
337デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/10(土) 10:37:48
・・・2億回で10秒って、別に違いがあって不思議じゃないよな?
339310:2005/12/10(土) 10:56:43
>>338
単純化しただけであって、回数そのものは突飛でもない。

俺が問題にしてるのはCLIで標準関数呼び出しが遅い
ということ。>>337のいうようにちゃんとやることも出来るが、
そこまでやら無くても「CLIで標準関数呼び出しが遅い」のは
今までの例で明白じゃない?

340デフォルトの名無しさん:2005/12/10(土) 11:15:41
最適化の違いだけだったりして
自分で言ってるけど、strcmp でネイティブと違いがないなら「CLIで標準関数呼び出しが遅い」
とは言えないんじゃない?
341デフォルトの名無しさん:2005/12/10(土) 11:28:40
>>339
明白かどうかわかんないから粘着してんじゃないの?
他のファクターを探す手助けにもなるんだから手抜かずにやれば?
342デフォルトの名無しさん: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;
}
343342:2005/12/10(土) 11:37:56
あ、すまん。濡れ衣だな。パフォーマンスの違いと詰め込み時間を考えれば、妥当か
ちなみに、/clr では同等のソースで11秒だった
344310:2005/12/10(土) 11:38:06
>>340
遅まきながらステップしてみた。
strcmpはCLIでもインライン展開されていた。
stricmpはcallされていて、スタックトレースウインドウに
マネージからネイティブへ以降、と表示される。

345342:2005/12/10(土) 11:48:28
漏れの環境での比較と詰め込みの結果
     CLR native
strcmp 11s 8s
stricmp 16s 13s
lstrcmp 20s 17s

なんか、綺麗な結果になった。CLR の起動コストとかで +3s ぐらい
346310:2005/12/10(土) 11:50:27
>>341
1回、1億回、2億回でほぼ直線状に並んでたから比例と書いた。
1回なら起動の時間は気にならないくらい一瞬で終わる。
347310:2005/12/10(土) 11:52:44
>>345
ループ1回で+3sかかりますか?
348デフォルトの名無しさん:2005/12/10(土) 12:39:12
>347
それはなかった。何らかのコストがかかっているのは確かみたい
CLR 側のやつはDateTime とか Console::WriteLine を使っていたので、ソースを完全に
同一にすると、
lstrcmp 19s 17s
になった。1億回のループでこれだから、あとはパフォーマンス・カウンタでも使わないと
細かくはわからない領域だと思う
ちなみにいろいろと切って静かに取ってみたら

      CLR Native CLRx64 Nativex64
lstrcmp  16s  14s   15s   12s

なんて結果になった
349310:2005/12/10(土) 12:52:57
>>348

342のソースはSTLの負荷が大きいのと、strcmpはインライン化されて
マネージ、ネイティブの切り替えは見えにくくなってると思う。

だから純粋にネイティブとCLIの差じゃなかろうか。

STLとっぱらってstricmpとかだけにしたらこちらの結果と
相似に近いのが出るんじゃないかな。

STLはマネージ側で実行されるんでしょ? だからネイティブとの
大きな差にはならないんじゃないのかと。←こっちより差が小さいから

350デフォルトの名無しさん:2005/12/10(土) 12:59:11
>349
んにゃ。STLはネイティブだよ。ループで代入しているのは、最適化でループ自体が外される
のを防ぐため

しかし、CLRx64 にはもうちょっとがんがってほすぃ
351310:2005/12/10(土) 13:01:25
>>350
>STLはネイティブだよ
ありゃそうなの? テンプレートっつーくらいだから
マネージとしてコンパイルされてるのかと思った。
352デフォルトの名無しさん:2005/12/10(土) 13:05:46
>351
それはジェネリクスを利用した STL.NET と混同してるんじゃないかな
しかし、+2秒はいったい何をしているのだろう
353デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/10(土) 22:23:25
>>346
数学苦手だった人?
355デフォルトの名無しさん:2005/12/10(土) 22:28:52
直線と言っても限りなく水平に近いものから限りなく垂直に近いものまであるわけで。
356デフォルトの名無しさん:2005/12/11(日) 00:48:46
>>353
スゲーな
357デフォルトの名無しさん:2005/12/11(日) 03:32:29
.net2.0SDKにはC++/CLIのコンパイラって付いてくるの?
managedC++は?
358デフォルトの名無しさん:2005/12/11(日) 04:57:42
ついてこない。
359デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/11(日) 07:58:58
>357
cl /clr
cl /clr:oldSyntax
ってやってみな
362デフォルトの名無しさん:2005/12/11(日) 08:05:27
>>360
つか、今時Win32 APIをコールする必要があるか???
363デフォルトの名無しさん:2005/12/11(日) 08:56:21
ある
364デフォルトの名無しさん:2005/12/11(日) 10:14:33
>>362
まだ大いにあるよ。
365デフォルトの名無しさん:2005/12/11(日) 10:49:56
>>362
君にはない。
366デフォルトの名無しさん:2005/12/11(日) 11:11:19
>>362
今時っていうか、今程度の.netじゃ、
まともなWindowsプログラミングやるならWinAPI叩かざるを得ない。
367デフォルトの名無しさん:2005/12/11(日) 12:15:19
激同
368デフォルトの名無しさん:2005/12/11(日) 19:40:02
>>366
そうか〜?
.NET Frameworkのクラスライブラリだけですべて作れますけど・・・
369デフォルトの名無しさん:2005/12/11(日) 20:06:45
いまんところ直面した問題
・IME
・Caret
・ScrollWindowEx
370デフォルトの名無しさん:2005/12/11(日) 20:08:00
>>369
初心者スレ行けばw
371デフォルトの名無しさん:2005/12/11(日) 20:15:13
>>370
あほか。流れ嫁。API呼ばなきゃいけない問題だ。かす。
372デフォルトの名無しさん:2005/12/11(日) 20:22:17
>>371
初心者スレ行けばw
373デフォルトの名無しさん:2005/12/11(日) 20:29:00
>>368
SHFileOperation

VBのMyを使えとか言ったら刺す。
374流れを読んでレス:2005/12/11(日) 22:03:40
>>371
初心者スレ行けばw
375デフォルトの名無しさん:2005/12/11(日) 22:21:02
>>368
FileDialogのカスタマイズ
376デフォルトの名無しさん:2005/12/12(月) 00:10:36
>>375
初心者スレ行けばw
377デフォルトの名無しさん:2005/12/12(月) 01:51:23
こう見るとできないことだらけだね。
MSはどうするつもりなんだろう
378デフォルトの名無しさん:2005/12/12(月) 09:21:36
そのためのC++/CLIじゃないか
379デフォルトの名無しさん:2005/12/12(月) 23:05:18
>>368
ありふれた業務アプリ程度ならそれほど困ることもないけど、
ちょっとばかしシステムに寄った途端にできないことが増える。

原因が(専ら機能面とは何の関係もない)くだらない要求だったりして
余計に萎えるというおまけが付くこともよくある。

>>377
とりあえず使い物になるVer.3を出せと言いたい。
380デフォルトの名無しさん:2005/12/13(火) 09:00:43
>原因が(専ら機能面とは何の関係もない)くだらない要求だったりして
>余計に萎えるというおまけが付くこともよくある。

あるあるww
381デフォルトの名無しさん:2005/12/13(火) 15:22:20
382デフォルトの名無しさん:2005/12/13(火) 17:15:19
Cに勝る言語はないってことだな
383デフォルトの名無しさん:2005/12/13(火) 20:46:50
Win32への依存度を下げる必然性がないんだから当たり前でしょ?
384デフォルトの名無しさん:2005/12/13(火) 21:47:52
Win95が出たときの3.1使いもそう言ってた
385デフォルトの名無しさん:2005/12/14(水) 17:36:34
Win16→Win32s→Win32のこと?
あれは言語一緒だしね…

386デフォルトの名無しさん:2005/12/15(木) 05:37:15
技術的な需要もないことはないけど、それよりただ新しいWindowsを
作らないといけないことだけが先行してるのが萎える。市場に対して
新規性を謳うことだけが最重要課題なんだよな。
387デフォルトの名無しさん:2005/12/15(木) 20:41:33
388デフォルトの名無しさん:2005/12/16(金) 00:54:50
ISOは無理。
389デフォルトの名無しさん:2005/12/16(金) 00:59:57
C#はISOだぞ
C++/CLIだってきっと
390デフォルトの名無しさん:2005/12/16(金) 08:57:14
CLI は ISO で標準化されてたっけ?
391デフォルトの名無しさん:2005/12/16(金) 10:32:21
CLI 標準はこれだな
ISO/IEC 23271:2003
392デフォルトの名無しさん:2005/12/16(金) 10:56:26
393デフォルトの名無しさん:2005/12/19(月) 23:38:22
http://itpro.nikkeibp.co.jp/article/COLUMN/20051125/225170/?ST=win

に「VC++ExpressEditionは標準C++を学習するための優れた教材である 」
てあるけど、そうなの?
.NETのWindowsアプリ作るものかとおもってたよ。

394デフォルトの名無しさん:2005/12/20(火) 00:04:06
とりあえずVC++は標準C++への準拠度が高いことに間違いない。
395デフォルトの名無しさん:2005/12/20(火) 02:58:19
これまでは準拠してなかったということ?
396デフォルトの名無しさん:2005/12/20(火) 09:38:58
そゆこと

それからC++でドトネトすると飛んでも文法だし、
大体MFCはキショイというのが定説。
397デフォルトの名無しさん:2005/12/20(火) 13:40:38
へぇ。2005からはキショクはないのか。
VC++(というIDE)を使ってなかった人も使い出したりするんだろか?
398デフォルトの名無しさん:2005/12/20(火) 20:36:35
IDEがVC6位軽ければみんな使うだろうに
399デフォルトの名無しさん:2005/12/20(火) 22:31:59
自分の価値観を回りに押し付けないように
400デフォルトの名無しさん:2005/12/20(火) 23:47:53
ただそこに意見が存在するだけで
押し付けられたとか思い込まないように
401デフォルトの名無しさん:2005/12/21(水) 14:50:12
402デフォルトの名無しさん:2005/12/21(水) 15:45:19
>現状で極めて私的な感想から言えば、>JavaとC#の
>代替プログラム言語になり得る第1候補はVisual Basicです。
403デフォルトの名無しさん:2005/12/21(水) 20:16:06
>>401
復権もなにも
C++で記述できないプログラムはないんだから・・・
404デフォルトの名無しさん:2005/12/21(水) 20:22:13
>>403
それは今のCPUがC言語を動かすことを前提としてる面も大きいと思う
405デフォルトの名無しさん:2005/12/21(水) 20:28:41
CPUがC言語を動かす?

意味不明
406デフォルトの名無しさん:2005/12/21(水) 20:32:45
0番付近がNULL対策に実メモリを割り当てないようになってたりするじゃん。
他にC言語で簡単に扱えないメモリレイアウトを要求しないとかさ。
407デフォルトの名無しさん:2005/12/21(水) 21:27:10
>>406
> 0番付近がNULL対策に実メモリを割り当てないようになってたりするじゃん
これはOSの問題という側面のほうが大きいと思う。
別にC/C++ではヌルポインタのビットパターンは0でなくとも良いとなっている。

> 他にC言語で簡単に扱えないメモリレイアウトを要求しないとかさ。
そんなもん誰も要求していない。
408デフォルトの名無しさん:2005/12/22(木) 07:22:14
>>406
x86のI/Oポートは「C言語」では叩けないよ。

喪前様が言ってるのは、例えるなら、見かけの現象だけで
「太陽は地球を回っている」と言ってるのと同じこと。

言語側から見るだけじゃ、本当の意味では計算機は理解できない。
計算機の基礎から勉強したほうがいい。
409デフォルトの名無しさん:2005/12/22(木) 08:14:09
x86のI/Oポートをたたく必要がない
410デフォルトの名無しさん:2005/12/22(木) 10:44:15
>>403
「brainfuck復権すると思う?」
「復権も何も、brainfuckで記述できないプログラムはないんだから……」
411デフォルトの名無しさん:2005/12/22(木) 10:48:17
>>410
いまだにつかっていますが、なにか?
412デフォルトの名無しさん:2005/12/23(金) 07:42:22
みんなの大好きなあの言語が.NETの仲間入り。
brainf*ck.NET
413デフォルトの名無しさん:2005/12/27(火) 11:36:51
>412
ソースコードキボン
414デフォルトの名無しさん:2005/12/27(火) 21:13:53
C++/CLIの入門サイトってありますか
415デフォルトの名無しさん:2005/12/28(水) 10:29:47
VB.NET のPGで、構文解析を行う必要が出たときに、
C++/CLI で boost.spirit 使って手軽に構文解析モジュール作成して、
VB.NET から参照設定で呼び出す

ってことが簡単に出来るならすばらしいことだと思うよ。
416デフォルトの名無しさん:2005/12/28(水) 10:32:23
マルチランゲージは素晴らしい。

現実はJ#は開封もされない事実。
ブビ厨はC貧を嫌い、C貧はブビ厨を嫌う。

M$の理想は宣伝専用。
417デフォルトの名無しさん:2005/12/29(木) 00:42:11
>415
普通にできるけど?
418デフォルトの名無しさん:2005/12/29(木) 05:23:34
C#で以下のようなコードを
using (FileStream fs = new FileStream("test.txt", FileMode.Read)) {
}

C++/CLIでうまくかけるんですか?
FileStreamをスタックみたいにして作れると思ったんですが、できないのでしょうか?
419418:2005/12/29(木) 05:25:15
すいません。できました。ぜんぜんわかってませんでした。
420デフォルトの名無しさん:2005/12/29(木) 17:16:57
>414
入門するようなもんじゃねぇだろ?
C# を先に勉強した方がいいぞ
421デフォルトの名無しさん:2005/12/29(木) 20:22:02
このスレでC#を勧めるのはどうかと思う。
422デフォルトの名無しさん: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デフォルトの名無しさん:2005/12/31(土) 08:04:27
>>422の言ってることは確かに理解できるし、俺もほとんど同意だが。
ここはC++/CLIについて語るスレなんだよなw

でもマジレスすると、入門サイトありますか?とか聞くようなレベルなら
さっさとC#かVBで始めたほうがいいと思う。
424デフォルトの名無しさん:2005/12/31(土) 13:05:55
_asm{} とか書いたらどうなるんだ?って思ってやってみたら、
さすがに main() の中に書いたら怒られた。
関数単位でマネージド、アンマネージドが切り替わるんだね。
_asm{} 入りの関数はネイティブコードとして生成されるみたい。
その呼び出しをうまい具合にやってくれるのがいいね。
いや、C++/CLI で _asm{} 使うような機会があるかどうかは別として。
425デフォルトの名無しさん:2005/12/31(土) 14:20:04
>424
C++/CLI の拡張構文ではグローバルな関数の存在を認めていない
だから、ただ関数を生成しただけでは、基本的にネイティブとしてコンパイルされる
はずだよ。main はさすがに扱いが違うけど
426デフォルトの名無しさん:2005/12/31(土) 15:09:22
ふと思ったんだが boost on C++/CLI なんて可能だろうか。
ていうか、だったら素直に .NET Framework にある
便利クラス使えよって気もするが。
427デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/01/01(日) 12:25:43
CLIマッシーンってどんな環境を目指しているの?
そのうち出るかもしれない3DのUIとか検索ベースのFSまでのつなぎかな??
432デフォルトの名無しさん:2006/01/01(日) 13:21:49
いつかでるLISPマシンまでの繋ぎです
433デフォルトの名無しさん:2006/01/01(日) 15:25:53
>C++復権すると思う?

それ以前にC++ってメジャーだったっけ?
434デフォルトの名無しさん:2006/01/01(日) 19:16:48
>433
どっかの記事では1990年代は優勢とか、書いてあったな。
435デフォルトの名無しさん:2006/01/01(日) 21:07:00
C++/CLIのライブラリは .NET のライブラリをそのままISO標準にするの??
以前のライブラリを使えるのはいいけど、できればGCで楽したいなー。
436デフォルトの名無しさん:2006/01/01(日) 21:58:51
1990年代の段階ではC言語の仕事ばっかりやらされていたな。
437デフォルトの名無しさん:2006/01/01(日) 22:49:23
>>433
Java/C#なんかが出てくる前は優勢だったと言えるだろう。
ただしベターCとしてしか使われなかった割合も大きかっただろうが。
438デフォルトの名無しさん:2006/01/01(日) 23:37:51
delegateとeventの違いがわかりません。
delegateだけでいいような気がするのですが。。。

eventが存在する理由を教えてほしいです。
439デフォルトの名無しさん:2006/01/01(日) 23:40:52
delegateを簡単に扱うため
440デフォルトの名無しさん:2006/01/01(日) 23:46:17
>>439
センセー!簡単になる場面が思いつきません><
441デフォルトの名無しさん:2006/01/01(日) 23:52:42
event なら delegate の呼び出しが外から出来ないでしょ
442デフォルトの名無しさん:2006/01/01(日) 23:53:11
>>440
うるせーな。少しは自分で考えろ。
delegateは関数オブジェクトの取り扱いの簡便化ため。
eventはdelegateの呼び出しの簡便化のため
443デフォルトの名無しさん:2006/01/02(月) 14:27:27
>>438
つか比較すること自体が変だ。
delegateは型、eventはメンバ。class(型)とメンバの違いが分かりませんって
言われたってこっちが説明に困るよ。
444440: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初心者なのではずしてるかもしれませんが。
445440:2006/01/02(月) 23:56:41
あ、上のコード例はC#です。
446デフォルトの名無しさん:2006/01/03(火) 00:10:51
event がないと AddListner やら RemoveListner を自前で実装せにゃならんのさ
447デフォルトの名無しさん:2006/01/03(火) 00:38:44
>>444
あー、イベントというものが根本的に分かってないんだろう。
メンバで表現されるものを他の言語と比較すりゃわかると思う。
CLRでのクラスメンバにもてるものはフィールド、メソッド、「プロパティ」、「イベント」なのよ。
後者二つがあることがいわゆるC#が「コンポーネント指向言語」っていわれる理由でも
あり、ただのdelegateフィールドとは「まったく」別のもの。
こうやって特殊化したことによってTypeDescriptorやらで動的にコンポーネント情報を取得できる。

ちなみに 446 も言ってるが、イベントはフィールドとアクセサ(とメタデータ)でなるんだな。

public event EventHandler TextChanged;
と書いたときに生成されるのは
・privateなdelegateフィールド
・publicなadd, removeアクセサメソッド。
・イベントメタデータ
を生成している。
448440:2006/01/03(火) 00:42:44
>>446
delegateにも += や -= はあるです。
449440:2006/01/03(火) 00:46:05
>>447さんありがとう
即答できないので、調べてみます。
450デフォルトの名無しさん:2006/01/03(火) 00:57:18
>>448
delegate をそのまま公開しちゃうと呼び出しが外から出来てしまうのが問題なのよ

ここはC++/CLIのスレじゃ?
451デフォルトの名無しさん:2006/01/03(火) 14:54:46
.NETって使ったことないからよく分からないんだけど、
一度コンパイルしたものを、同じセキュリティーやらなんやらの設定の場合は
キャッシュしておいたコンパイル済みのコードを再利用することって出来ないの?
毎回毎回、プロセス起動のたびにコンパイルしてるのってバカみたいじゃね?
452デフォルトの名無しさん:2006/01/03(火) 15:02:06
キャッシュされるしngenもあるし
453デフォルトの名無しさん:2006/01/03(火) 19:56:52
>>451ってバカみたいじゃね?
454デフォルトの名無しさん:2006/01/04(水) 12:32:46
>>453
何だ、生意気だぞ。 (プンスカプン
455デフォルトの名無しさん: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デフォルトの名無しさん: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;
}
457455:2006/01/07(土) 13:56:25
458455:2006/01/07(土) 14:07:15
>456
今回の場合は、こちらの方法のほうがよさげですね
ありがとうございます
459デフォルトの名無しさん:2006/01/09(月) 01:03:13
何というか、変態的というか。まぁ、それがC++の良さではあったわけ
だけれど。これではあまりにもコンパイラベンダ泣かせだ…可哀想に。
460デフォルトの名無しさん:2006/01/09(月) 07:55:52
C++/CLI をフルに実装できるコンパイラベンダって、
MS以外にあるのかね?

とか思ってたら、 g++ が対応したらかなり驚く。
mcs と合体するとか。
461デフォルトの名無しさん: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デフォルトの名無しさん:2006/01/09(月) 14:18:44
Cの標準ライブラリlinkしてる?
463デフォルトの名無しさん:2006/01/09(月) 14:32:49
ECMA-372ってISOになるときに内容が変更される可能性とかある?
ECMAは規格書が公開されるからいいけどISOはショボーンだからさ。
464デフォルトの名無しさん: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デフォルトの名無しさん:2006/01/09(月) 17:50:19
libpngをソースから作り直したほうが早いよ。
zlibとlibpngのソースをDLしてdswとかslnとかを開いてビルドするだけ。
やったらWindows フォームアプリのプロジェクトに問題なく使えた。
ml.exeがVCExpressにはないので$(MSVS8)\VC\binにコピーしておくこと。
466デフォルトの名無しさん:2006/01/09(月) 18:49:06
ありがとうございます!
試してみます。
467デフォルトの名無しさん:2006/01/09(月) 20:48:36
>463
ECMA から ISO に回された仕様書はただで公開しているよ
468デフォルトの名無しさん:2006/01/09(月) 21:05:35
>>467
へぇ、ありがとう
469デフォルトの名無しさん: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";
ならエラーにならなかった。
というわけで、マクロ使え。ってことだと思う。

471469:2006/01/19(木) 09:37:44
>>470
literal System::String^ var2 = var;
でもだめみたい。
static ctorでの初期化が許容できるなら
literal -> static initonly に変更するか、マクロにするしかないですね...

http://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デフォルトの名無しさん:2006/01/19(木) 12:08:38
C++の計算用DLLをC#から使えばいいだけじゃん
474デフォルトの名無しさん: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デフォルトの名無しさん:2006/01/19(木) 12:26:53
>>475
refタイプでない普通のクラスはrefクラスでラップする必要がある。ダイレクトには渡せない。
477デフォルトの名無しさん:2006/01/19(木) 13:41:47
>クラスへの参照を受け取って処理結果をその中に返す

可能だろ。
478デフォルトの名無しさん:2006/01/22(日) 14:20:10
参照クラスを値クラスに変換する
template等は用意されているのでしょうか?
479デフォルトの名無しさん:2006/01/26(木) 10:52:47
キイタ?( ゚д゚)オクサン(゚д゚ )アラヤダワァ
480デフォルトの名無しさん:2006/01/29(日) 18:09:11
C++/CLI が次の VS まで生き残ってるか、かなり不安。
とはいえ、C++/CLI を結構使ってるけど。
481デフォルトの名無しさん:2006/01/29(日) 19:45:25
C#→C++への変換ってできんの?
482デフォルトの名無しさん:2006/01/29(日) 19:50:24
そりゃいくら何でも無理だろ。
483デフォルトの名無しさん:2006/01/29(日) 20:27:13
>>481
コンパイル→.net reflector
484デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/01/30(月) 11:48:01
二項演算子で単項で使われていなかったものオンパレードですね
487デフォルトの名無しさん: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デフォルトの名無しさん:2006/01/31(火) 17:35:17
GCC の仲間に C++/CLI コンパイラが仲間入りする日が
いつかやってくると思う人、いる?
489デフォルトの名無しさん:2006/01/31(火) 17:51:54
ノシ Java もコンパイルできてるんだから、CLI抜きでやっちゃいそうな気がする
490デフォルトの名無しさん:2006/01/31(火) 18:02:27
>>489
おまい、それ普通のgcc。
491デフォルトの名無しさん:2006/01/31(火) 18:09:14
mingwで構造化例外って実装されてるの?
492484:2006/01/31(火) 18:49:53
>>487
なるほどconstはずしたらできました。
ありがとうございました。
493デフォルトの名無しさん:2006/01/31(火) 19:34:10
>490
ああ、実行エンジン無しで作っちゃいそうな気がするってこと
494デフォルトの名無しさん:2006/02/01(水) 00:17:29
CLRのこと?
495デフォルトの名無しさん:2006/02/01(水) 06:59:47
ランタイムはコンパイラコレクションが
提供しなくてもいいんじゃない?
496デフォルトの名無しさん:2006/02/01(水) 08:47:44
GCC で CIL を出力するだけじゃ意味がないから、exe を実行するときバインドするの実行
エンジンはCLR か mono に頼るの?
497デフォルトの名無しさん:2006/02/01(水) 09:02:05
>>496 そうなるだろうなぁ。
mono の mcs の方が C++/CLI コンパイルできるように・・・
ならないだろうな。

mono ではすでに ASP.NET はいい感じで動いてるんだったっけ?
Java の牙城をちょっとは切り崩すことが出来る、のかな?
って、Webアプリケーションは PHP でしか書いたこと無いんだけど。
498デフォルトの名無しさん:2006/02/01(水) 09:55:46
monoって実行ファイル起動時に外部エンジンにアタッチしてやりとりできるいい仕組みって
ある? Java の JNI で C/C++ から VM 叩くようなヤシ
499デフォルトの名無しさん:2006/02/01(水) 10:32:17
DLL の呼び出しと同じ仕組みが使えた気がする。

以前、コンソールアプリをポータブルに作ろうと思って、
ncurses ライブラリを使って C# コンソールアプリを作った。
ncurses の DLL を C# から呼び出すようにして。
それは Visual Studio .NET 2003 で作成。

で、ncurses の共有ライブラリが入ってる Debian に、
VS でコンパイルした *.exe をそのまま持って行って、
何も考えずに mono で実行したらちゃんと libncurses.so
とかその辺をダイナミックリンクしてくれてあっさり動いた。
500デフォルトの名無しさん:2006/02/01(水) 10:34:03
http://pc5.2ch.net/test/read.cgi/tech/1020215602/21
の兄弟の片割れが漏れなんだが(もう一人は誰か知らん)
その詳細なリポートを書いた mono の前スレが見れん。
501デフォルトの名無しさん:2006/02/01(水) 10:34:53
それはそうと、JNIって「C/C++ から VM 叩くようなヤシ」か?
漏れ JNI は使ったことないんだけど、逆じゃね?
502デフォルトの名無しさん:2006/02/01(水) 10:38:03
つーわけで、CLI からは DLL と同じように so が呼び出せると思う。
かなりオープンというか、なんというか・・・
503デフォルトの名無しさん:2006/02/01(水) 10:59:04
連投ごめん。リンク間違えた。
http://pc8.2ch.net/test/read.cgi/tech/1100616350/21 ね。
504デフォルトの名無しさん:2006/02/01(水) 13:05:25
>501
JNI は Java からの C 呼び出しと、C/C++ からの JVM 呼び出しの両方を規定してるお
505デフォルトの名無しさん:2006/02/01(水) 13:14:26
>>501 お、そうか。スマンコ
ネイティブコードからの呼び出しは正直シランコ
506デフォルトの名無しさん:2006/02/03(金) 09:47:25
ええっと、長年Cオンリーでやってきたロートルなんですが、
新しい(?)ポインタの^に関して、詳しく解説した書籍とかありませんでしょうか?

char型の文字列は 文字が1文字ずつ入っていって、最後が\0になっているという、
アセンブラレベルからするととてもわかりやすいものだったのですが、

String^ s = "0123456789" が、メモリ上にどの用に格納されるのか
さらに、この文字列に対して、
char c,*p ;
p=s;
c = *(p+10);
といった、従来のメモリ上のキッタハッタが出来なくなってきているのは、どういう仕組みなのか
を理解したいのですが。
507デフォルトの名無しさん:2006/02/03(金) 10:18:32
managedなだけよ
508デフォルトの名無しさん:2006/02/03(金) 10:43:00
>>506
JavaやLispやCLIの実行環境がどうなっているか調べろ。
509デフォルトの名無しさん:2006/02/03(金) 12:53:41
>>508
それを詳しく解説した書籍とかを訊いてんだよ、ボケが。
510デフォルトの名無しさん:2006/02/03(金) 13:02:48
そんな怒らないでよ(w
これ読みなよ、日本語はいいのがないから。

Shared Source Cli Essentials
http://www.amazon.co.jp/exec/obidos/ASIN/059600351X/
511デフォルトの名無しさん:2006/02/03(金) 15:55:01
>>506
C++のclassは理解してますか?
class objectを指すポインタと思えばよいかと。
512デフォルトの名無しさん: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' のメンバではありません。
}
};
513512:2006/02/03(金) 20:13:31
generic -> template
にしたら通りました。
generic の typename は Object前提になるのかな
514512:2006/02/03(金) 20:24:11
Reflectorでみてみたら
generic で宣言した方はパラーメータが残ってた、 class_name<T>
TはObjectを想定してるので、パラメータが残せてるんかな...
templateの方はパラメータが固定されてた -> class_name<int>
515デフォルトの名無しさん:2006/02/03(金) 23:42:54
単に、マネージドとネイティブの混合型になるから駄目なだけ
516デフォルトの名無しさん:2006/02/03(金) 23:44:42
>515 は違った。genericsは背景型が System::Object型であることを前提としており、
コンパイル時では閉じない限り、型が確定しない
そこら辺が、文字列置き換えの template とは性質が違う
517512:2006/02/04(土) 02:33:08
>>516
なるほどなっとくしました。
ありがとうございました。

System::Collections::Generic::IEnumerator<T>
などでcovariant return valueが発生したときはどうしたらいいん...orz
518デフォルトの名無しさん:2006/02/04(土) 02:45:42
つーか、512よ。インターフェイスで拘束されているわけでもない不定の FN 型の fn
のメソッドが呼び出せるわけないだろ?

>517 は具体的な例でしてくれないと状況がわからん
519512: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();}
};
520519: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(); }
};
521519: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をこのクラスのポインタとしたいのですが
いい方法はありますでしょうか?
524519: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デフォルトの名無しさん:2006/02/04(土) 22:31:14
>>523
P/Invokeの場合にはcallbackにはdelegateを使うんだっけな。
C++/CLIの場合はコールバック用のクラスとメソッドは普通のclassで作って
ref classに包含したほうが楽だ。
526デフォルトの名無しさん:2006/02/04(土) 22:33:29
>523
過去ログにがいしゅつ
527523:2006/02/04(土) 23:47:58
>>525
ありがとうございます
チャレンジしてみます。
528523:2006/02/05(日) 02:31:27
529デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/06(月) 00:31:03
>>530
ShowInTaskbar
532デフォルトの名無しさん:2006/02/06(月) 01:08:43
>>531
さんくす!
533デフォルトの名無しさん:2006/02/06(月) 01:41:27
C++プログラマーには二種類いるわけ。
C++をベターCとして使う人とC++の機能を目一杯使う人。
俺はベターC派なんだな。
C++の機能は必要最小限しか使わない。
特に枯れてない最新技術はまず使わない。
そして必ずGCをかます。
これは俺というよりも会社の方針なんだわ。
実の所、C++を完璧に使いこなせるPGはほとんどいない。
皆、言語の一角に住み着いてプログラミングする。
これが大規模な開発になるとデスマの原因になるんだな。
デスマを防ぐためにあえて制限を設ける。
俺は会社の方針は正しいと思っている。
534デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/06(月) 09:34:19
sage
536デフォルトの名無しさん:2006/02/06(月) 12:59:49
Equals を使うな。使う事を推奨するな。
http://www.ailight.jp/blog/kazuk/archive/2006/01/31/11043.as ...
537デフォルトの名無しさん:2006/02/06(月) 15:53:01
538デフォルトの名無しさん:2006/02/06(月) 16:16:06
ようするにさらし上げ?
539デフォルトの名無しさん:2006/02/06(月) 17:05:29
>>534
setするほうのプロパティを作ればよいだけではないのか?
540534: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デフォルトの名無しさん:2006/02/06(月) 19:53:28
海外の大御所がある雑誌で言った。

「私はもう二度と .Net の記事を書かない。」

マイクロソフトにだまされてる奴ら、お疲れ。
542デフォルトの名無しさん:2006/02/06(月) 20:05:34
>>541
大御所が誰だか教えて
543デフォルトの名無しさん:2006/02/06(月) 20:13:56
プラウガもC++/CLIやってるけどな。
http://www.dinkumware.com/

やつらはVC++用ライブラリにたずさわっているし、
C++/CLIはEMCAの標準化に関与しているから。

まあC++/CLIはいい言語拡張と思わないけれど、
managed C++の将来のなさには流石に脱帽。
544デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/06(月) 20:46:22
レヴューリリースだわな、managed C++は。
547デフォルトの名無しさん:2006/02/06(月) 20:49:30
正直、記憶力がおいつかない。
548デフォルトの名無しさん:2006/02/06(月) 20:55:37
でも、サービスパックも出てない VisualStudioを使うほどバカじゃなし。
MS製以外でコンパイル通るヤツってある?
549デフォルトの名無しさん:2006/02/06(月) 23:39:31
>>548
無いよ。バカ
550デフォルトの名無しさん:2006/02/07(火) 00:04:25
バカじゃん
551デフォルトの名無しさん:2006/02/07(火) 01:01:12
おまえら、VS2005マジで使うの? バカじゃん。
すでに、MSはSP出荷を確約してるんだぞ。
552デフォルトの名無しさん:2006/02/07(火) 01:44:04
>>551
じーっと枯れるのまってろこのうすらタコ!
553デフォルトの名無しさん:2006/02/07(火) 02:14:49
>>548
VB6でも使っとけよ wwww
554デフォルトの名無しさん:2006/02/07(火) 02:41:12
>>552
N88 BASIC
555デフォルトの名無しさん:2006/02/07(火) 10:21:32
バカが3匹。
556デフォルトの名無しさん:2006/02/07(火) 10:51:33
Win32コンソールアプリケーションの

int _tmain(int argc, _TCHAR* argv[])

int main(int argc, char* argv[])
にしちゃいますけど。いいですよね?引数がアルファとかヌメリックなら。

557デフォルトの名無しさん:2006/02/07(火) 11:32:34
漏れは
int main(const int argc, const char* const argv[])
558デフォルトの名無しさん:2006/02/07(火) 13:00:33
>>557
そこまでいくなら戻り値もconstにしてはどうか?
559デフォルトの名無しさん:2006/02/07(火) 13:21:59
>>558 参照返しじゃないから意味なし。
560558:2006/02/07(火) 13:27:44
>>559
ああ、確かに意味は無いなw

でも、argcもconstにしてるけど、これも意味が無いから、
それをさらに徹底させるって意味で返り値もconstにすればいいのにー
っと思っただけ
561デフォルトの名無しさん:2006/02/07(火) 14:04:04
argcの場合、意義はともかくプログラム上の意味が変わる。
562デフォルトの名無しさん:2006/02/07(火) 14:21:19
うっかり書き換えるとコンパイラにゴルァされるとか
563558:2006/02/07(火) 14:26:48
確かに関数内では意味が変わる...か。
関数のオーバーロードでは同一視されるから一緒と思ってたけど、
内部の事は忘れてた。thanks
564デフォルトの名無しさん:2006/02/07(火) 15:01:05
>>558 お前素直な奴だな
565デフォルトの名無しさん:2006/02/08(水) 00:54:04
そこでconst_castの登場だな
566デフォルトの名無しさん:2006/02/08(水) 18:26:06
全部ILで書こうぜ
567デフォルトの名無しさん:2006/02/08(水) 19:24:23
遅いからヤダよ。
568デフォルトの名無しさん:2006/02/09(木) 01:52:44
STL/CLIお蔵入り
569デフォルトの名無しさん:2006/02/09(木) 04:28:08
固定長配列はcli::array以外に用意されてない?

570デフォルトの名無しさん:2006/02/09(木) 11:58:31
>568

STL.NETは別途配布されるんじゃなかったの?
571デフォルトの名無しさん:2006/02/09(木) 12:38:09
BOOST.NETも出たりとか。
正直大混乱。
572デフォルトの名無しさん:2006/02/09(木) 13:44:43
正直いってWinXPのSP2入れたくないからとかいう理由で
SP1を使ってる馬鹿と同レベルの理屈だな

新しいものの方がいいに決まってる。たとえバグ込みでも
長い目で見れば将来性の高いほうを選択する方がよい
573デフォルトの名無しさん:2006/02/09(木) 17:47:52
>>571

BOOST.NETって何?そんなんあんの?
574デフォルトの名無しさん:2006/02/09(木) 22:47:44
>>572

その将来性のおかげで、君の部下が次々と止めていくんだがどう責任取るのかね?
575デフォルトの名無しさん:2006/02/10(金) 21:58:53
値型にデフォルトコンストラクタと代入演算子を定義できる
.NET言語ってあるんかな?
576デフォルトの名無しさん:2006/02/10(金) 22:01:31
フレームワーク内のprivateないくつかの構造体を見ると、
デフォルトコンストラクタ使ってるのがいくつかあるな。

Win32関係の構造体で自分のサイズを設定してるんだが。
577デフォルトの名無しさん:2006/02/10(金) 22:20:02
>>575
つIL (ilasm)
まぁぶっちゃけいらないっていうかあってもまずやっちゃいけないしな
578575:2006/02/10(金) 23:53:50
>>576,577
どうも

Reflectorでみてみたら
staticコンストラクタで代用しているのはありました。

こんな感じで試してみようかな...
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=40822
579575: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/11(土) 11:10:32
C++/CLIは、CLIに頼らなければいけない時だけ、
managedなコードを書かなければいけないC++だろ?

embedded C++みたいに言語の機能抜かれているわけじゃないから。

ライブラリであるSTL .NETは、C#やHaskelからも使えるSTLライブラリとして、
C++特有のところは抜かれているけれど。(特殊化関連など)
586デフォルトの名無しさん:2006/02/11(土) 11:11:09
>>585
> managedなコードを書かなければいけないC++だろ?

managedなコードも書ける、とも言えるし。
587デフォルトの名無しさん:2006/02/11(土) 11:15:34
>>585 ふむ、いわれてみればそうだな。
俺があまりにも boost 依存なコードを書きすぎていただけだと思う。
588デフォルトの名無しさん:2006/02/11(土) 15:56:27
>>581
いろんな言語が使用できるっていうのが.NETのうたい文句のひとつだったから
C#だけって言うのはいただけない
589デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/11(土) 17:26:02
「ドトネト」って言う呼び方はアンチっぽいからやめてくれ
594デフォルトの名無しさん:2006/02/11(土) 17:31:18
エロビデオのネバスペみたいなもんか。
595デフォルトの名無しさん:2006/02/11(土) 17:39:26
Win32APIなどのネイティブ呼び出しをC++/CLIでラップしてあとはC#で開発してる。
windows.h の関数や定数の定義をそのまま使える上にInteropで呼び出しも高速なので
P/Invokeよりぜんぜんいいよ。

ドトネトよりポチネットのほうが可愛い
596デフォルトの名無しさん:2006/02/11(土) 18:07:08
>>595
狂おしいほどに同意
アセンブリの中にネイティブコードを突っ込めるから
逆コンパイルにも対抗できるし。
597デフォルトの名無しさん:2006/02/11(土) 20:57:49
そんなことしたら64bitでそのまま動かないじゃん
598デフォルトの名無しさん:2006/02/12(日) 03:52:02
>>597
32bitで何か問題でも?
599デフォルトの名無しさん:2006/02/12(日) 16:51:41
C++/CLIがNativeとManagedの混合アプリを作るのに優秀なのは理解できるが、
/clr:safe なアプリをあえてC++/CLIで作ることに意味があるのだろうか。
600デフォルトの名無しさん:2006/02/12(日) 17:37:42
>>599
特になし。C++/CLIはC++使い慣れてる(C++ライブラリを膨大に抱えてる)人を
.NETに繋ぎとめておくためのもの。
601デフォルトの名無しさん:2006/02/12(日) 21:00:01
2003のWin32APIやMFCを2005ExpressEditionで使おうと
頑張ってみたが無理だった。
Win32APIはコンパイル通るけど警告出るし、
MFCに関しては全くお手上げ。
602デフォルトの名無しさん:2006/02/12(日) 22:31:04
>>601
WinAPIは2003から持ってこなくても最新のPlatform SDKを入れればいいだろうに。
603デフォルトの名無しさん:2006/02/12(日) 23:14:27
C++/CLIはVB.NETで作ったクラスライブラリを呼び出すことも可能?
604デフォルトの名無しさん:2006/02/12(日) 23:33:15
605デフォルトの名無しさん:2006/02/12(日) 23:51:30
>>602
最新のSDK持ってきたら、警告なくなったよ。ありがと。
606デフォルトの名無しさん:2006/02/13(月) 08:02:58
managed C++ みたいに C++/CLI もやっぱやーめたなんてことにはならんだろうな?
前者はなんか標準化団体には出されてたんだっけ?後者はだされてたよな?
607デフォルトの名無しさん:2006/02/13(月) 08:05:18
>>605
感謝は言葉ではなく物で示せ。
608デフォルトの名無しさん:2006/02/13(月) 12:44:28
>606
今、ISO で標準化の審査中
609デフォルトの名無しさん:2006/02/13(月) 13:03:53
>>608 それは C++/CLI だよね?
もう Managed C++ はいらんでそ。
610デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/13(月) 15:26:41
>>609
http://www.ecma-international.org/publications/standards/Ecma-372.htm
これがISOに提出された。まあISOになる可能性はないと思うけれど。
612デフォルトの名無しさん:2006/02/13(月) 16:55:39
>>611 あれ?ないの?
613デフォルトの名無しさん:2006/02/13(月) 17:22:33
CLI 自体はすでに ISO 標準になってるんだよな。
Java VM も ISO 標準にすればいいのに。
Java 言語とは切り離して。
614デフォルトの名無しさん:2006/02/13(月) 18:06:42
で、ISO 標準て何の役に立つの?
615デフォルトの名無しさん:2006/02/13(月) 18:07:31
ネームバリュー
616デフォルトの名無しさん:2006/02/13(月) 18:10:32
実質を無視したネームバリューなら、
Java >>>>>>(壁)>>>>>> C丼(I$O)
だね。
617デフォルトの名無しさん:2006/02/13(月) 18:13:08
>>616 実質的なネームバリューだと思うけど。
618デフォルトの名無しさん:2006/02/13(月) 21:22:11
>>616
Java のネームバリューってかなり実質的なものだと思うぞ。
619デフォルトの名無しさん:2006/02/13(月) 23:26:25
>>613
EMCAの時に、J2EEも同時に採用されることにこだわった。
当時は、IBMその他ベンダーが独自ビジネス向けフレームワークの覇権を争っていた。

Javaはまだまだ言語規格の変化が激しいから、10年前なら見送りも妥当だったと思う。
今は、C++みたいにろくにない実装も規格を作るのに抵抗がなくなってきている。
だからJavaも今からISOの提出してもいいと思うけれど、
EMCAのWin系規格みたいに放置されると困るよね。

C#やCLIもそんなことにならないかと心配。
620デフォルトの名無しさん:2006/02/14(火) 04:09:12
>>618
確かにJavaはネームバリューだけだな
621デフォルトの名無しさん:2006/02/14(火) 09:09:07
ドトネッツは実質NO.1










(ベーパーウェア部門)
622デフォルトの名無しさん:2006/02/14(火) 13:57:47
>610
vの中身を書き換えたいときは、必然的に(3)
(1)と(2)でコンパイル結果に差が出るかは知らんが、同じなら(2)の方が他の参照型などと統一性が採れると思う
623デフォルトの名無しさん:2006/02/14(火) 22:40:58
int^ だとボックス化のコストが高くない?
624610: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デフォルトの名無しさん:2006/02/15(水) 12:54:23
>624
何を悩んでいるのかよくわからん
列挙する型に合わせれば良いんじゃないか?
適材適所だろ
626デフォルトの名無しさん:2006/02/15(水) 16:25:30
^うざ
627デフォルトの名無しさん:2006/02/15(水) 19:45:53
よーく見ると、顔に見えてくる。
628デフォルトの名無しさん:2006/02/18(土) 14:49:04
VS 2005 C++だす
× String str = "Hello";
○ String ^str = "Hello";
いちち^付けないといけないみたいですね、
^ってどういう意味デツカ
629デフォルトの名無しさん:2006/02/18(土) 15:09:39
>>628
C++/CLIに於けるポインタ
630デフォルトの名無しさん:2006/02/18(土) 15:17:47
そっか、それで
*を^に変えろって困憊羅が言ってるの、見たような希ガスル
しかしなぁー、なぜ換える必要があるのかと、悩む事小10分
*アスタリスクはなんか他の用途でつかってるのかなぁ??
631デフォルトの名無しさん:2006/02/18(土) 15:30:01
こう覚えた方が早い
* を使っているのは C++
^ を使っているのは CLI 拡張
632デフォルトの名無しさん:2006/02/18(土) 15:44:42
>>630
*のポインタ型同士はポインタ演算があるから演算子多重定義ができない。
^の追跡ハンドルならそのようなことがないから演算子多重定義ができる。
633628:2006/02/18(土) 16:29:22
>>631
>>632サンクスです
GUIが使えるWin32でアプリケーションを作りたくて、NETや本を読んで
今学習しているところなんです、Visual Studio 2005 C++の
Win32コンソールアプリケーションを開いてボタンを押したら、
テキストボックスにメッセージを表示させたりとかして
動かしているのですけど訳も分からずに、CLIを使っていたんですね(;^ω^)
VS2005C++な環境でネイテイブなC++でコンソールアプリケーションは
作れないのでしょうか?MFCも挑戦しようと思いましたが、又別物のようですし
初心者的にはどの方向で進んだら良いでしょう、小一週間悶々としています
634628:2006/02/18(土) 16:32:13
スマソ
× GUIが使えるWin32でアプリケーションを作りたくて
○ GUIで動作するWindowsアプリケーションを作りたくて
635デフォルトの名無しさん:2006/02/18(土) 16:45:58
初心者ならC#へ行ってみてはどうかと惑わしてみる。
VS2005C++使った事無いけど、アンマネージド(ネイティブ)は作れるはずだ。
636デフォルトの名無しさん:2006/02/18(土) 16:55:38
2005は普通に「Win32コンソールアプリケーション」でネイティブを作れるはずだが…
Expressだと違うのか?
637デフォルトの名無しさん:2006/02/18(土) 17:01:58
>628
GUI でモノを作りたければ、素直に MFC に進んだ方がいいと思われ
C++/CLI はちと初心者にはお勧めできない。普通の方法では満足できなくなった玄人向け
だから
あとは、635 の進めるとおり、C# でモノを作ってみて満足できなくなったら、またこちらに
出戻ってくると言うのもいい
638デフォルトの名無しさん:2006/02/18(土) 17:15:12
>>633
コンソールアプリケーションとテキストボックスのつながりがわからん
639デフォルトの名無しさん: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になってしまいます。

どうすれば個別に設定できるようになりますか。
641640:2006/02/18(土) 21:26:55
投稿して気付いたのですが、Sizeの部分をハンドルにしたら設定出来るようになりました。
何故かがわからないですが・・・。

スレ汚しすいませんでした。
642デフォルトの名無しさん:2006/02/18(土) 21:48:34
>>641
System.Drawing.Sizeは型値だから扱いが面倒だのう。
643デフォルトの名無しさん:2006/02/19(日) 06:34:22
644デフォルトの名無しさん:2006/02/19(日) 14:36:44
>>641
というかそれはあまりよろしくない。たぶん。

p->Size = Size(64, p->Sizte.Width);

としなさい(こういうCLRの常識みたいなのもいるから
また複雑なんだよな>C++/CLI)。
645644:2006/02/19(日) 14:43:34
にゃー、コード間違いすぎ

p->Size = Size(64, p->Size.Height);

こう。
646デフォルトの名無しさん:2006/02/19(日) 15:20:04
そんなんわからん奴はC#やJavaも微妙だろ。
647デフォルトの名無しさん: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("http://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("http://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デフォルトの名無しさん:2006/02/19(日) 21:05:11
>>648
WebClient::DownloadData()の戻り値の型はcli::array<unsigned char>^。
Encoding::GetString()の引数もcli::array<unsigned char>^。
650デフォルトの名無しさん:2006/02/19(日) 21:12:35
^ ←なんかコレうざい。よくわからないけど腹立たしい。
651デフォルトの名無しさん:2006/02/19(日) 21:18:36
(^^:
652デフォルトの名無しさん:2006/02/19(日) 21:20:18
^<T>^
653648:2006/02/19(日) 21:44:16
>>649
Byte を cli::array<Byte> にしたところ、できました。

cli::array<Byte> ^ myDataBuffer = wc->DownloadData("http://www.yahoo.co.jp/");
Encoding^ enc = Encoding::GetEncoding("euc-jp");
String^ out = enc->GetString(myDataBuffer);

ばっちりです。これで先に進めます。

つい最近まで C++ Builder 使いだったので、いろいろと戸惑ってます。
ポインタは使えず、^ というものが必要だとわかるまで、延べ1日くらいかかってます。
勉強がてら少しずつ移植していきます。

どうもありがとうございました。
654Pascal:2006/02/19(日) 23:09:23
>>650
呼んだ?
655デフォルトの名無しさん:2006/02/20(月) 00:22:49
>>650
あなたの心が汚れてるからですよ(^^;;;
656デフォルトの名無しさん:2006/02/20(月) 00:30:26
そんなばかな^^;
657デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/21(火) 11:10:22
>>658
ああ、C#にしたのか。まぁそうしとけ。C++/CLIはネイティブの知識(C++)とCLRの
知識(C#)が両方要求されるひどい言語だ。最低限どっちかぐらい自由に使える
ようになってからおいで。…両方自由に使えるぐらいじゃないと使える言語でも
ないかもしれないが。

ファイナライザ?C#にもあるぞ。というかCLR用語だそれ。
まぁDisposeがスタックオブジェクトのように書けることをいいたかったんだろうけど。
川俣とかが取り上げているほど、たいしたものじゃない。あの人は大げさに書く文体
が売りだからな。いい悪いは別にして。
660デフォルトの名無しさん:2006/02/21(火) 21:17:52
通のお勧めは関数のオーバーライド
ディスポーズ・パターンの変形に目が眩んでちゃ、まだまだ
661デフォルトの名無しさん:2006/02/21(火) 21:25:46
>>660 ポリモにならんじゃん
662デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/22(水) 00:50:01
!hogeなんてあったんだ
664デフォルトの名無しさん:2006/02/22(水) 07:21:27
>>662
いや、えーと、このスレにいる以上知っている。
ildasmでも確認したしな。ああ、そうか、それをC++/CLI用語でFinalizerというのか。
665デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/22(水) 16:13:12
MFCの如くこの劣悪貧を10年使うかも。
C++ってだけでもSTLやBoostが混ざってくると複雑なのに、正直CLIはカンベンて感じだおね。
668デフォルトの名無しさん:2006/02/22(水) 17:22:04
>>667
駄菓子菓子、これがないとネイティブとかからCLRが非常に使いにくい。
ほら、次でWPFとかなんかたくさんあるし。
669デフォルトの名無しさん:2006/02/22(水) 23:36:01
マイクロソフトがもうイラネと思ったら容赦なく捨てにくるさ。
670デフォルトの名無しさん:2006/02/23(木) 02:00:23
>>669

そりゃ日本だけ。海外ではVBerが反乱おこして、msも今では Love VB, Love C#だとよ。
671デフォルトの名無しさん:2006/02/23(木) 02:53:32
C#は、VC++とVBの中間を行くような言語だから、
どっちからも反発が強いだろうね。
672デフォルトの名無しさん:2006/02/23(木) 03:03:54
反発はしないけど、C++で出来るなら C++ Nativeでやっちゃうよ。
必要なとこだけ CLIで .Netなんてライブラリ感覚で使えばいい。
673デフォルトの名無しさん:2006/02/23(木) 03:20:44
/clrでNativeコンパイルすると遅くなる?

674デフォルトの名無しさん:2006/02/23(木) 08:50:40
>673
>348
675デフォルトの名無しさん:2006/02/23(木) 09:37:51
>>669
要るだろ。

だって、C++市場をCLIで混乱させることにより、
開発者をWin@ブビ or Win@C丼で留めておける。
676デフォルトの名無しさん:2006/02/23(木) 10:00:24
>>674

遅くなるのは事実としても、何で遅くなるんだろ?
異なるライブラリがリンクされるからか? lstrcmp自体の実装が異なるのか?

それとも呼び出し時にスタックチェックでも入ってるのかね…。
677デフォルトの名無しさん:2006/02/23(木) 14:21:46
>676
単純なループでは簡単に結論が出ない問題かもしれない
ちなみに漏れの環境では
CLR 6 - 7 sec.
Native 8 sec.
となった。意外だがCLRの方が早い
Win のほうは -02 -0t を付けた状態で、CLRの方はデフォルトのリリースモジュールだ
678 :2006/02/23(木) 22:30:11
>>670
そんな話しきいたことネ
679デフォルトの名無しさん:2006/02/23(木) 22:47:11
誰か、C++/CLI で吐いた実行ファイル、
mono で動かした奴いる??

以前 VS.NET 2003 の C# で書いたコンソールアプリなら
mono で動かしたことあるんだけど。
680デフォルトの名無しさん:2006/02/23(木) 23:22:55
mono がそもそも .net framework 2.0 に対応してたか?
してるなら、/clr:pure で動くだろう
681デフォルトの名無しさん:2006/02/24(金) 08:17:28
nullptr
682デフォルトの名無しさん:2006/02/24(金) 11:48:08
ガッ^
683デフォルトの名無しさん:2006/02/24(金) 17:24:15
>>678

http://blogs.msdn.com/hiroyask/archive/2006/02/13/530769.aspx

ケツの穴が広がるぐらい、ハードに読めや。
684デフォルトの名無しさん:2006/02/24(金) 21:07:35
>>683
良く読んだよ

>表の顔の日記 

> 裏の顔の日記
> さっさと消えてくんないかな。 うざいんだけど、 まじで。
685デフォルトの名無しさん:2006/02/25(土) 04:29:20
という電波でも飛んでるのか?
686648: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デフォルトの名無しさん:2006/02/25(土) 11:43:26
typedef struct → typedef value struct
では?
688648:2006/02/25(土) 12:05:23
>>687
そうです。コピペ間違いました。

value struct HOGE{
  int x;
  int y[4];
};

と記述してます。
689デフォルトの名無しさん:2006/02/25(土) 12:17:18
・・・value型使わず、ネイティブ型で定義すれば?
690デフォルトの名無しさん:2006/02/25(土) 12:20:37
あとは ref にして array<long>^ y で宣言して、コンストラクタで初期化するか
691デフォルトの名無しさん:2006/02/25(土) 12:23:04
value struct HOGE
{
  int x;
  array<long>^ y;
};
はコンパイルが通るが、仕様上これでいいのか?
692デフォルトの名無しさん:2006/02/25(土) 12:38:17
ok
ハンドルは nullptr で初期化される
693648: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デフォルトの名無しさん:2006/02/25(土) 13:05:44
2〜3日あがくなら2〜3日かけてマニュアル読んだほうがいいような気がする
695デフォルトの名無しさん:2006/02/25(土) 13:45:46
>>693
値型にGCを求める必要がある?
696デフォルトの名無しさん:2006/02/25(土) 14:23:50
C++/CLIのスレ見てると無意味にvalueを使いたがる人が多い気がするな。
valueは動作に癖があるから基本refで作ったほうがいいと思う。
697デフォルトの名無しさん:2006/02/25(土) 16:22:08
value使ったほうが処理速度が速いとでも思い込んでいるんじゃ?
クセがあるには同意。
698648: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/25(土) 22:33:45
C++は真のローカル変数を使える言語なんだから、(ユーザー定義オブジェクト
がスタック上に配置できる)GCが必要な場合ってのはそんなに多くはならない
ってビョーン先生が言ってた。
701デフォルトの名無しさん:2006/02/25(土) 23:11:17
>>700
それはわかるけれど、C++/CLIはCLIの世界にあわせないといけないからさ。
702デフォルトの名無しさん:2006/02/25(土) 23:42:48
C++/CLIは二つの言語が同居しているようなものだからな。
C++の拡張というより建て増し。
703デフォルトの名無しさん:2006/02/25(土) 23:49:05
>699
それだと、配列のサイズが3で固定されちゃわない?
704デフォルトの名無しさん:2006/02/26(日) 00:22:20
>>702
二世帯住宅
705デフォルトの名無しさん:2006/02/26(日) 00:49:18
ビョーン先生が取り扱っている案件はそうかもしれんけどな。
動的にオブジェクトが増えたり減ったりする案件のほうが多い。
706デフォルトの名無しさん:2006/02/26(日) 00:56:47
>>700
しかしビョーン先生はGCをそんなに否定していない。
既存のC/C++のコードと互換性を保ったまま導入できるのなら、
C++に入れてもいいというようなことをD&Eで書いている。
707デフォルトの名無しさん:2006/02/26(日) 20:57:17
>>705
vector使えばええやん。メンバかローカルにしておけばdeleteいらん。
708デフォルトの名無しさん:2006/02/26(日) 21:08:56
>>707
グローバルでもdeleteいらんぞ
709デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/27(月) 07:06:19
>>710
System::Windows::Forms::DialogResult::OK とフルで書く。
712デフォルトの名無しさん:2006/02/27(月) 07:26:28
>>711
最後まで仕様が揺れた所かも知れないね。
713デフォルトの名無しさん:2006/02/27(月) 10:47:00
この状況って System::Windows::Forms まで using で指定しているから、単純にグローバル
スコープ指定していることが問題なんじゃね?
12行目の ::DialogResult を意味なく、:: で始めるな、と
714デフォルトの名無しさん:2006/02/27(月) 11:06:47
>>713
ところがどっこい
DialogResult::OK と書くと今度は
System::Windows::Forms::Form::DialogResultが無いというエラーになる。
using namespace は探しに行ってくれないらしい。
715デフォルトの名無しさん:2006/02/27(月) 11:38:26
ん、サンプルだと :: で始めてるな
っていうか、>710 って名前空間 System しか宣言してないって言ってるが
using namespace System::Windows::Forms が宣言されている環境では
::DialogResult::OK でエラーなくコンパイルできるな

先頭 :: の名前検索ルールって、グローバル指定じゃないんだ・・・
716デフォルトの名無しさん: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になる。それで正しい。
717715:2006/02/27(月) 13:45:08
まず、 >710 の問題は、単に System::Windows::Forms が using 指定していないから
using namespace System::Windows::Form;
を付ければおっけー

>716
::DialogResult ってなっているから、先頭に :: を付ける場合ってグローバル名前空間の
名前空間指定だと思ってた。カレント解決してくれるんだ
718716:2006/02/27(月) 13:55:54
>>717
いや、「正しい」はグローバル参照の方。

> using namespace System::Windows::Form;
> を付ければおっけー

Forms
719715:2006/02/27(月) 18:46:14
ということは、MSの実装はバグかMS独自仕様か、微妙なとこだな
720710: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デフォルトの名無しさん:2006/02/27(月) 20:17:53
>>720
その一
using namespace ...
using namespace ...
namespace hoge {
と順番を変えたら ::DialogResult::OK でコンパイルが通る。

その二
hoge::DialogResult::OK  でコンパイルが通る。
恐らく下のも通るはず。
[hoge::STAThreadAttribute]

その三
namespace hoge { を使わずすべてGlobalに書く

これが仕様なのかバグなのかは俺にもわかんね〜
722デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/27(月) 20:45:59
>>723
C++/CLIの列挙子は列挙型の中のスコープにある。
725デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/02/28(火) 01:38:12
>>727
CLRタイプのenum class と Cタイプのenumの2種類あって、
後者の話ならそのとおり。
729710:2006/02/28(火) 21:38:39
皆さんのおかげで、openFileDialogを動かす事ができたのですが
肝心な事を忘れていました、ファイルを選択してボタンを押しても
実際にファイルが開かないんですよね(;^ω^)
// Insert code to read the stream here.
ってコメントアウトしてある部分が気になるけど、ここに何か
書かないといけないのかな?
730デフォルトの名無しさん:2006/02/28(火) 21:43:05
教えてクンマンセー!
731デフォルトの名無しさん:2006/02/28(火) 21:53:32
コメントが何のために有るのかわかってるのか?
っていうか読めよ。
732710:2006/02/28(火) 21:54:54
>>731
英語読めません(´・ω・`)
733デフォルトの名無しさん:2006/02/28(火) 21:57:00
>>732
んじゃ、英語の勉強から。英語書けないならともかく、読めないんじゃ
プログラミングなんてやってられない。
734デフォルトの名無しさん:2006/02/28(火) 22:35:55
翻訳サイトも使えないようなヤツはプログラミングやめれ
735デフォルトの名無しさん:2006/02/28(火) 22:40:27
ていうか、732は710の偽なんですが
736732:2006/03/01(水) 00:45:52
俺は嘘つきだから俺の言うことは嘘ばっかりさ。さてこの嘘はホントかわかるかねwww
737デフォルトの名無しさん:2006/03/01(水) 01:08:24
そんなおもしろくないよ?
738デフォルトの名無しさん:2006/03/01(水) 01:32:16
>>733
ひまわりが専門なので関係ないでしょ
739710: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デフォルトの名無しさん:2006/03/01(水) 02:32:10
C++/CLI の場合でも .NET Framework のサンプルがほしければ
C#やVBのをそのまま使えるってのに
741710:2006/03/01(水) 02:37:58
|∀・).。oO(・・・)
そうなのか?
742デフォルトの名無しさん:2006/03/01(水) 02:38:23
ガンガレ
743710:2006/03/01(水) 02:43:27
ムリッポ
744デフォルトの名無しさん:2006/03/01(水) 07:19:26
>>740 うむ。
ちょっと間接参照の記述が違うくらいで、
流れは C# のコードのままでいいな。
まぁそれが C++/CLI の真骨頂でもある。
745デフォルトの名無しさん:2006/03/01(水) 14:15:46
>>739
C++/CLIなんだからいちいちgcnewする必要はないと思う。
746デフォルトの名無しさん:2006/03/01(水) 14:50:01
>>739
つかCloseもfinally句に書いてないし。
C#ならusing、C++/CLIならスタックオブジェクトにしろよなほんと。
747デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/01(水) 16:54:58
STLが無い、C++なんて。

クソ。
750デフォルトの名無しさん:2006/03/01(水) 16:57:44
>>749 え?C++/CLI で STL つかえないの?
751デフォルトの名無しさん:2006/03/01(水) 17:06:05
>>750
ネイティブ型に対しては使える。

そしてマネージ型対応のSTL/CLI(旧称STL.Net)がVC++ 2005と同時に公開されるはずだったのだが、
伸びに伸びて未だ公開されていない。

http://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デフォルトの名無しさん:2006/03/01(水) 18:24:32
>>752
いやいやいや、お前DirectXをなんと心得る?
754デフォルトの名無しさん:2006/03/01(水) 19:09:05
>>753 まだ、OpenGL のかわりみたいなもん、
くらいの認識です。頂点データの扱いとか
ぜんぜんちがうんですかね?
その話題はスレ違いですが。

目的は動き回る多数の分子模型の
ようなものなんですが。
755デフォルトの名無しさん:2006/03/01(水) 19:16:26
DirectXはまだネイティブがメインなのにどうしてSTLの無いC++/CLIを無理に使おうとするのか
756デフォルトの名無しさん:2006/03/01(水) 19:28:40
com::ptr 型がそこにあるから
757デフォルトの名無しさん:2006/03/01(水) 19:29:40
OpenGLでもいいし。
758デフォルトの名無しさん:2006/03/01(水) 19:40:32
>>755 いや、それすらまだ知らないんですよ。
普通に次元の可視化するときに、
フォームにぺたぺたとやってえらく簡単に
できたもんで、この勢いで 3D もいける?
とか思ったわけです。

>>757 いわれていれば、そうかも
759デフォルトの名無しさん:2006/03/01(水) 20:01:27
>>758
そのノリでやりたいんなら(ビジネスっていうかグラフ化とかな)、
確かにマネージのAvalonが向いてる。けどもまだない。残念。

DirectXとOpenGLは例えばDirectXはCOMだったりとか細かくは違う。
けど理論はあんまり違わんので好きなほうでどうぞ。
一般的には凝ったことしなければOpenGLのほうが簡単。
760デフォルトの名無しさん:2006/03/01(水) 20:11:40
スレ違いなんだが、VTKとかいろいろあるじゃん?

> フォームにぺたぺたとやってえらく簡単に
> できたもんで、この勢いで 3D もいける?

そんな子どもっぽい理由じゃなくて、(発端じゃなくて直線的な選択の事ね)
道具くらいちゃんと自分で選べるようになろうよ。
http://sal.linet.gr.jp/E/1/index.shtml でも漁れ。多くがWindowsもOK。
OpenGLやDirectXを直接叩くなんて馬鹿らしいよ。
761デフォルトの名無しさん:2006/03/01(水) 20:27:15
>>760 THX

論文に貼る図だと、動画じゃないので普通に
gnuplot で作ってるんですが、プレゼンだと
やっぱ動かなきゃな、ってことで取り組んでます。
色々あるんですね、こりゃ楽しそうだ。
762710:2006/03/01(水) 21:11:31
今晩も盛り下がっていますね皆さん( ノ゚Д゚)こんばんわ
>>744間接参照の仕方を巧く解説してるサイトってない?
>>745newでは困憊羅君が、言うこと聞いてくれませんでした
>>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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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);
}
767748:2006/03/02(木) 04:01:28
盛り上がってるところ済みません。
どなたか >>748 に答えてくださるかた
おられませんでしょうか・・・
768デフォルトの名無しさん:2006/03/02(木) 05:10:09
>>763
解説Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
769デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/02(木) 07:41:26
>>767
シングルウィンドウのアプリケーションならそれでいいと思う。
772デフォルトの名無しさん:2006/03/02(木) 09:47:47
質問させてください。
System::Collections::Generic::ListかSystem::Collections::ArrayListで
要素へのinterior_ptrを得る方法はないでしょうか。
ToArray()はコピーを返すのでだめでした。
773デフォルトの名無しさん:2006/03/02(木) 19:35:49
>>772
ArrayList や List では無理、固定サイズの配列ならいける。
array<int>^ x = { 10, 20, 30, 40, 50 };
interior_ptr<int> r =  &(x[3]);
774デフォルトの名無しさん:2006/03/02(木) 23:43:37
VS2003のC++で書いた
int __pin* px = &pX -> x;
こういう、書き方はVC8では通らないようですね?
775デフォルトの名無しさん:2006/03/02(木) 23:50:15
>>774
cli::pin_ptr<int> px = &pX->x;
776デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/03(金) 20:54:45
おっすオラ悟空
もしかして C++/CLI ってすげぇ戦闘能力じゃねぇか?
スカウターが壊れちまったぜ
781デフォルトの名無しさん:2006/03/03(金) 20:59:36
ゴクウがスカウターつけんなよ
782デフォルトの名無しさん:2006/03/03(金) 21:01:41
じゃ、お前にやる
783デフォルトの名無しさん:2006/03/03(金) 22:11:59
>>781
すげーワラタ
784デフォルトの名無しさん:2006/03/04(土) 00:03:43
STL.Netが待ちきれなくて、System::Collections::Generic::ListのラッパをVectorという名で作ってみようとしたが、難しい。
クラスライブラリ化して他言語からも使えるようにとか考え出したら駄目だこりゃ。
785デフォルトの名無しさん:2006/03/04(土) 05:40:23
CLIだとメンバにref object(ref ptrは可)
おけないからSTL.NETは
ptr_contenaみたいになるよね?
786デフォルトの名無しさん:2006/03/04(土) 09:42:38
何処で聞こうかと迷いましたがここでお願いします
.NET Framework クラス ライブラリで
メール送信するSystem.Net.Mailというクラスがあるのですが
受信するクラスはどれですか?
787デフォルトの名無しさん:2006/03/04(土) 13:39:45
Socket で imap か pop のポートに繋げてプロトコルながしゃいいんでない?
788デフォルトの名無しさん:2006/03/04(土) 13:44:22
追加
ttp://mobiquitous.com/programming/apop-imap.html
ま、ライブラリとかもぐぐりゃ出てくるんだが
789デフォルトの名無しさん:2006/03/04(土) 19:41:13
void func(const std::string & s); ってのは書けるけど
void func(const String ^ s); ってなふうにはかけないのね。
790デフォルトの名無しさん:2006/03/04(土) 20:51:19
ハンドルは追跡ポインタだから const したら追跡できないだろ
791デフォルトの名無しさん:2006/03/04(土) 21:02:23
>>790 ポイント先のオブジェクトを変更したくないよ
ってのを明示したかった。const な String へのハンドル、
って書きたかったんだ。
792デフォルトの名無しさん:2006/03/04(土) 21:07:25
意味はわかるが、const の意味を拡張しない限りできんだろ
const や volatile は GCヒープには使えないと思わないとな
793デフォルトの名無しさん:2006/03/04(土) 21:14:03
う〜む、渡された側で不用意に変更して
しまわないようにしたかったんだけどな。
マネージドなオブジェクトに対しては無理なのか。
794デフォルトの名無しさん:2006/03/04(土) 21:19:51
普通にconst指定出来たが、何をもって書けないと言っているんだ?
795デフォルトの名無しさん:2006/03/04(土) 21:31:41
>>794
「const System::String ^
 この型での const/volatile 修飾子はサポートされていません」

って、コンパイラが優しくおこってくれた。
796デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/04(土) 21:58:02
>>796 いいなぁ。
うちのコンパイラは出るんだ。
なんかスイッチの関係かな。
もうちょっと調べてみるよ。
798デフォルトの名無しさん:2006/03/04(土) 22:02:33
それ、コンパイル警告C4400で、警告レベルは4。
どうやら漏れが警告レベルを一番高くしてるから表示されてるみたいだ。
799MSDN Libraryによると: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デフォルトの名無しさん:2006/03/04(土) 22:04:21
いいなぁって、駄目だろ。const 指定できちゃ(w

String^ hello = "Hello, World";
func(hello);

だとエラーだったりして
801デフォルトの名無しさん:2006/03/04(土) 22:15:41
.NETの共通として通用しないだけで、
C++/CLI上では値を変更しようとするとエラーになるし、
特に問題はないと思うけど。

ちなみに>>800のも通った。
802デフォルトの名無しさん:2006/03/04(土) 23:24:16
>>800
これが通るんだからそれが通らないわけが無いだろ。
void func(const std::string& s);

std::string hello = "Hello, World";
func(hello);
803デフォルトの名無しさん:2006/03/04(土) 23:31:02
まぁそれ以前にあれだ、System::StringはImmutableなオブジェクトだ。
どっちにしろ変更できん…わけでもないけど裏技
804デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/05(日) 17:22:58
>>805ありがとう
出直す前に、スマソ
unsigned longって32bitですよね、多分そのせいだと思うけど
9桁以上入力すると、結果がオーバーフローしちゃってffffffffに
なっちゃいます、予期せぬ結果です
wchar_tが16ビットのせいだと思うのですが、こんなときはどうしたら
いいのでしょうか、教えて君で申し訳ないですが御教授お願いします。
807デフォルトの名無しさん:2006/03/05(日) 17:30:43
>>806
(VC++の)unsigned longは32ビットで0〜0xffffffffの数値を格納できる。
だから十六進法で8桁までだ。wchar_tに非は無い。
たとえばunsigned long longなら64ビットあるから十六進法で倍の16桁までいける。
808デフォルトの名無しさん:2006/03/05(日) 17:44:29
>>806ありがとう
unsigned long

unsigned long longにしてみたら
: warning C4244: '引数' : 'unsigned __int64' から 'unsigned long' への変換です。データが失われる可能性があります。
警告が出てしまい、実行するとやはり9桁でオーバーフローしてしまいました
手のほどこし方はもう無さそうですね、(´・ω・`)
809デフォルトの名無しさん:2006/03/05(日) 17:44:57
UInt32::Parseじゃいかんの?
810デフォルトの名無しさん:2006/03/05(日) 18:16:11
>>808
32ビットしか返さない関数使ってるんだから当たり前だな
811デフォルトの名無しさん:2006/03/05(日) 18:18:02
>808
だから、自分の使っている関数の方とかをチェックしてこいといってるだろうに
受け取り側を unsigned long long にしても、変換関数が対応していなけりゃ駄目だろ
おまいさんは文字列を 64 ビット長の整数値に変換したいんだから、それに対応した
変換関数を探してこい
>809 がいいヒントをくれているじゃないか
.net framework で 64ビット長符号なし整数値の型を探してそのメソッドを調べろよ
812デフォルトの名無しさん:2006/03/05(日) 19:01:42
>>811どうもありがとう
>>806です
ttp://msdn2.microsoft.com/ja-jp/library/system.convert.touint64.aspx
Convert.ToUInt64 (Int32)
これでいいのかな?
813デフォルトの名無しさん:2006/03/05(日) 19:09:18
・・・おまいさん、文字列を UInt64 に変換したいんだろう?
だったら使うべき変換関数は Convert.ToUInt64(String^) じゃないのかい
これなら、いちいち配列変換しなくてもいいわけだし
UInt64::Parse(String^) だってあるだろうに
もちろん、UInt64.ToString() とすれば、文字列への変換もできるぞ

C++/CLI は (3.14).ToString() ってやって文字列を取得することだってできるんだから
814デフォルトの名無しさん:2006/03/05(日) 20:42:17
std::wcstoul を愛しているんだろうから、そっとしておいてやれよ
815デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/05(日) 21:11:47
>>815
Convert::ToUInt64は文字列をUInt64(unsigned long long)に変換するほうだ。
817デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/05(日) 21:28:41
というか、unsigned long long int って型はまだ標準じゃないよな
820デフォルトの名無しさん:2006/03/05(日) 21:31:17
>>819
C++にはまだないが、C++/CLIには存在する。
http://signe.japan.webmatrixhosting.net/ecma372/12_type.aspx
821デフォルトの名無しさん:2006/03/05(日) 21:44:23
>820
それは知ってるが、標準関数が対応してないってこと
ってそこ直リンすんなよ
822デフォルトの名無しさん:2006/03/05(日) 21:46:10
>>821
だからC/C++のunsigned long longが関係するところは全て非標準だな。
823デフォルトの名無しさん:2006/03/05(日) 21:49:23
そだな。非標準の型は全部 CLI 型表記にした方がわかりやすいと思うんだが
変に今までと一緒なもんだから、間違えやすいんじゃないかな
824デフォルトの名無しさん:2006/03/05(日) 22:01:51
それよりも混乱する原因はC、C++、.Net Frameworkのクラス・関数が入り乱れているからのほうが大きいと思う。
答えているほうだって、あれ使え、いやこれ使えって具合だし。

そもそも一旦十六進法の文字列へ変換するまではともかく、その後文字列へ変換する必要性がわからない。
そのままtextBox2->Text = textBox1->Text;でいいと思うのだが。
大文字小文字を揃えたいだけならtextBox1->Text->ToUpper()で十分だし。
825デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/05(日) 22:04:35
>>825
MSDN見ろ。
TryParseは2つ目に結果を格納する引数がある。
827デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/05(日) 22:28:57
>825
勘違いしたんじゃ、ないぞ。MSDNを見るようわざと間違えたんだからな
決して、名前だけで bool 値を返すんだろとか考えて適当に書いた訳じゃ、ないんだからな
829デフォルトの名無しさん:2006/03/05(日) 22:30:52
>>827
MSDN見ろ。1つめの引数の文字列の書式が書いてある。UInt64::Parseは十進法しか受け付けない。
Convert::ToUInt64なら基数が指定できるけど、Try版がないから例外を受けるしかないと思う。
830デフォルトの名無しさん:2006/03/05(日) 22:30:54
スマソ
Try外していました
しかし、TryParseの問題を解決しても
例外エラーは出そうな感じがするんだが
831デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/05(日) 22:40:02
あ、
if ( !String::IsNullOrEmpty() ) →if ( !String::IsNullOrEmpty(textBox1->Text) )
だったorz
833デフォルトの名無しさん:2006/03/05(日) 23:06:15
そもそも、目的はbutton1を押すとtextBox1に入力した
16進数の入力判定を行い、(条件として、空でないこと、16進数16桁であること)
button2を押したら、openFileDialogを呼び出しファイルを選択してOKを押したら
textBox2に選択したファイルを読み込ませ(ここは既に実装できています)
最後にbutton3を押したらtextBox1とtextBox2を結合し、saveFileDialogで
名前を付けて保存するという、単純なものなのですが16進数変換と入力判定の所で
どつぼにはまってしまいました。

文字入力

16進数変換&入力チェック

外部ファイル読み込み

16進数+外部ファイル結合

名前を付けて保存
834デフォルトの名無しさん:2006/03/05(日) 23:24:16
とりあえず判定は829のように例外が投げられるかどうか調べるしかないと思う。
835デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/06(月) 00:28:58
16進で出力すればいいじゃん。
何言ってんだ?
837デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/06(月) 01:19:03
学生さん?
839デフォルトの名無しさん:2006/03/06(月) 04:30:32
>>837
textBox2->Text = Convert::ToUInt64(textBox1->Text, 16).ToString("x");

ちゅうかうざい。
840デフォルトの名無しさん:2006/03/06(月) 07:57:43
ToString が書式指定できることを知らんと言うのもありがちで、MSDNを見れば・・・

だが、Express の配布で C++/CLI を使う初心者がこんな感じに騒いだらこの先恐ろしいな
841デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/06(月) 13:20:15
つ CWinFormsControl
845デフォルトの名無しさん:2006/03/06(月) 13:27:29
Microsoft .NET Framework の Windows フォームを使用したペインティング テクニック
http://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デフォルトの名無しさん:2006/03/06(月) 14:19:42
自分のメソッドの宣言で virtual は書いたけど override 指定していない方に つI
847デフォルトの名無しさん:2006/03/06(月) 14:49:30
汚い文法だなぁ
848デフォルトの名無しさん:2006/03/06(月) 15:17:51
>>864 OnPaintBackground つーのは、規定クラス
System::Windows::Forms で virtual で宣言
されている「はず」だったんですが・・・
んじゃ、OnPaint とかを乗っ取る事はできないのかなぁ。
849デフォルトの名無しさん:2006/03/06(月) 15:28:57
fつべvうぇ45wvw34
850デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/07(火) 20:57:37
>>855
それ別の位置でコンパイルエラー出てるだけじゃないか?
そのコードの中にtempなんて識別子は出てないのだが
857デフォルトの名無しさん:2006/03/07(火) 21:14:41
>856
この人が言ってるの、auto 変数のことじゃない?
メソッド内部で宣言したローカル変数にアクセスしたがってるんだよ
858デフォルトの名無しさん:2006/03/07(火) 21:20:23
>>857 そんなもん、VB でもできんわ・・・
プロシージャとかいってるからたぶん
VB使いかな?とか思った。
859デフォルトの名無しさん:2006/03/07(火) 21:53:50
やっぱり、無理やな
860デフォルトの名無しさん:2006/03/07(火) 21:55:54
>>853 の頭の中には、ローカル変数とグローバル変数しか内のだろうか。
861デフォルトの名無しさん:2006/03/07(火) 21:56:09
プロシージャが WinProc のことなら、Form 間でのアクセスのことかも
何にしても、そんな状態でC++/CLIに手を出すのはやめた方がいいと思う
862デフォルトの名無しさん:2006/03/07(火) 22:24:46
そもそもC++/CLIでなくてもC#でもなんでもやめたほうがいいな。
863デフォルトの名無しさん:2006/03/07(火) 22:51:56
>>862も人生をやめたほうがいいな。
864デフォルトの名無しさん:2006/03/08(水) 02:13:35
C++/CLI がこんなにも複雑なのがいけないと思います!
865デフォルトの名無しさん:2006/03/08(水) 02:40:33
まぁ何でもあり(?)なのが C++/CLI だしなぁ。
複雑さを避けたいなら、C#だよな。
あ、VB.NET って手もあるか。
866デフォルトの名無しさん:2006/03/08(水) 02:58:40
>>865
> まぁ何でもあり(?)なのが C++/CLI だしなぁ。
まさにC++から派生した、って感じだな
867デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/08(水) 08:38:56
その仮とやらの質による。存在しないものと比較しても仕方がない
872デフォルトの名無しさん:2006/03/08(水) 09:48:43
おい!!!!
だれだよ、俺のプロジェクトで勝手に /clr:pure にした奴は!
おかげで全部 __clrcall になっててリンクできずに
一晩悩んだじゃないか!

さて、そろそろ帰るか。
873デフォルトの名無しさん:2006/03/08(水) 19:50:08
>>870
Javaをネイティブ拡張したもの≒C#
874デフォルトの名無しさん:2006/03/08(水) 20:04:29
Java = C++--
C# = Java++ = C++--++
875デフォルトの名無しさん:2006/03/08(水) 21:20:07
>>873
ネイティブじゃナインじゃん
876デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/08(水) 21:36:40
"\r\n"にしないとだめではないか?
880デフォルトの名無しさん:2006/03/08(水) 21:45:08
変だな?
textBox1->Text = arg_1 + "\n" + arg_2;
としたら
コンパイルも通ったんだけど
textBox1に表れた文字が
abc・def
全角文字の・に似た記号が出ます(多分全角の・とは違う気がするが、定かではない)
秀丸に貼り付けると
abc
def
と改行されてるんだが、なぜ?
881デフォルトの名無しさん:2006/03/08(水) 21:47:30
>>880
サンクスできましたが、解説もオナガイシマス
なんで
"\n"では駄目で"\r\n"なの?
882デフォルトの名無しさん:2006/03/08(水) 21:54:42
Windowsの改行コードは"\r\n"だから。
UNIXとかのコンソールプログラムでは\nで
Macは"\r"
883デフォルトの名無しさん:2006/03/08(水) 21:56:39
そしてC/C++は\nを使い、テキストモードでの入出力時には環境固有の改行コードと\nとで変換をしている。
884デフォルトの名無しさん:2006/03/08(水) 21:57:50
ウィンドウズはそういうもん。
Unix : 円 n
Windows : 円 r 円 n
旧 mac : 円 r

コンソールアプリは透過的に 円 n ⇔ 円 r 円 n やってくれるが
テキストボックスとかはやってくれない。
秀丸じゃなくってノートパッドならやっぱりナカテンが出ると思う。
885デフォルトの名無しさん:2006/03/08(水) 21:58:49
みんなでケコーン

OS X は ¥n になったよ ... 関係ないですが。
886デフォルトの名無しさん:2006/03/08(水) 22:01:40
>>882->>885
>>881です
ご丁寧にありがとうございました、よく理解できました
しかし皆さん本当に良く知ってますね
887デフォルトの名無しさん:2006/03/08(水) 22:01:47
>>884
どっちかと言うと円記号よりもバックスラッシュ。
888デフォルトの名無しさん:2006/03/08(水) 22:16:41
完璧な回答を出しているのにスルーされてる>>877がカナシス
889デフォルトの名無しさん:2006/03/08(水) 22:31:06
>>887さん
ありがとう
スマソ、やっぱりC++/CLIならこうですよね
(゚д゚)(。_。)(゚д゚)(。_。) ウンウン
msdnでよく調べます
890デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/09(木) 18:29:48
なんでSaveFileDialog->OpenFileで開いてるのにさらにStreamWriterで開き直す?
すでに開いているストリームに対してStreamWriterを使うのならStream^を渡す。
892デフォルトの名無しさん:2006/03/09(木) 18:50:37
最近よう、気のせいか初心者歓迎スレに変わってきてないか?
なんか、聞けばいいと思っている輩が増えてきた気がするんだが
893デフォルトの名無しさん:2006/03/09(木) 18:53:25
>>891
SaveFileDialog->OpenFileに書き込むには
どうしたらいいですか?
894デフォルトの名無しさん:2006/03/09(木) 19:15:18
System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter(myStream);

初心者はC#かVBからはじめるのがいいよ。MSDNの見方くらい覚えような。
895デフォルトの名無しさん:2006/03/09(木) 20:52:02
>>894
ありがd
896デフォルトの名無しさん:2006/03/10(金) 01:26:35
C++/CLI みたいなマニアな言語を使おうとする奴が
なぜこんなところで教えてくんしてるのか判らん。
(マニア、というのは、それでないと書けないほどのアプリを
書かないといけないはめになっていないと使わないだろう、
ぐらいの意味。)
MSDN 読めるぐらいでないと C++/CLI 手を出さないと思うんだが、
どうなってんだろう?
897デフォルトの名無しさん:2006/03/10(金) 03:18:05
しらんがな。
898デフォルトの名無しさん:2006/03/10(金) 08:44:22
>>896
少しはC++をやっていて、新しい言語に手を付けずに.Netが使えるぞと思っているんだよ、きっと。
実際はC++とC++/CLIとは別物だということを知らず。
899デフォルトの名無しさん:2006/03/10(金) 09:08:02
つーか、自然な流れだと思うぞ。

一般的にC++が普及してた。
ライブラリはMFCやらWin32APIやらATLを使ってたであろう。
そして、MSの次期スタンダードなライブラリが、.NETになった。
じゃあ、C++から.NETを使おうか。

こんな感じでしょ。
間違いだとも思わない。
900デフォルトの名無しさん:2006/03/10(金) 09:11:06
ええっと、言語間の違いよりも、
ライブラリ間の違いのほうが余程大きいと思うんですが...
901デフォルトの名無しさん:2006/03/10(金) 09:18:01
一般的に旧VBが普及してた。
PC以外で死滅気味だった言語が台頭。サーバーサイドJavaや組み込みC++。
サーバーサイドや組み込みに足を踏み入れるドトネトとC丼を強制。
ブビ厨氏滅&ドトネト氏産。
オネガイC++からドトネト使ってトンでも言語mc++ → C++/STL.CLI
902デフォルトの名無しさん:2006/03/10(金) 09:22:57
>>901
日本語でおk
903デフォルトの名無しさん:2006/03/10(金) 09:44:39
899=線能されてる

C++の文法複雑+マネージドの理解+旧COMの理解を要するなんてサイアクじゃん。
で、C++のBoostなんかは使えないという利点が無いオマケ月。
904デフォルトの名無しさん:2006/03/10(金) 09:51:19
>>903 ネイティブな領域では普通に Boost 使えてるけど?
たとえば Boost.Serialization で既存のデータを読み込んで、
Windows Forms で表示したり ADO.NET で DB に投入したりできる。
905デフォルトの名無しさん:2006/03/10(金) 09:54:30
>>904
書いてて自分の文章の複雑さに気付かない?
906デフォルトの名無しさん:2006/03/10(金) 09:56:50
http://pc8.2ch.net/test/read.cgi/tech/1139313234/115
こういうこともあるみたいだけど。
907デフォルトの名無しさん:2006/03/10(金) 10:01:59
>>904 ネイティブな領域では普通に Boost 使えてるけど?

なんだ、丸々大ウソか。
さすが線能されてるだけある。

M$もCOMでC++を汚しきったが、mc++で文法破壊、CLIでライブラリ破壊だね。
908904≠899:2006/03/10(金) 10:16:42
>>906 それ書いたの俺。で、そのオチが >>872
909デフォルトの名無しさん:2006/03/10(金) 10:20:06
>>908
>だれだよ、俺のプロジェクトで勝手に /clr:pure にした奴は!

PUREでない混合だと激遅になるドトネトに何の意味があるのかと小一時間。
910904≠899:2006/03/10(金) 10:24:15
>>909 pure でやるなら、既存のライブラリの多くを
あきらめるってことなので、俺なら C# を選択する。
911デフォルトの名無しさん:2006/03/10(金) 10:28:38
>あきらめるってことなので、俺なら C# を選択する。

ソースコードの価値ってのは既存コードだったり、
環境変わってもコンパイルしたりすると動くことだったりするのに、
馬の骨C丼に何の価値があるのかと。
912デフォルトの名無しさん: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´ '"´ /::::/-‐  \   移植や修正が必要だとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの 片鱗を味わったぜ…
913904≠899:2006/03/10(金) 10:31:16
>>911 だから今俺は C++/CLI 使ってるんだってば。
914デフォルトの名無しさん:2006/03/10(金) 10:37:16
>>913
で、C++/CLI複雑じゃない?それだけ価値あるということ?
915904≠899:2006/03/10(金) 10:38:48
>>914 使わざるを得ない場面があるということ。
あと、マゾにはたまらないって言うこと。
916デフォルトの名無しさん:2006/03/10(金) 11:13:29
自分で判断できないような人はC#やっといた方がいい。
C++/CLIは必要があって使うもの。
917デフォルトの名無しさん:2006/03/10(金) 11:29:40
既存のライブラリの多くを諦める事になるからC♯って意味分からん。
C♯だったら、多くを諦めるどころか、全部諦めにゃならんだろw
ヤケクソやってんのか?w
918904≠899:2006/03/10(金) 11:45:23
>917 そんなこといってないじゃん。
既存のライブラリを使いたいから /clr:pure あきらめて
C++/CLI つかってます、って書いてんのに。
919デフォルトの名無しさん:2006/03/10(金) 11:56:18
ヒント;M$ジレンマ
920デフォルトの名無しさん:2006/03/10(金) 13:48:25
>>918
君は正しい。ただあんまり一生懸命レスすること無い。疲れるだけだから。
921デフォルトの名無しさん:2006/03/10(金) 19:38:26
昔:VB-VC-Windwos
今:.NET Framework-C++/CLI-Windows

922デフォルトの名無しさん:2006/03/10(金) 20:36:09
伸びてると思ったら不毛な議論が続いてたようだな。
アンチが何したいのかわからんがこんなところで騒いでも無駄ですよ
923デフォルトの名無しさん:2006/03/11(土) 09:58:42
皆さんはやっぱり、C++/CLIでもファイルの入出力とか自作のライブラリー等
作成されてるのですか?Stream オブジェクトとか、MSDN見る限り、素人目には
既に完成されていると思うのですが、個人的にパラメータを渡して読み込み、書き込み
モードで開いたりとかテキストモードで開いたり、バイナリモードで開いたりとか、やったほうがもっと楽でミスも少なくて、いいのかなぁーと思ったりするのですが、
いかがなものでしょう?
924デフォルトの名無しさん:2006/03/11(土) 10:07:31
逆に聞くが>>923は今まで入出力に自作のライブラリを使っていたのか?
925デフォルトの名無しさん:2006/03/11(土) 10:10:33
>>923 C++/CLI でも、っていうか、マネージドの領域では
.NET Framework べったりのプログラミングしてます。

C++/CLI 使うメリットはネイティブとの橋渡しができる
ことだと思ってるんで、ネイティブの領域では
従来通りの自作のライブラリーを多用しています。
926デフォルトの名無しさん:2006/03/11(土) 10:36:50
>>923
何言っているんだかわからん。
Streamのどこが気に入らなくて、どういうことをやっているわけ?
927デフォルトの名無しさん:2006/03/11(土) 10:47:06
>>926 抽象化されていないもっとファイルシステムべったりの
いじり方をしたいのでは、と推測するけど、まぁそういうことが
したけりゃ Windows API 叩くのも C の標準ライブラリ
叩くのも低レベルファイルアクセス関数群叩くのも
C++ の標準 I/O ストリーム使うのも自由、としか言いようがないな。
928デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/11(土) 21:03:49
これはひどい
930デフォルトの名無しさん:2006/03/11(土) 21:04:01
> textBox1->Text = arg + "\r\n"; 
931デフォルトの名無しさん:2006/03/11(土) 21:05:39
>>928 そりゃ、Text に最後に設定されるのが
"9\r\n" だからだろ。
arg = じゃなくて arg += とかじゃないの?
と、試しもせずにカキコ
932デフォルトの名無しさん:2006/03/11(土) 21:09:22
>>931
で、そのargはどこに行くんだ
933928:2006/03/11(土) 21:17:24
>>930さん
>>931さん
残念ですが巧くいきません、同じ結果です
934デフォルトの名無しさん:2006/03/11(土) 21:27:42
textBox1->Add(arg);
935デフォルトの名無しさん: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();
936928:2006/03/11(土) 21:58:21
>>935さん
ありがと、巧くいきました
StringBuilderクラス初めて知りました
builder->AppendFormat("{1}{0}",System::Environment::NewLine,i.ToString());
の"{1}{0}"は何を意味するものですか?
937デフォルトの名無しさん:2006/03/11(土) 22:15:05
>>936
引数の2番目({1})と1番目({0})

.NETでは基礎的なこと。
938デフォルトの名無しさん:2006/03/11(土) 22:21:51
うんざりするほどの教えてクンだな
939デフォルトの名無しさん:2006/03/11(土) 22:28:44
理解していない {1}{0} を教えてもらった通り
使っただけで「うまくいきました」と言える神経が理解出来ない
940デフォルトの名無しさん:2006/03/11(土) 23:07:57
正直、C# に移って .net framework の使い方から勉強してきてほしいものだ
.net framework 総合ってあったよな
941デフォルトの名無しさん:2006/03/11(土) 23:23:19
enum classのインスタンスを
switchの条件式に使うとunsafeにならない?
Reflectorでみたらunsafeになってたんだけど...orz
942デフォルトの名無しさん:2006/03/12(日) 00:01:20
しかし、海外ではC#なんて朽ち果ててるのに、ここは鎖国な人ばかりですか?
943デフォルトの名無しさん:2006/03/12(日) 00:03:12
>>942
じゃ、その海外では何を使ってるの?
あちこちでその書き込み見るんで、
マジで教えて欲しいんだが。

それにここ C++/CLI のスレッドだし。
944デフォルトの名無しさん:2006/03/12(日) 01:06:44
北米でのサンデープログラマはJavaよりもC#が多いってニュースみたことあるけど
945943:2006/03/12(日) 01:14:43
ちなみに、クライアントサイドでのJavaの案件なんて
ほとんど見たこと無い。
946デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/12(日) 01:36:31
gcroot
auto_gcroot
948デフォルトの名無しさん:2006/03/12(日) 02:08:28
>>943

VB。つーか、こんな簡単な事もわからないヤツがいるのか。
日本人同士で馴れ合ってるから、バカになるんだよ。
949デフォルトの名無しさん:2006/03/12(日) 02:38:05
>>948
明らかにどっちもやったことない苦し紛れ臭漂うコメントだな。
950デフォルトの名無しさん:2006/03/12(日) 03:25:39
>>949
いや、ぜんぜん。

つーか、やったことがある・ないって話はしてない。ばかだね。あんた。
951デフォルトの名無しさん:2006/03/12(日) 03:38:45
>>950
ないのならいかに自分が馬鹿な話をしてるかわからんのも仕方ない。
952デフォルトの名無しさん:2006/03/12(日) 03:45:21
>>951
もうチョイ日本語、勉強しましょうねー。
953952:2006/03/12(日) 04:05:27
アンカミス

×>>951
>>952
954デフォルトの名無しさん:2006/03/12(日) 04:05:29
>946
そのためのファイナライザと割り切るしかないんでない
心配なら、管理クラスを別途作って、そこからポインタを受け取ってもいいんだし
955デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/12(日) 04:13:58
コード見直せ 明らかにおかしいだろ
957デフォルトの名無しさん:2006/03/12(日) 04:15:06
StreamWriterをCloseするときにStreamも一緒にCloseしてるからじゃね。
958デフォルトの名無しさん:2006/03/12(日) 04:16:39
C(++) もやったことないのに C++/CLI に手を出すのは無謀
959デフォルトの名無しさん:2006/03/12(日) 04:17:16
コンパイラさんが myStream が初期化されてないよって警告出さんのか
960デフォルトの名無しさん:2006/03/12(日) 04:24:17
指摘されて今気づきました
Stream^ myStream ;

myStream->Close();
を、おまじないみたいに勘違いしてたようです
961デフォルトの名無しさん:2006/03/12(日) 04:30:55
おまじないとな
962デフォルトの名無しさん:2006/03/12(日) 05:24:46
次スレのテンプレにあれだ、初心者お断りとでも書いとけ。

    ___________________
   |
   |★ 初心者に扱える言語ではありません ★
   |
   | ・初心者はまず C/C++ か C# をしましょう。
   | ・両方とも中級者以上になったら来てください。
   |
   Λ Λ  /
  (,,゚Д゚)⊃ チュウイ!
〜/U /
 U U  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
963デフォルトの名無しさん:2006/03/12(日) 05:42:05
C#はやらんでもええ。
964デフォルトの名無しさん:2006/03/12(日) 06:05:50
>>963
いや、このスレにずっといて必要だと思ったから書いたのだけど?
CLRの基本的なことも分かってないようなやつは危ない。
C#では仕様的に避けられてたり、ふらっとスレでも聞かないような
レベルの質問ばかりじゃん。

んで一番速く理解できるのはC#だし、C++と文法似てるし。
965デフォルトの名無しさん:2006/03/12(日) 08:36:56
というか、移行組にとって辛いのは、.net framework の使い方がわからないというところじゃね?
だから、C++ はわかるけど、それを CLI の流儀でどう書けばいいのかわからなくて、初心者スレ
で聞くような質問をここでしてしまう、と

最近紹介されて知名度が上がってきた分、飛びついてくる奴らがなんかくらくらするような
質問をしてしまうわけで、.net スレへ誘導というのも、言語の垣根を越えた C++/CLI の可能性を
示すという点でいいのかも
966デフォルトの名無しさん:2006/03/12(日) 08:45:29
C++/CLI は C++ しか知らない人がマネージドなプログラムを
書くための言語ではなくて、C++ で仕事してきて、かつ、
C# などで .NET Framework 上で動くプログラムも作ってきて、
両方の資産とノウハウを抱えている人がそれらの分断に悩んで
たどり着くソリューションだと思う。
967デフォルトの名無しさん:2006/03/12(日) 08:52:04
>966
それは漏れもそう思うんだけど、実際にはあの顔文字使う教えてクンみたいなやしが
あれだけ言われても MSDN もチェックせずに気軽に尋ねにきていやがるこのスレの現状を
考えると、あるべき論ではなぁ
スレのふいんきをもっと殺伐させて、気軽に質問できないようにした方がいいかもな
後は、答えるときは罵倒しながら、丁寧に答えるとか

>980 スレ立てよろ

てんぷれ作る?
968デフォルトの名無しさん:2006/03/12(日) 09:51:53
とりあえず教えて君はレベルに関係なくスルーすればいいんじゃないのかな?
排除を全面に出しすぎるのも大人げないというか。

managed C++ → C++/CLI
http://www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp#transguide_topic
[特集] Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
Calling Native Functions from Managed Code
http://msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx

C++/Cli Essentials
http://www.amazon.com/exec/obidos/tg/detail/-/0321174054/
Shared Source Cli Essentials
http://www.amazon.co.jp/exec/obidos/ASIN/059600351X

C++/CLI設計者のblog
http://blogs.msdn.com/hsutter/
http://blogs.msdn.com/slippman/

STL.NET
http://www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp
http://www.dinkumware.com/

C++の今後
http://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デフォルトの名無しさん:2006/03/12(日) 11:21:35
工作員がスゲー。再度言う。C#はやる必要なし。
973デフォルトの名無しさん:2006/03/12(日) 11:30:48
>>972 やってもいいじゃん。
974デフォルトの名無しさん:2006/03/12(日) 11:34:39
はじめからC++/CLIで.NETをはじめたいというのがいても悪くは無いが、
そういう需要があれば、ふらっとC++/CLIとかぐすたれC++/CLIとか別のスレ立てたいね。
975デフォルトの名無しさん:2006/03/12(日) 11:46:42
>>974
。゚+.(・∀・)゚+.゚イイ!!
行き場が無くて、彷徨っています。
スレ立てオナガイシマス
976デフォルトの名無しさん:2006/03/12(日) 12:06:17
>>972
何で工作員?C/C++、C#両方使える上で最適だと思える判断をして書いて
いるんだけど?
C++を分かっていて、C#分かってれば実際問題仕様書読めばかけるから。

どう考えても最短距離だし、C++/CLIはC++のスタンス上危険なコードも
許容するからそれが危険であるとも分からないし、特殊な仕様が結構ある。

しかも、はっきりいって質問のレベルがふらっとC#スレにも劣ってるから。
他言語ならまだ入門書を読め、といえばすむがC++/CLIにそんなものあるの?

C#初心者よりレベルが低い状態で、情報も少ないのに、C#より考えることが
大量にあって複雑なC++/CLIが何とかなるとお思いで?
977デフォルトの名無しさん:2006/03/12(日) 12:51:20
C++/CLIをやるには.NETの知識が必用だが、
その知識を得るための情報はC#を対象に書かれていることが多い。
つまり必然的にC#の知識が必用になる。
978デフォルトの名無しさん:2006/03/12(日) 13:02:42
C++/CLIは合の子だから、
C++とCLIのそれぞれの特徴を知る必要がある。
C#はCLIへの近道だと思う。まあC#使う必要はないが。
979デフォルトの名無しさん:2006/03/12(日) 13:17:30
けどC++ができるのであればC#は大したことは無いと思う。
980デフォルトの名無しさん:2006/03/12(日) 14:13:45
いや、だから言語仕様が大したことかとかいってるんじゃなくて、
CLI の流儀、.net framework の流儀をつかむために
いちど純 .net のをやっておいたほうがいいんではということでしょ。
981デフォルトの名無しさん:2006/03/12(日) 14:22:30
やっぱり、単に日本だけで馴れ合ってるだけじゃん。
C++/CLIの資料が少ないから、C#で代用しろ?

現実的だが、人に勧めるような話じゃないことに気がつけよ。
C#なぞという無用な知識を入れる必要は無し。

C++/CLIの資料はあるだろ? managedの時代なら C# が参考になるが…、C++/CLIになっても必要なのか?
982デフォルトの名無しさん:2006/03/12(日) 14:38:16
>>981
もうチョイ日本語、勉強しましょうねー。
983デフォルトの名無しさん:2006/03/12(日) 14:52:35
一度もアセンブラを使ったことがない人に
ポインタの具体的なイメージを持ってもらうのは困難。

同じように一度も C# や VB.NET のような
.NET Framework を想定した元を使ったことの無い人に
マネージドなプログラミングについてのイメージを持ってもらうのは困難。
984デフォルトの名無しさん:2006/03/12(日) 15:02:29
C#をというより、クラスライブラリの使い方レベルの質問は受け付けたくないというの話さ。
次スレと、それとは別に初心者用スレを立ててくるよ。それでいいだろう?
985デフォルトの名無しさん:2006/03/12(日) 15:25:25
くだらねー。そんなことで C# を薦めるな。
986デフォルトの名無しさん:2006/03/12(日) 15:27:48
とりあえず初心者スレを立ててきた。

くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l50

連続でスレ立てができなようだから、次スレはもう少し待って。
987デフォルトの名無しさん:2006/03/12(日) 15:28:21
>>985
じゃ、おまいさんは何をすすめるお?
J# ? プギャー(AA略
988986:2006/03/12(日) 15:50:33
連続規制でスレが建てられないのでだれか次の内容で頼みます。
2 に >>968 の内容もアップしてあげてください。
---
C++/CLI について語ろうぜ  Part2

おそらく、.NET開発でデファクトスタンダードに最も近い 
であろうC++/CLIについて語ろうぜ! 

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に
お願いします。

前スレッドはこちら 
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l50

姉妹スレ
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l50
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l50
989デフォルトの名無しさん:2006/03/12(日) 16:06:36
>>988
Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
d(゚Д゚ )☆スペシャルサンクス☆( ゚Д゚)b
♪♪♪ d(`Д´)b♪♪♪サンキュ
990デフォルトの名無しさん:2006/03/12(日) 16:08:02
>>988
立ててみるわ。
991990:2006/03/12(日) 16:09:29
992990:2006/03/12(日) 16:10:53
>>968もコピペしといた。
不足分はよろしく。
993デフォルトの名無しさん:2006/03/12(日) 16:43:41
>>987
そうやって、脳内で勝手に盛り上がって楽しいか? なんか変な薬でも飲んでるのか? 

飲んでるなら止めなさい。
飲んでないなら医者に行って飲みなさい。
994デフォルトの名無しさん:2006/03/12(日) 17:53:31
>>987
J# 使う奴は氏ね
995デフォルトの名無しさん:2006/03/12(日) 17:54:41
J#使ったことない俺にだって、J#の中傷ぐらい非難されずに可能なのだ
996デフォルトの名無しさん:2006/03/12(日) 18:21:29
ヒント:擁護する人がいない
997デフォルトの名無しさん:2006/03/12(日) 18:32:44
誰も使っていない言語を意地で維持する必用は無いと思うんだがな。
金と時間の無駄。
998デフォルトの名無しさん:2006/03/12(日) 18:37:23
j#は 1.1.x 互換じゃ使いようもないし、System系の名前空間のクラスを使うともうJavaには見えないね。

他に敵を作って内紛のタゲそらしをするのは常套手段だな。まるで中共政府のようだ
999デフォルトの名無しさん:2006/03/12(日) 18:38:42
1000get
1000デフォルトの名無しさん:2006/03/12(日) 18:39:03
ぬるぽ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。