[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 17:12 / Filesize : 240 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ]
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!

601 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 21:00:01 ]
2003のWin32APIやMFCを2005ExpressEditionで使おうと
頑張ってみたが無理だった。
Win32APIはコンパイル通るけど警告出るし、
MFCに関しては全くお手上げ。


602 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 22:31:04 ]
>>601
WinAPIは2003から持ってこなくても最新のPlatform SDKを入れればいいだろうに。

603 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:14:27 ]
C++/CLIはVB.NETで作ったクラスライブラリを呼び出すことも可能?

604 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:33:15 ]


605 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 23:51:30 ]
>>602
最新のSDK持ってきたら、警告なくなったよ。ありがと。

606 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 08:02:58 ]
managed C++ みたいに C++/CLI もやっぱやーめたなんてことにはならんだろうな?
前者はなんか標準化団体には出されてたんだっけ?後者はだされてたよな?

607 名前:デフォルトの名無しさん [2006/02/13(月) 08:05:18 ]
>>605
感謝は言葉ではなく物で示せ。

608 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 12:44:28 ]
>606
今、ISO で標準化の審査中

609 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 13:03:53 ]
>>608 それは C++/CLI だよね?
もう Managed C++ はいらんでそ。



610 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 14:01:33 ]
(1)for each( int obj in v)
(2)for each( int^ itr in v)
(3)for each( int% r in v)

for each する場合、どれがお勧め?

611 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 15:26:41 ]
>>609
www.ecma-international.org/publications/standards/Ecma-372.htm
これがISOに提出された。まあISOになる可能性はないと思うけれど。

612 名前:デフォルトの名無しさん mailto:sag [2006/02/13(月) 16:55:39 ]
>>611 あれ?ないの?

613 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 17:22:33 ]
CLI 自体はすでに ISO 標準になってるんだよな。
Java VM も ISO 標準にすればいいのに。
Java 言語とは切り離して。

614 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:06:42 ]
で、ISO 標準て何の役に立つの?

615 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:07:31 ]
ネームバリュー

616 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:10:32 ]
実質を無視したネームバリューなら、
Java >>>>>>(壁)>>>>>> C丼(I$O)
だね。

617 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 18:13:08 ]
>>616 実質的なネームバリューだと思うけど。

618 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 21:22:11 ]
>>616
Java のネームバリューってかなり実質的なものだと思うぞ。


619 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 23:26:25 ]
>>613
EMCAの時に、J2EEも同時に採用されることにこだわった。
当時は、IBMその他ベンダーが独自ビジネス向けフレームワークの覇権を争っていた。

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

C#やCLIもそんなことにならないかと心配。



620 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 04:09:12 ]
>>618
確かにJavaはネームバリューだけだな

621 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 09:09:07 ]
ドトネッツは実質NO.1










(ベーパーウェア部門)

622 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 13:57:47 ]
>610
vの中身を書き換えたいときは、必然的に(3)
(1)と(2)でコンパイル結果に差が出るかは知らんが、同じなら(2)の方が他の参照型などと統一性が採れると思う

623 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 22:40:58 ]
int^ だとボックス化のコストが高くない?

624 名前:610 mailto:sage [2006/02/15(水) 09:08:44 ]
>>622,623
値型の場合、(1)が無難な気がしてきた。(2)はテンポラリGCポインタなのか...(3)はなんか怪しい...
参照型の場合、(2)しか選択もうない気が、第4の選択肢は危険ぽいし...


ref struct Test{
Test(){}int x;Test(int in_x) :x(in_x){}
static void test(){
System::Collections::Generic::List<int> v;v.Add(1);v.Add(2);v.Add(3); //case1
//cli::array<int>^ v = {1,2,3}; //case2
#define SHOW for each(int i in v){Console::WriteLine(i);}
for each(int i in v){i *= 2;}SHOW;//result->{1,2,3}
for each(int^ p in v){(*p) *= 2;}SHOW;//result->{1,2,3}
//for each(int^% p in v){(*p) *= 2;}SHOW;//danger
for each(int% r in v){r *= 2;}SHOW; //case1->{1,2,3},case2->{2,4,6} -> unsafe code
}
static void test2(){
System::Collections::Generic::List<Test^> v;v.Add(%Test(1));v.Add(%Test(2));v.Add(%Test(3));
//cli::array<Test^>^ v ={ %Test(1),%Test(2),%Test(3) };
#define SHOW2 for each(Test^ t in v){Console::WriteLine(t->x);}
for each(Test^ p in v){(*p).x *= 2;}SHOW2;//result->{2,4,6}
for each(Test^% r in v){(*r).x *= 2;}SHOW2;//result->{4,8,12},case2->{2,4,6} -> unsafe code
}
};

625 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 12:54:23 ]
>624
何を悩んでいるのかよくわからん
列挙する型に合わせれば良いんじゃないか?
適材適所だろ

626 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 16:25:30 ]
^うざ

627 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 19:45:53 ]
よーく見ると、顔に見えてくる。

628 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 14:49:04 ]
VS 2005 C++だす
× String str = "Hello";
○ String ^str = "Hello";
いちち^付けないといけないみたいですね、
^ってどういう意味デツカ

629 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:09:39 ]
>>628
C++/CLIに於けるポインタ



630 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:17:47 ]
そっか、それで
*を^に変えろって困憊羅が言ってるの、見たような希ガスル
しかしなぁー、なぜ換える必要があるのかと、悩む事小10分
*アスタリスクはなんか他の用途でつかってるのかなぁ??

631 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:30:01 ]
こう覚えた方が早い
* を使っているのは C++
^ を使っているのは CLI 拡張

632 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 15:44:42 ]
>>630
*のポインタ型同士はポインタ演算があるから演算子多重定義ができない。
^の追跡ハンドルならそのようなことがないから演算子多重定義ができる。

633 名前:628 mailto:sage [2006/02/18(土) 16:29:22 ]
>>631
>>632サンクスです
GUIが使えるWin32でアプリケーションを作りたくて、NETや本を読んで
今学習しているところなんです、Visual Studio 2005 C++の
Win32コンソールアプリケーションを開いてボタンを押したら、
テキストボックスにメッセージを表示させたりとかして
動かしているのですけど訳も分からずに、CLIを使っていたんですね(;^ω^)
VS2005C++な環境でネイテイブなC++でコンソールアプリケーションは
作れないのでしょうか?MFCも挑戦しようと思いましたが、又別物のようですし
初心者的にはどの方向で進んだら良いでしょう、小一週間悶々としています

634 名前:628 mailto:sage [2006/02/18(土) 16:32:13 ]
スマソ
× GUIが使えるWin32でアプリケーションを作りたくて
○ GUIで動作するWindowsアプリケーションを作りたくて

635 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:45:58 ]
初心者ならC#へ行ってみてはどうかと惑わしてみる。
VS2005C++使った事無いけど、アンマネージド(ネイティブ)は作れるはずだ。

636 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:55:38 ]
2005は普通に「Win32コンソールアプリケーション」でネイティブを作れるはずだが…
Expressだと違うのか?

637 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:01:58 ]
>628
GUI でモノを作りたければ、素直に MFC に進んだ方がいいと思われ
C++/CLI はちと初心者にはお勧めできない。普通の方法では満足できなくなった玄人向け
だから
あとは、635 の進めるとおり、C# でモノを作ってみて満足できなくなったら、またこちらに
出戻ってくると言うのもいい

638 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:15:12 ]
>>633
コンソールアプリケーションとテキストボックスのつながりがわからん

639 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 17:36:48 ]
すんません、又間違えていました
CLRからWindowsフォームアプリケーション作成でした



640 名前:デフォルトの名無しさん [2006/02/18(土) 21:12:37 ]
他スレから誘導されてきました。

C++/CLIを使っているんですが、
自分のクラスライブラリのシングルトンのクラスにあるSystem::Drawing::Size型のプロパティを変更しようとしたら
p->Size = System::Drawing::Size(64, 64);
と設定はできるのですが、
p->Size.Width = 64;
のように個別に設定しようとしたら必ず0になってしまいます。

どうすれば個別に設定できるようになりますか。

641 名前:640 mailto:sage [2006/02/18(土) 21:26:55 ]
投稿して気付いたのですが、Sizeの部分をハンドルにしたら設定出来るようになりました。
何故かがわからないですが・・・。

スレ汚しすいませんでした。

642 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 21:48:34 ]
>>641
System.Drawing.Sizeは型値だから扱いが面倒だのう。

643 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 06:34:22 ]
>>633
スレ違い
pc8.2ch.net/test/read.cgi/tech/1131590396/

644 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 14:36:44 ]
>>641
というかそれはあまりよろしくない。たぶん。

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

としなさい(こういうCLRの常識みたいなのもいるから
また複雑なんだよな>C++/CLI)。


645 名前:644 mailto:sage [2006/02/19(日) 14:43:34 ]
にゃー、コード間違いすぎ

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

こう。

646 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 15:20:04 ]
そんなんわからん奴はC#やJavaも微妙だろ。

647 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 15:28:54 ]
>>646
…まぁな。実体の追跡もできないレベルだし。
C#はまだ動かないだけで安全だけど、こういうやつには特にC++は使わせたくない。
メモリ関係のバグ大量コードを書く。しかもそういう場合デバッグビルドだと動いたり
することもあるから性質が悪い…。

648 名前:デフォルトの名無しさん [2006/02/19(日) 20:48:42 ]
Visual C++ 2005 Express Edition の環境で、はまってしまい、皆さんのお知恵を拝借したいです。

Webのダウンロードなのですが、
方法1
  WebClient^ wc = gcnew WebClient();
  Stream^ st = wc->OpenRead("www.yahoo.co.jp/");
  Encoding^ enc = Encoding::GetEncoding("euc-jp");
  StreamReader^ sr = gcnew StreamReader(st, enc);
  String^ out = sr->ReadToEnd();
  Debug::WriteLine(out);
これはうまくいきWebデータの取得ができます。

方法2
WebClient^ wc = gcnew WebClient();
Byte ^ myDataBuffer = wc->DownloadData("www.google.co.jp/");
Encoding^ enc = Encoding::GetEncoding("euc-jp");
String^ out = enc->GetString(data);
このコードだとコンパイルエラーです。
エラーメッセージは、
.\MainForm.cpp(50) : error C2440: '初期化中' : 'cli::array<Type,dimension> ^' から 'System::Byte ^' に変換できません。
    with
    [
      Type=unsigned char,
      dimension=1
    ]
    この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。

とあります。
バイト配列に入れたいだけなのに。

649 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:05:11 ]
>>648
WebClient::DownloadData()の戻り値の型はcli::array<unsigned char>^。
Encoding::GetString()の引数もcli::array<unsigned char>^。



650 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:12:35 ]
^ ←なんかコレうざい。よくわからないけど腹立たしい。


651 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:18:36 ]
(^^:

652 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 21:20:18 ]
^<T>^

653 名前:648 [2006/02/19(日) 21:44:16 ]
>>649
Byte を cli::array<Byte> にしたところ、できました。

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

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

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

どうもありがとうございました。


654 名前:Pascal mailto:sage [2006/02/19(日) 23:09:23 ]
>>650
呼んだ?

655 名前:デフォルトの名無しさん [2006/02/20(月) 00:22:49 ]
>>650
あなたの心が汚れてるからですよ(^^;;;

656 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 00:30:26 ]
そんなばかな^^;

657 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 01:26:15 ]
>>650-652
ヤベ、ツボにはまったw

658 名前:デフォルトの名無しさん [2006/02/21(火) 10:07:18 ]
>>422-423
>ダイレクトに C++ を知らずに、C++/CLI に手を出すのは、止めた方がいいだろ
>さっさとC#かVBで始めたほうがいいと思う。

とりあえずC#で始めようと思った矢先、C++/CLI とかいうのが目に入って、
「ファイナライザいいな」とか思ってしまったんですが、
やっぱりC#から始めることにします。

>>424
関数単位ですか。
つまり、関数呼び出しを共通化することで様々な実行環境にあるコードを一つのプログラムにまとめることができたと言うことでしょうかね。


659 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 11:10:22 ]
>>658
ああ、C#にしたのか。まぁそうしとけ。C++/CLIはネイティブの知識(C++)とCLRの
知識(C#)が両方要求されるひどい言語だ。最低限どっちかぐらい自由に使える
ようになってからおいで。…両方自由に使えるぐらいじゃないと使える言語でも
ないかもしれないが。

ファイナライザ?C#にもあるぞ。というかCLR用語だそれ。
まぁDisposeがスタックオブジェクトのように書けることをいいたかったんだろうけど。
川俣とかが取り上げているほど、たいしたものじゃない。あの人は大げさに書く文体
が売りだからな。いい悪いは別にして。



660 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:17:52 ]
通のお勧めは関数のオーバーライド
ディスポーズ・パターンの変形に目が眩んでちゃ、まだまだ

661 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:25:46 ]
>>660 ポリモにならんじゃん

662 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 21:32:20 ]
>>658
~hogeか!hogeが使われている場合に下のようなコードを自動生成してくれる。
GC.SuppressFinalize(this)がむき出しにならないだけスマートだね。VB.NETにもほしい機能だと思う。
void Dispose(bool disposing) { if (disposing) ~hoge(); else !hoge() }
void Dispose() { Dispose(true); GC::SuppressFinalize(this); };
void Finalize() { Dispose(false); }
deleteしたり { ClassA a(); ...; } でスコープから離れた場合は
Dispose()が呼び出されるだけでその場でGCされるわけではない。

663 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 00:50:01 ]
!hogeなんてあったんだ

664 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 07:21:27 ]
>>662
いや、えーと、このスレにいる以上知っている。
ildasmでも確認したしな。ああ、そうか、それをC++/CLI用語でFinalizerというのか。


665 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 12:42:51 ]
>661
おまいはC++/CLIにおける関数上書きの奥の深さに気付いていない

ここに IEnumerable を継承したインターフェイス IEA と IEB がある
その双方を実装した ref クラス RAB は明示的オーバーライドによって列挙の方式を
IEA と IEB によって変更できる
つまり、RAB から取得したインターフェイスによって、for each のオーダーを自由に
選択できるわけだ

666 名前:デフォルトの名無しさん [2006/02/22(水) 16:05:53 ]
MSがC++/CLIを捨てるのは何年後くらいですか?

667 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 16:13:12 ]
MFCの如くこの劣悪貧を10年使うかも。
C++ってだけでもSTLやBoostが混ざってくると複雑なのに、正直CLIはカンベンて感じだおね。

668 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 17:22:04 ]
>>667
駄菓子菓子、これがないとネイティブとかからCLRが非常に使いにくい。
ほら、次でWPFとかなんかたくさんあるし。

669 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 23:36:01 ]
マイクロソフトがもうイラネと思ったら容赦なく捨てにくるさ。




670 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:00:23 ]
>>669

そりゃ日本だけ。海外ではVBerが反乱おこして、msも今では Love VB, Love C#だとよ。

671 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:53:32 ]
C#は、VC++とVBの中間を行くような言語だから、
どっちからも反発が強いだろうね。


672 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:03:54 ]
反発はしないけど、C++で出来るなら C++ Nativeでやっちゃうよ。
必要なとこだけ CLIで .Netなんてライブラリ感覚で使えばいい。

673 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:20:44 ]
/clrでNativeコンパイルすると遅くなる?



674 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 08:50:40 ]
>673
>348

675 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 09:37:51 ]
>>669
要るだろ。

だって、C++市場をCLIで混乱させることにより、
開発者をWin@ブビ or Win@C丼で留めておける。

676 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 10:00:24 ]
>>674

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

それとも呼び出し時にスタックチェックでも入ってるのかね…。


677 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 14:21:46 ]
>676
単純なループでは簡単に結論が出ない問題かもしれない
ちなみに漏れの環境では
CLR 6 - 7 sec.
Native 8 sec.
となった。意外だがCLRの方が早い
Win のほうは -02 -0t を付けた状態で、CLRの方はデフォルトのリリースモジュールだ

678 名前: mailto:sage [2006/02/23(木) 22:30:11 ]
>>670
そんな話しきいたことネ

679 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 22:47:11 ]
誰か、C++/CLI で吐いた実行ファイル、
mono で動かした奴いる??

以前 VS.NET 2003 の C# で書いたコンソールアプリなら
mono で動かしたことあるんだけど。



680 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 23:22:55 ]
mono がそもそも .net framework 2.0 に対応してたか?
してるなら、/clr:pure で動くだろう

681 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 08:17:28 ]
nullptr

682 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 11:48:08 ]
ガッ^

683 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 17:24:15 ]
>>678

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

ケツの穴が広がるぐらい、ハードに読めや。


684 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 21:07:35 ]
>>683
良く読んだよ

>表の顔の日記 

> 裏の顔の日記
> さっさと消えてくんないかな。 うざいんだけど、 まじで。


685 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 04:29:20 ]
という電波でも飛んでるのか?


686 名前:648 [2006/02/25(土) 11:39:03 ]
また教えてください。

C++での構造体の以下の宣言
typedef struct tagHOGE{
  int x;
  long y[4];
}HOGE;

これをマネージ環境にしようとした場合
typedef struct tagHOGE{
  int x;
  long y[4]; ← ここが混合型らしい
}HOGE;

.\MainForm.cpp(26) : error C4368: 'y' をマネージ 'HOGE' のメンバとして定義できません。混合型はサポートされていません

というエラーが出ます。
単に4つのlong型の配列の定義がしたいのですが、マネージ環境では、どのようなやり方があるでしょうか?


687 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 11:43:26 ]
typedef struct → typedef value struct
では?

688 名前:648 [2006/02/25(土) 12:05:23 ]
>>687
そうです。コピペ間違いました。

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

と記述してます。

689 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:17:18 ]
・・・value型使わず、ネイティブ型で定義すれば?



690 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:20:37 ]
あとは ref にして array<long>^ y で宣言して、コンストラクタで初期化するか

691 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:23:04 ]
value struct HOGE
{
  int x;
  array<long>^ y;
};
はコンパイルが通るが、仕様上これでいいのか?

692 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:38:17 ]
ok
ハンドルは nullptr で初期化される

693 名前:648 [2006/02/25(土) 12:58:50 ]
皆さん、早速のレス、ありがとうございます。

>>689

ネイティブで定義すればできることは確認してます。
ただそうすると少し複雑なソフトを組んだ場合、きちんとメモリの後処理をしないと
メモリリークが発生するので、マネージにすればメモリガベージの効用であまり複雑に
考えなくともよいかな、と思っているのです。

>>691

そのやり方もわかります。

各関数で、
void func1(void)
{
  HOGE wk1;
  wk2.y[2] = 123;
}

void func2(void)
{
  HOGE wk2;
  wk2.y[2] = 456;
}

というようなことをしたいのです。

2〜3日あがいてみて自分ではできなそうだったら、ネイティブで定義してやっていきます。
マネージ環境に慣れていけば、そのうち、何か気づきがあると信じて進むしかありません。


694 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:05:44 ]
2〜3日あがくなら2〜3日かけてマニュアル読んだほうがいいような気がする

695 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:45:46 ]
>>693
値型にGCを求める必要がある?

696 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 14:23:50 ]
C++/CLIのスレ見てると無意味にvalueを使いたがる人が多い気がするな。
valueは動作に癖があるから基本refで作ったほうがいいと思う。

697 名前:デフォルトの名無しさん [2006/02/25(土) 16:22:08 ]
value使ったほうが処理速度が速いとでも思い込んでいるんじゃ?
クセがあるには同意。


698 名前:648 [2006/02/25(土) 17:38:04 ]
いろいろとサイトをまわりまして、以下のようにしたところ動いているように見えます。
public ref struct HOGE {
  int x;
  array<long>^ y;
  HOGE() {
    y = gcnew array<long>(4);
  }
};

void func(void)
{
  HOGE^ abc = gcnew HOGE;
  abc->x = 10;
  abc->y[2] = 20;
  for(int i=0; i<4; i++){
    Debug::WriteLine(abc->y[i]);
  }
}

検討違いのコードでなければよいですが。

みなさん、いろいろとレスありがとう。


699 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 20:55:45 ]
>>698
これでも平気。
void func()
{
    HOGE abc;
    abc.x = 10;
    abc.y[2] = 20;
    for (int i = 0; i < 4; i++) {
        Debug::WriteLine(abc->y[i]);
    }
}



700 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 22:33:45 ]
C++は真のローカル変数を使える言語なんだから、(ユーザー定義オブジェクト
がスタック上に配置できる)GCが必要な場合ってのはそんなに多くはならない
ってビョーン先生が言ってた。

701 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:11:17 ]
>>700
それはわかるけれど、C++/CLIはCLIの世界にあわせないといけないからさ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<240KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef