トップページ⇒tech
971コメント269KB

managed C++ やろうぜ!!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C#関連のスレは山ほどあるが
managedC++のスレが無いじゃないか。
折角.NETに生き残ったC++、みんなで語ろうぜ。
0596デフォルトの名無しさんNGNG
マネージクラスのポインタが作成できない。
0597デフォルトの名無しさんNGNG

ref class C { /* .. */ };

C ^ h = gcnew C;     // OK
(*h).do_something();    // OK
C * p;            // Compile Error
sizeof( *h );        // Compile Error

orz
0598デフォルトの名無しさんNGNG
独自にネイティブスレッド生成するアンマネージドなC++の
コードをラップするマネージドなクラスを生成して、
マネージドコードなUIプログラムとリンクさせたアプリケーションを
作った場合、アンマネージドなスレッドの動作にGCコレクションを
割り込ませないようにすることは可能でしょうか?
例えばアンマネージドなスレッドを優先的に動かしたい場合
などです。
0599デフォルトの名無しさんNGNG
>598
具体的には何とも言えんが、用はネイティブなスレッドが起動している間はGCが
動いてその親であるマネージド型を回収してほしくないってこと?

__pin しる

__pin はアンマネージドが動いている間、対象となるオブジェクトをGCしないことを
保証してくれる
0600デフォルトの名無しさんNGNG
>596-597
これって、こういうもんだろってスルーしてたけど、マネージド型って C++/CLI では
ハンドル型として規定されて、クラス・インスタンスとは同等ではないから >>597 の
振る舞いで問題はないと思う

アンマネージドなクラスがマネージド型を保持するときだけ、* でのポイントを認められて
いるけど、ネイティブとマネージド型の混在は M4 を通しての課題らしいから、まだ動いて
いないかと
0601598NGNG
>>599
__pinはメモリを移動しないって意味ですよね?
そうではなく、私が考えているシチュエーションは
1)優先度が高いアンマネージドなスレッドがアクティブな時に
 GCが走り出さない保証があるか?
2)通常優先度のマネージドなコード実行中にGCが走り出した場合、
 そこに優先度が高いアンマネージドなスレッドが割り込むことが
 可能か?
ということです。helpみてるとGC中は(同一プロセス内の?)
全スレッドが中断されるみたいな記述があったようなきがした
のですが、これってアンマネージドなスレッドも含まれのでしょうか?
優先度の高い所だけプロセス分けるって手もあるんでしょうけど…。
0602デフォルトの名無しさんNGNG
>>600
でもなぁ、>>589 のPDF みると、将来的には出来そうなんだよなぁ。
これが出来れば、T がマネージドなクラスかそうでないかをコンパイル時に
判定することも出来そうなので、なるべく早い段階で使えるようにしてほしい。
0603デフォルトの名無しさんNGNG
>601
実行モデルの問題ですね
NativeスレッドとGCのどちらが優先度が高いのか、正直こんなとこで訊いてないで
やってみればいいんでない、とか思わなくもないですが、ざっと調べた限り、CLRと
Nativeの混合状態での実行モデルのようなものは見あたりませんですた

つーことで、試してみました
native スレッドは通常のプライオリティで、ひたすらミリセカンドまで表示し続け
GC側はマネージド型を10000個作って、GC::Collect をかけます

とですね、見事にGCのタイミングで出力される時間が飛んでます。普段は10ミリ
セカンドですが、GC::Collectのタイミングでだいたい+30ミリセカンドぐらいです

もちろん誤差も含んでますし、タイミングもあると思いますが、まぁ、COMでapart
にしたほうがよろしいかと思います
0604デフォルトの名無しさんNGNG
>602
M4終了がいつかってことだよね。WGのタイムテーブルだと、C++/CLIの最終勧告が
2005年末ぐらいだから、構文とベース機能(nativeとmanagedの併存の実現)は今年
いっぱいぐらいじゃないのかなぁ

年末あたりにベータが出るかもね
0605598NGNG
>>603
>やってみればいいんでない
おっしゃる通りです。今夜にも同じようにして試してみます。

>とですね、見事にGCのタイミングで出力される時間が飛んでます。普段は10ミリ
うーん、残念です。ここら辺が保証されれば、私的にはmanaged C++最強!
なわけですが…。っていうか実行モデルの問題か。
まあ、windows上でTimeCriticalなアプリ組むのもどうかってのもあるけど。

わざわざ試して頂いて、ありがとうございました。
0606デフォルトの名無しさんNGNG
http://page4.auctions.yahoo.co.jp/jp/auction/d47227135
0607しぃNGNG
VC++.NET2003はC++の.NET環境が整ってきているのですが、デバッグ実行時の起動が超遅いです。
プロジェクトを新規作成して何もコードを書かずにデバッグ実行を開始しても、フォームが出てくるまで30秒ぐらい待たされます。
デバッグなしの実行ではすぐに出てくるのでデバッガの問題だと思うのですが。
2002の時も「Hello World」がコンソールに出てくるまでやはり30秒ぐらいかかります。
どなたか解決策をご存じないでしょうか?
ちなみに環境はWinXPPro、AthlonMP2000+Dual、メモリ512MBです。
ノート(WinXPHome、PentiumM1.4GHz、メモリ512MB)や職場のPC(Win2k、Pentium4-2GHz、メモリ256MB)でも同様でした。
よろしくお願いします。
0608デフォルトの名無しさんNGNG
ウチは3秒だなあ
アンチウイルスソフトとかつかってる?
0609山本五十六NGNG
おまえら何時までC++ なんか使ってるんだ?
馬鹿だろ?さっさと死ねよ
0610デフォルトの名無しさんNGNG
ウチも遅いです。
なんか大量にモジュールをロードしてる感じ。

ナニカ常駐させれば速くなるのかな?
0611デフォルトの名無しさんNGNG
>610
2002 の時はそうだったが、2003 になってからは感じなくなった
当時も環境の問題だろうと言われて、消えていったんだが、マルチポストのスレ違い
を相手にしないでくれ

いい感じに沈んでたのに
0612しぃNGNG
>607 です
自己解決しました。デバッグモードを「自動」ではなく「マネージのみ」にすると早くなりました。デバッグも出来るみたいです。お騒がせしました。
0613デフォルトの名無しさんNGNG
>>612
お礼すんのにあげんなァァァ
0614デフォルトの名無しさんNGNG
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
  int a;
  a=atoi(textBox1->Text);
}

error C2664 'atoi' 1番目の引数を'System::String __gc*'から'const char*'に変換できません。

フォーム上のボタン button1 をクリックしたら
textBox1 の text プロパティを数値に変換したいのです
デザイン時 text="10"です
0615デフォルトの名無しさんNGNG
>614
上げないで欲しいんだが・・・

文字列の変換はユーティリティを利用する

#include<vcclr.h>

と宣言して、

wchar_t __pin *pRawString = PtrToStringChars(textBox1->Text);

これで、ワイド文字列になる。あとは、ワイド文字列に対応した wcstol を使って欲しい

よく考えると、この文字列処理ってこのスレに書いたことがなかったなぁ
0616デフォルトの名無しさんNGNG
>615
あーっと、スマソ
こっちだ wcstol −> _wtoi
0617デフォルトの名無しさんNGNG
>>615-616
遅レス&age申し訳ないです
今確かめました。修行してきます・・・

MSDN C++マネージ拡張の仕様
7.8 文字への直接アクセス
これ自分には勉強になりました
0618デフォルトの名無しさんNGNG
MSDN に VS2005 TP May 2004 来た。
C++ CLI はどこまで進んでいるんだろう…
0619デフォルトの名無しさんNGNG
>618
こんな感じらしい
ttp://blogs.msdn.com/slippman/

もうしばらくしたら確認してみる
0620149NGNG
皆さんの目から見るC#に対してのメリットってなんですか?
自分はVC++メインに使っていて、最近やっと.NET触ることになり調べてるんですが、C#も便利そうなんですが、テンプレート使えないので躊躇しています。
           
自分なりのメリットデメリットです。まだ本診ただけなので間違ってるところも多々あると思いますが
ManagedC++
 テンプレートつかえる。stl、boostなどになれたものには何よりも変えられん。
 アンマネージとの共存がちょっとやりやすそう
 
C#
 記述がC++よりもすっきりする(個人的に)
 デリゲート、イベント使える
0621620NGNG
追加:C++の多重継承

ハンドルは間違いです...
0622デフォルトの名無しさんNGNG
>620

まず、MC++ に対する認識について、マネージドクラスに対してはまだテンプレートは
あまり使えんです
また、マネージド、アンマネージドの混合したクラスも作れんです
だから、単純に言語としてのレベルでは C# の圧勝と言ってもいいと思います
それで、C++/CLI とかで上で騒いでるわけですが

ただ、アンマネージドなプログラムから、マネージドなクラス・ライブラリを摘み食うことが
できるのは、MC++ の唯一最大の特権ではないでしょうか
また、処理速度を必要とする部分を組むのに、アンマネージドで組んでマネージド側に
ラップして機能を提供するという点を考えると、MC++ を避けて通れないと思っています

どこでも継子扱いなんだけどね(´・ω・`)ショボーン
0623デフォルトの名無しさんNGNG
うーんだときついかも知れんです
テンプレートはマネージドに対して少しは使えるんですか?
0624デフォルトの名無しさんNGNG
>623
言い忘れてたけど、できれば sage て

アンマネージド・クラスで gcroot 使ってマネージド・クラスを持てば、アンマネージド・クラスに
ついてはテンプレート使えるけど、現状の CLR 自体が Generics について拡張されるのを
待ってる状態だから

すぐに仕事に使うんじゃなければ >589 でも読んで(*´Д`)ハァハァするがよしかと
0625デフォルトの名無しさんNGNG
>623

マネージド拡張の未サポート説明
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcManagedExtensionsSpec_25.asp

MSDN日本語ドキュメントにも付いてたはず
0626デフォルトの名無しさんNGNG
>>623
単純なSTLの利用程度だったら gcroot を使う方法がここにある
http://www.codeproject.com/managedcpp/
0627デフォルトの名無しさんNGNG
自分がしたいこと

多重継承
リフレクション
デリゲート
テンプレートorGenerics
ガベコレ
アンマネージとの密接なやり取り

...2005年まで待つのか...いやほんとに2005年に出るのか?
0628620,627NGNG
ごめんなさいまたあげちゃいました...
0629デフォルトの名無しさんNGNG
Whidbey May 2004
基本的には M4.1 ベースでバグフィックスを進めたみたい
今回の Whidbey からはプロパティ上で /clr /clr:pure /clr:safe /clr:oldSyntax が設定できる
ようになってた

後は、.Net FW は 2.0 ベースになってた
0630デフォルトの名無しさんNGNG
んで、次のような構文を実行しますた

interface class IOut { String ^Result(void); };

value class SamVal : public IOut {
public:
  String ^Result(void) override {
    return gcnew String("Sample value");
  }
};

generic <typename T> where T : IOut
ref class Sample {
public:
  void out() {
    T t;
    Console::WriteLine("Result : {0}", t->Result());
  }
};

void _tmain() {
  Sample<SamVals> ^sam = gcnew Sample<SamVals>;
  sam->out();
}
Generics も順調そうです
0631デフォルトの名無しさんNGNG
SessionEnding を拾えないでいる・・・・C#で書くとうまくいくのだが・・・?
どっかにサンプルころがってないかな?VC++.netのコード。
0632デフォルトの名無しさんNGNG
>631
CodeProject の C++ WebSrevice あたりで、あるんでない?
この間、WebServices を作ってて、Application や Session にアクセスできることを
今更ながら知って感動していた

いや、漏れが物知らずだったんだけどさ(´・ω・`)ショボーン
0633デフォルトの名無しさんNGNG
結局SessionEnding使わずにWndProcでやり過ごしたわ。あーすっきり
0634デフォルトの名無しさんNGNG
深く沈んでる(w
ベータが出るまで話題がないなぁ

と、保守
0635デフォルトの名無しさんNGNG
VC++2005 Express Beta 入れてみた
相変わらず、ファイナライザはない

相変わらず M4.1 らしい
0636デフォルトの名無しさんNGNG
ぬぅ。

 boost::is_base_and_derived< System::Object, T >

とかかけるようになるのはいったいいつになるのだ。
0637デフォルトの名無しさんNGNG
MC++以外の.NETのプロジェクトに
C++,ATL,MC++で書いたライブラリをDLL化
しないで使うことって可能ですか?

あとからexeとdllを一つにできるのでもいいです。
0638デフォルトの名無しさんNGNG
>637
無理
0639デフォルトの名無しさんNGNG
なあ、managed C++やろうと思っても良い書籍が見つからないんだがオススメある?
やっぱMSDNライブラリしかない?
0640デフォルトの名無しさんNGNG
>639
漏れはこれで勉強した。いい本かどうかは微妙

ttp://www.amazon.co.jp/exec/obidos/ASIN/1893115283/qid=1090330561/sr=1-4/ref=sr_1_10_4/249-9037969-2157104
0641デフォルトの名無しさんNGNG
あげ
0642デフォルトの名無しさんNGNG
>>639
洋書でいいなら"Programming with managed extensions for VISUAL C++ .NET" MS Press
http://www.amazon.com/exec/obidos/tg/detail/-/0735617244/qid=1090702738/sr=8-1/ref=sr_8_xs_ap_i1_xgl14/103-7664091-4927863?v=glance&s=books&n=507846
もあるよ。ぜんぜん初心者向けじゃなく、C++ をMFCなどで使っている人が.NETを使いたい場合に読むって感じの内容。
なので、易しい解説などいらんから、がつーんと要点と詳細が欲しいという人向け。
0643デフォルトの名無しさんNGNG
C# の params キーワードに対応するmanaged C++ での方法は、何を使えばよいのでしょうか?
0644デフォルトの名無しさんNGNG
>643

対応型 __gc[] じゃ駄目?

params char[] だったら wchar_t __gc []
0645643NGNG
いえ、可変長メソッド引数なので、単なる __gc ではだめです。
何かしらの Attribute だと思うのですが、見つけられていません……。
0646デフォルトの名無しさんNGNG
えっと、 __gc[] で駄目だったの? __gc[] って array のガベージ型だと思うんだけど

C#
System.Console.WriteLine(string format, params object[] args)

C++
System.Console.WriteLine(String *format, Object* arg __gc[])

ってなってるんだけど

0647643NGNG
解決しました。
ParamArrayAttribute でした。
MSDNの言語フィルタをVBにしたら気づきました。

>>646
その __gc は、単に managed 配列を表すだけの、省略可能な修飾子ですよ。
0648デフォルトの名無しさんNGNG
[ParamArrayAttribute]
void Func(String *forms, Object * args[])

具体的にはこんな感じになるのでしょうか?
0649643NGNG
引数に対する属性なので、この位置です。
void Func(String *forms, [ParamArray] Object * args[])

ただ、managed C++ だと、最後の引数以外につけてもエラーにならないんですね。
C# の params だとちゃんと怒られるのに……。
0650デフォルトの名無しさんNGNG
2005βにて。
ジェネリックテンプレート

template <typename Interface>
generic <typename Type> where Type : Interface
public ref class GenericTemplate{
・
・
・
}

こんなのを書いたら怒られた。
コンパイラ君、無理言ってスマンカッタ
0651デフォルトの名無しさんNGNG
>650
・・・そりゃ難かしいでしょう
でも、できたらうれすぃ
0652デフォルトの名無しさんNGNG
>649
Whidbey のサンプルでは、C++/CLI ではこうなるらすぃ

double average( [ParamArray] array<Int32>^ arr );

array は stdcli::language でサポートされるマネージド配列のクラス

double average( [ParamArray] array<Object^>^ arr)

で任意の Object お取得するようになるってことか
0653デフォルトの名無しさんNGNG
ざっと、アプリを作ってみますた。軽く注意するところは

・まず、第一に using namespace stdcli::language;
・配列の受け取りは array<型> ^
・ハンドル型の NULL 初期化は nullptr を使う
・static 変数の初期化は static コンストラクタで行う
・普通のポインタ型を delete し忘れるな
・as の代わりに safe_cast<ハンドル ^>
・foreach はないので、stdcli::for_each を信じて待て

という点でしょうか

感想としては、C# で組んでるのと変わらない気分になったです
速度も、WindowsForm で組む分には C# の方が起動は早いみたい
まぁ、まだこれからだと思いますが
0654デフォルトの名無しさんNGNG
Stringの比較はCompare、CompareToメソッドを使うしかないの?
if (Path::GetExtension(filename) == S".BIN")みたいに書きたいんだけど。
0655デフォルトの名無しさんNGNG
String は結局、CLI の型だから、Equals が用意されてる

if ( Path::GetExtention(filename)->ToUpper()->Equals(S"BIN") )

って書けばいいかと

== もちゃんと動いている気がするけど、念のために
0656デフォルトの名無しさんNGNG
C++/CLIって
ぶっちゃけイケてる?
0657デフォルトの名無しさんNGNG
>>656
逝けてる
0658デフォルトの名無しさんNGNG
>>656
既存のライブラリを使いやすいという意味ではかなりいけてる。

まあ、MC++で Managed ラッパクラス作って、それを C# から使うのがベストな気がするが。
0659デフォルトの名無しさんNGNG
>656
C++ で .Net フレームワークを綺麗に使いたい。でも、__gc とかうっとうしい。という要望に
完全に応えている。ハンドル型とか最初は気になるけど、自動変数の気分で使い捨てる
ことができる

C# くらいに C++ が .Net フレームワークへの親和性を高めたものと感じる
ここまで作りが違わないと、逆に C# でコード組む気がなくなるよ
後は、マネージド、アンマネージドの混在が実現できれば、言うこと無し

標準 C++ で組みたいときはそのまま組めばいいし、ふと、マネージドに繋げたいときは
さっくりソース持ってきて纏め直して、ref つけるだけ
ベータ・レベルのできばえとしては、べた褒めする

まぁ、まだ、ベータだし、ってとこいっぱいあるけど
0660デフォルトの名無しさんNGNG
STL.NET
http://msdn.microsoft.com/library/en-us/dnvs05/html/stl-netprimer.asp
いつだ、いつ追加されるんだぁ。少なくとも Beta1 にはなかった

ところで、匿名デリゲートのやり方がよくわからないんですが、できる?

List<String ^>^ loop_words = gcnew List<String^>;
loop_words->ForEach( ... ここに匿名 delegate を渡したい );

って、やりたい
チェックライト程度の処理をいちいちメソッドにしたくないんです

0661デフォルトの名無しさんNGNG
http://www.msdn.net/library/default.asp?url=/library/en-us/dnvs05/html/TransGuide.asp
こんなのもあったのな
0662デフォルトの名無しさんNGNG
アスペクト指向的に、今までのC++ソースコードは何も書き換えずに
別ファイルからこのクラスは__gcにする、とかいう指定が出来るようになればいいな。
0663デフォルトの名無しさんNGNG
>662
なんか、できそうな気がする

アセンブリに纏めるということを前提に、export するクラスを別ファイルでこのクラスは
ハンドル型で扱えるようにすると指定しておいて、アセンブリにまとめるときに、対応する
インターフェイス名を指定してマッピングし、旧来のソースをマネージド型として扱うという
やり方なら作れるんじゃないかな
0664デフォルトの名無しさんNGNG
C#での
BindingContext[dataSet1,"TableName"].Position++;
はCPPでどう書くの?
0665デフォルトの名無しさんNGNG
>>663
そうすと、C#囲い込み戦略byM$が破綻するから、出来ない仕掛け。
0666デフォルトの名無しさんNGNG
>>665
ぜんぜん論理的じゃない。
0667デフォルトの名無しさんNGNG
>664
MSDN に書いてあるじゃねぇか
BindingContext->get_Item( ds, "Customers" )->Position = groupBox1->BindingContext->get_Item( ds, "Customers" )->Position + 1

>665
え? 自作すればいいだろ、これぐらい
ファイルの対応表から、マネージド・ラッパのクラス吐いて、インターフェイスの実装再配置を
使って、アンマネージドなクラスにマッピングすればいいんだと思うが
もしかして、それよりもずっと高度な話を言ってる?
0668デフォルトの名無しさんNGNG
MC++とC++/CLIの違いは記述の違いだけ?
やれることに違いは無いのかな?
0669デフォルトの名無しさんNGNG
違いはいっぱいあるんだが、目に見えるところでは記述の違いだけだな
言語って、そういうものだろ?
0670デフォルトの名無しさんNGNG
>>669
まあそうですけどね。ただ、VJ++とCOMのシームレスな連携と
C++とCOMのあのメンドクささを、ただの記述の違いというには
個人的には違和感を感じます。あれぐらいの違いがあるのかなと。
0671デフォルトの名無しさんNGNG
>670
C++/CLI の最大の焦点は、マネージドとアンマネージドの2層化
MC++ ではCILヒープとヒップの層の分離ができていないために、総てが一緒くたに
new していた。だから、逆に何を削除するか、何をガベージに任せればいいのか
わからなくなっていた

MC++ はその試行錯誤の段階の言語といえる。管理を明確にし、型を分離し、配置位置を
ちゃんと意識しながらコーディングできるようにしたのが C++/CLI
そして、同時に標準 C++ の純粋性を保持しようとしている。また、継承関係でもマネージド
・非マネージド間での相互参照を許可する(予定。笑)設計になってる

これらを考えると、内部的にはかなり違っている。追加された表記は特にオブジェクトの
配置位置を明確にすることと、さりげに、C++ の抽象化への不満を解消するための
キーワードが多い

こんな感じで良い? まぁ、口で説明受けるより組んでみた方が良い
漏れの意見はちょっとヽ(´ー`)ノマンセー意見が過ぎると思う

ECMA 標準化 C++/CLI ドラフト
http://msdn.microsoft.com/visualc/homepageheadlines/ecma/default.aspx
0672デフォルトの名無しさんNGNG
VS2003、.net Framework 1.1を使っています。
自作のアイコンを作成してFormに適用しました。タスクバーにもアイコンが表示されています。

ところがXPにはタスクバーにアイコンが増えるとアイコンをまとめる機能があり、
これが働くとデフォルトのアイコンに戻ってしまいます。
たぶんフォームではなくアプリのアイコンを表示しているのだと思います。
アプリケーションに自作のアイコンを適用するにはどうすればよいのでしょうか?

C#ではプロジェクトのプロパティにビルドという項目があってそこで指定できます。
しかしMC++にはこれがありません。app.icoを自作のアイコンで上書きしたところ、
app.rcの中も自作のアイコンに置き換わりましたが、上記の不具合はなおりませんでした。
0673672NGNG
解決しました。
app.icoを上書きすればよかったのですね…。
debugビルドでは反映されないので混乱してしまいました。
0674デフォルトの名無しさんNGNG
C#での BindingContext[dataSet1,"TableName"].Position++;
が
BindingContext->get_Item( ds, "Customers" )->Position = groupBox1->BindingContext->get_Item( ds, "Customers" )->Position + 1
に化けるのか。

なんかどこかで見たような....

そうそう。C++Builder で Delphi のクラスを使うときも、こんな感じで記述が増えた。
同じことをやっているんだね...
0675デフォルトの名無しさんNGNG
>674
ただ単に、現状の C++/CLI では、インデックス・プロパティをサポートできていないから
こうなってるだけなんでは?

インデックス・プロパティに対応したら、

BindingContext[ds, L"Customers"]->Position = BindingContext[ds, L"Customers"]->Position + 1;

になるでしょう。もっとも、+や++をわざわざオーバーロードする気がなさそうなんで
あまりかわんないけど
0676デフォルトの名無しさんNGNG
プロパティのインクリメントに対応するだけでも、
BindingContext->get_Item( ds, "Customers" )->Position++;
こんなにすっきり。
0677デフォルトの名無しさんNGNG
ふと思ったんだが、インクリぐらい対応してるんじゃないのか?
0678デフォルトの名無しさんNGNG
__gc なクラスをシングルトンにするにはどうしたらいいでしょうか?
クラス変数はGCポインタをもてないので。
0679デフォルトの名無しさんNGNG
お願いだから、。NETでSTLやふつ〜の標準C/C++ライブラリ
使う方法教えてくれ。これなしでC++のプログラムをせいと
いうわけじゃなかろ?
0680デフォルトの名無しさんNGNG
>678
Singleton クラスを一つ作って、gcroot でメンバを持たせたら?

>679
C++/CLI が無事完成するのを待て
ふつーのSTLや標準C++ライブラリしか使わないなら、マネージド拡張なしで作れば
いいんでない?
#pragma unmanaged 使ってさ

漏れ、boostをそれで使ってるよ
0681デフォルトの名無しさんNGNG
このスレも C++/CLI やろうぜ!! で立て直したら?
0682デフォルトの名無しさんNGNG
まだ、M4程度のベータだし、managed C++とスレ分けるまでもないから、このままで
いいと思われ
このペースじゃ2005 Mid のWhidbeyリリースまでに1000逝かんでしょ
0683デフォルトの名無しさんNGNG
0684デフォルトの名無しさんNGNG
C++/CLI のベータだが、気のせいか
Dictionary<String ^, data ^> ^dic = gcnew Dictionary<String ^, data ^>;
で作ったデータで、

String ^keyword = ...
dic->ContainsKey(keyword)
としたとき、データとして含まれているはずなのに引っかからないことがある
(´-`).。oO(なんでだろう?)
0685デフォルトの名無しさんNGNG
interface class を継承したクラスまでインターフェイスになっちまうし。
0686ageNGNG
>>679
Microsoft Visual C++ .Net 2003: Kick Start
http://www.amazon.co.jp/exec/obidos/ASIN/0672326000
を読むと何か参考になるかも。
0687wonapiNGNG
WonAPI MRIMG32は、Microsoft MSIMG32.DLL と高い互換性を実現しました。

サンプル プログラムで動作を確認できる。

詳しくは、下の「WonAPI MRIMG32 トップページ」で最新情報をご確認を。

WonAPI MRIMG32 トップページ
http://f59.aaa.livedoor.jp/~wonapi/mrimg32/index.html
0688デフォルトの名無しさんNGNG
この程度自前で実装できる上に、このスレと何の関係もない。
0689デフォルトの名無しさんNGNG
__gcを付けたクラスから__gcの無いクラスにコールバック先(デリゲートを使う?)を渡して
__gcの無いクラスからコールバックをするにはどうしたらいいのでしょうか?
0690デフォルトの名無しさんNGNG
・delegateは__gcクラス
・__gcクラスを__nogcクラスで使うときはgcroot<>で囲む
ポイントはこの二つ。コードに起こすとこんな感じ。

#include <gcroot.h>
using namespace System;
public __delegate void DD(String* message);
__nogc class Nogc{
  gcroot<DD*> my;
public:
  void SetD( DD* m ){ my = m; }
  void CallD(){ my->Invoke( "ぬるぽ\n" ); }
};
public __gc class Gc {
public:
 void Func(String* message) { Console::WriteLine(message); }
};

int main(){
 Gc* c = new Gc;
 Nogc i;
 i.SetD( new DD( c, Gc::Func ) );
 i.CallD();
 return 0;
}
0691デフォルトの名無しさんNGNG
>>690
レスありがとーー!
試してみます。報告は後ほど
0692デフォルトの名無しさんNGNG
>>690
ありがとうございました。
解決しそうです。

ちなみに何かいいMC++の書籍ありますか?
0693デフォルトの名無しさんNGNG
つーか
こんなの使ってる奴いるのか?
正気か?
0694デフォルトの名無しさんNGNG
>>693
使わざるえない時もあるってもんさヽ( `Д´)ノ
0695デフォルトの名無しさんNGNG
>>692
俺はMSDNだけで済ませてる。
あとは過去ログ参照

>>693
俺だってC#とか使いてぇよ…orz
まぁ、デフォのC++よりは幾分マシ
0696デフォルトの名無しさんNGNG
   AAA* aaa[];
public:
   __property ????? get_AddressList() { return aaa; }
   __property void set_AddressList(????? value) { aaa = value; }

AAAクラスを配列で持ちたいので
こんな感じでプロパティを宣言したいのですが
うまくいきません。?????の所をどうしたらいいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています