managed C++ やろうぜ!!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGmanagedC++のスレが無いじゃないか。
折角.NETに生き残ったC++、みんなで語ろうぜ。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGref class C { /* .. */ };
C ^ h = gcnew C; // OK
(*h).do_something(); // OK
C * p; // Compile Error
sizeof( *h ); // Compile Error
orz
0598デフォルトの名無しさん
NGNGコードをラップするマネージドなクラスを生成して、
マネージドコードなUIプログラムとリンクさせたアプリケーションを
作った場合、アンマネージドなスレッドの動作にGCコレクションを
割り込ませないようにすることは可能でしょうか?
例えばアンマネージドなスレッドを優先的に動かしたい場合
などです。
0599デフォルトの名無しさん
NGNG具体的には何とも言えんが、用はネイティブなスレッドが起動している間はGCが
動いてその親であるマネージド型を回収してほしくないってこと?
__pin しる
__pin はアンマネージドが動いている間、対象となるオブジェクトをGCしないことを
保証してくれる
0600デフォルトの名無しさん
NGNGこれって、こういうもんだろってスルーしてたけど、マネージド型って C++/CLI では
ハンドル型として規定されて、クラス・インスタンスとは同等ではないから >>597 の
振る舞いで問題はないと思う
アンマネージドなクラスがマネージド型を保持するときだけ、* でのポイントを認められて
いるけど、ネイティブとマネージド型の混在は M4 を通しての課題らしいから、まだ動いて
いないかと
0601598
NGNG__pinはメモリを移動しないって意味ですよね?
そうではなく、私が考えているシチュエーションは
1)優先度が高いアンマネージドなスレッドがアクティブな時に
GCが走り出さない保証があるか?
2)通常優先度のマネージドなコード実行中にGCが走り出した場合、
そこに優先度が高いアンマネージドなスレッドが割り込むことが
可能か?
ということです。helpみてるとGC中は(同一プロセス内の?)
全スレッドが中断されるみたいな記述があったようなきがした
のですが、これってアンマネージドなスレッドも含まれのでしょうか?
優先度の高い所だけプロセス分けるって手もあるんでしょうけど…。
0602デフォルトの名無しさん
NGNGでもなぁ、>>589 のPDF みると、将来的には出来そうなんだよなぁ。
これが出来れば、T がマネージドなクラスかそうでないかをコンパイル時に
判定することも出来そうなので、なるべく早い段階で使えるようにしてほしい。
0603デフォルトの名無しさん
NGNG実行モデルの問題ですね
NativeスレッドとGCのどちらが優先度が高いのか、正直こんなとこで訊いてないで
やってみればいいんでない、とか思わなくもないですが、ざっと調べた限り、CLRと
Nativeの混合状態での実行モデルのようなものは見あたりませんですた
つーことで、試してみました
native スレッドは通常のプライオリティで、ひたすらミリセカンドまで表示し続け
GC側はマネージド型を10000個作って、GC::Collect をかけます
とですね、見事にGCのタイミングで出力される時間が飛んでます。普段は10ミリ
セカンドですが、GC::Collectのタイミングでだいたい+30ミリセカンドぐらいです
もちろん誤差も含んでますし、タイミングもあると思いますが、まぁ、COMでapart
にしたほうがよろしいかと思います
0604デフォルトの名無しさん
NGNGM4終了がいつかってことだよね。WGのタイムテーブルだと、C++/CLIの最終勧告が
2005年末ぐらいだから、構文とベース機能(nativeとmanagedの併存の実現)は今年
いっぱいぐらいじゃないのかなぁ
年末あたりにベータが出るかもね
0605598
NGNG>やってみればいいんでない
おっしゃる通りです。今夜にも同じようにして試してみます。
>とですね、見事にGCのタイミングで出力される時間が飛んでます。普段は10ミリ
うーん、残念です。ここら辺が保証されれば、私的にはmanaged C++最強!
なわけですが…。っていうか実行モデルの問題か。
まあ、windows上でTimeCriticalなアプリ組むのもどうかってのもあるけど。
わざわざ試して頂いて、ありがとうございました。
0606デフォルトの名無しさん
NGNG0607しぃ
NGNGプロジェクトを新規作成して何もコードを書かずにデバッグ実行を開始しても、フォームが出てくるまで30秒ぐらい待たされます。
デバッグなしの実行ではすぐに出てくるのでデバッガの問題だと思うのですが。
2002の時も「Hello World」がコンソールに出てくるまでやはり30秒ぐらいかかります。
どなたか解決策をご存じないでしょうか?
ちなみに環境はWinXPPro、AthlonMP2000+Dual、メモリ512MBです。
ノート(WinXPHome、PentiumM1.4GHz、メモリ512MB)や職場のPC(Win2k、Pentium4-2GHz、メモリ256MB)でも同様でした。
よろしくお願いします。
0608デフォルトの名無しさん
NGNGアンチウイルスソフトとかつかってる?
0609山本五十六
NGNG馬鹿だろ?さっさと死ねよ
0610デフォルトの名無しさん
NGNGなんか大量にモジュールをロードしてる感じ。
ナニカ常駐させれば速くなるのかな?
0611デフォルトの名無しさん
NGNG2002 の時はそうだったが、2003 になってからは感じなくなった
当時も環境の問題だろうと言われて、消えていったんだが、マルチポストのスレ違い
を相手にしないでくれ
いい感じに沈んでたのに
0612しぃ
NGNG自己解決しました。デバッグモードを「自動」ではなく「マネージのみ」にすると早くなりました。デバッグも出来るみたいです。お騒がせしました。
0613デフォルトの名無しさん
NGNGお礼すんのにあげんなァァァ
0614デフォルトの名無しさん
NGNG{
int a;
a=atoi(textBox1->Text);
}
error C2664 'atoi' 1番目の引数を'System::String __gc*'から'const char*'に変換できません。
フォーム上のボタン button1 をクリックしたら
textBox1 の text プロパティを数値に変換したいのです
デザイン時 text="10"です
0615デフォルトの名無しさん
NGNG上げないで欲しいんだが・・・
文字列の変換はユーティリティを利用する
#include<vcclr.h>
と宣言して、
wchar_t __pin *pRawString = PtrToStringChars(textBox1->Text);
これで、ワイド文字列になる。あとは、ワイド文字列に対応した wcstol を使って欲しい
よく考えると、この文字列処理ってこのスレに書いたことがなかったなぁ
0616デフォルトの名無しさん
NGNGあーっと、スマソ
こっちだ wcstol −> _wtoi
0617デフォルトの名無しさん
NGNG遅レス&age申し訳ないです
今確かめました。修行してきます・・・
MSDN C++マネージ拡張の仕様
7.8 文字への直接アクセス
これ自分には勉強になりました
0618デフォルトの名無しさん
NGNGC++ CLI はどこまで進んでいるんだろう…
0619デフォルトの名無しさん
NGNGこんな感じらしい
ttp://blogs.msdn.com/slippman/
もうしばらくしたら確認してみる
0620149
NGNG自分はVC++メインに使っていて、最近やっと.NET触ることになり調べてるんですが、C#も便利そうなんですが、テンプレート使えないので躊躇しています。
自分なりのメリットデメリットです。まだ本診ただけなので間違ってるところも多々あると思いますが
ManagedC++
テンプレートつかえる。stl、boostなどになれたものには何よりも変えられん。
アンマネージとの共存がちょっとやりやすそう
C#
記述がC++よりもすっきりする(個人的に)
デリゲート、イベント使える
0621620
NGNGハンドルは間違いです...
0622デフォルトの名無しさん
NGNGまず、MC++ に対する認識について、マネージドクラスに対してはまだテンプレートは
あまり使えんです
また、マネージド、アンマネージドの混合したクラスも作れんです
だから、単純に言語としてのレベルでは C# の圧勝と言ってもいいと思います
それで、C++/CLI とかで上で騒いでるわけですが
ただ、アンマネージドなプログラムから、マネージドなクラス・ライブラリを摘み食うことが
できるのは、MC++ の唯一最大の特権ではないでしょうか
また、処理速度を必要とする部分を組むのに、アンマネージドで組んでマネージド側に
ラップして機能を提供するという点を考えると、MC++ を避けて通れないと思っています
どこでも継子扱いなんだけどね(´・ω・`)ショボーン
0623デフォルトの名無しさん
NGNGテンプレートはマネージドに対して少しは使えるんですか?
0624デフォルトの名無しさん
NGNG言い忘れてたけど、できれば sage て
アンマネージド・クラスで gcroot 使ってマネージド・クラスを持てば、アンマネージド・クラスに
ついてはテンプレート使えるけど、現状の CLR 自体が Generics について拡張されるのを
待ってる状態だから
すぐに仕事に使うんじゃなければ >589 でも読んで(*´Д`)ハァハァするがよしかと
0625デフォルトの名無しさん
NGNGマネージド拡張の未サポート説明
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcManagedExtensionsSpec_25.asp
MSDN日本語ドキュメントにも付いてたはず
0626デフォルトの名無しさん
NGNG単純なSTLの利用程度だったら gcroot を使う方法がここにある
http://www.codeproject.com/managedcpp/
0627デフォルトの名無しさん
NGNG多重継承
リフレクション
デリゲート
テンプレートorGenerics
ガベコレ
アンマネージとの密接なやり取り
...2005年まで待つのか...いやほんとに2005年に出るのか?
0628620,627
NGNG0629デフォルトの名無しさん
NGNG基本的には M4.1 ベースでバグフィックスを進めたみたい
今回の Whidbey からはプロパティ上で /clr /clr:pure /clr:safe /clr:oldSyntax が設定できる
ようになってた
後は、.Net FW は 2.0 ベースになってた
0630デフォルトの名無しさん
NGNGinterface 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どっかにサンプルころがってないかな?VC++.netのコード。
0632デフォルトの名無しさん
NGNGCodeProject の C++ WebSrevice あたりで、あるんでない?
この間、WebServices を作ってて、Application や Session にアクセスできることを
今更ながら知って感動していた
いや、漏れが物知らずだったんだけどさ(´・ω・`)ショボーン
0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNGベータが出るまで話題がないなぁ
と、保守
0635デフォルトの名無しさん
NGNG相変わらず、ファイナライザはない
相変わらず M4.1 らしい
0636デフォルトの名無しさん
NGNGboost::is_base_and_derived< System::Object, T >
とかかけるようになるのはいったいいつになるのだ。
0637デフォルトの名無しさん
NGNGC++,ATL,MC++で書いたライブラリをDLL化
しないで使うことって可能ですか?
あとからexeとdllを一つにできるのでもいいです。
0638デフォルトの名無しさん
NGNG無理
0639デフォルトの名無しさん
NGNGやっぱMSDNライブラリしかない?
0640デフォルトの名無しさん
NGNG漏れはこれで勉強した。いい本かどうかは微妙
ttp://www.amazon.co.jp/exec/obidos/ASIN/1893115283/qid=1090330561/sr=1-4/ref=sr_1_10_4/249-9037969-2157104
0641デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNG洋書でいいなら"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デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG対応型 __gc[] じゃ駄目?
params char[] だったら wchar_t __gc []
0645643
NGNG何かしらの Attribute だと思うのですが、見つけられていません……。
0646デフォルトの名無しさん
NGNGC#
System.Console.WriteLine(string format, params object[] args)
C++
System.Console.WriteLine(String *format, Object* arg __gc[])
ってなってるんだけど
0647643
NGNGParamArrayAttribute でした。
MSDNの言語フィルタをVBにしたら気づきました。
>>646
その __gc は、単に managed 配列を表すだけの、省略可能な修飾子ですよ。
0648デフォルトの名無しさん
NGNGvoid Func(String *forms, Object * args[])
具体的にはこんな感じになるのでしょうか?
0649643
NGNGvoid Func(String *forms, [ParamArray] Object * args[])
ただ、managed C++ だと、最後の引数以外につけてもエラーにならないんですね。
C# の params だとちゃんと怒られるのに……。
0650デフォルトの名無しさん
NGNGジェネリックテンプレート
template <typename Interface>
generic <typename Type> where Type : Interface
public ref class GenericTemplate{
・
・
・
}
こんなのを書いたら怒られた。
コンパイラ君、無理言ってスマンカッタ
0651デフォルトの名無しさん
NGNG・・・そりゃ難かしいでしょう
でも、できたらうれすぃ
0652デフォルトの名無しさん
NGNGWhidbey のサンプルでは、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デフォルトの名無しさん
NGNGif (Path::GetExtension(filename) == S".BIN")みたいに書きたいんだけど。
0655デフォルトの名無しさん
NGNGif ( Path::GetExtention(filename)->ToUpper()->Equals(S"BIN") )
って書けばいいかと
== もちゃんと動いている気がするけど、念のために
0656デフォルトの名無しさん
NGNGぶっちゃけイケてる?
0657デフォルトの名無しさん
NGNG逝けてる
0658デフォルトの名無しさん
NGNG既存のライブラリを使いやすいという意味ではかなりいけてる。
まあ、MC++で Managed ラッパクラス作って、それを C# から使うのがベストな気がするが。
0659デフォルトの名無しさん
NGNGC++ で .Net フレームワークを綺麗に使いたい。でも、__gc とかうっとうしい。という要望に
完全に応えている。ハンドル型とか最初は気になるけど、自動変数の気分で使い捨てる
ことができる
C# くらいに C++ が .Net フレームワークへの親和性を高めたものと感じる
ここまで作りが違わないと、逆に C# でコード組む気がなくなるよ
後は、マネージド、アンマネージドの混在が実現できれば、言うこと無し
標準 C++ で組みたいときはそのまま組めばいいし、ふと、マネージドに繋げたいときは
さっくりソース持ってきて纏め直して、ref つけるだけ
ベータ・レベルのできばえとしては、べた褒めする
まぁ、まだ、ベータだし、ってとこいっぱいあるけど
0660デフォルトの名無しさん
NGNGhttp://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こんなのもあったのな
0662デフォルトの名無しさん
NGNG別ファイルからこのクラスは__gcにする、とかいう指定が出来るようになればいいな。
0663デフォルトの名無しさん
NGNGなんか、できそうな気がする
アセンブリに纏めるということを前提に、export するクラスを別ファイルでこのクラスは
ハンドル型で扱えるようにすると指定しておいて、アセンブリにまとめるときに、対応する
インターフェイス名を指定してマッピングし、旧来のソースをマネージド型として扱うという
やり方なら作れるんじゃないかな
0664デフォルトの名無しさん
NGNGBindingContext[dataSet1,"TableName"].Position++;
はCPPでどう書くの?
0665デフォルトの名無しさん
NGNGそうすと、C#囲い込み戦略byM$が破綻するから、出来ない仕掛け。
0666デフォルトの名無しさん
NGNGぜんぜん論理的じゃない。
0667デフォルトの名無しさん
NGNGMSDN に書いてあるじゃねぇか
BindingContext->get_Item( ds, "Customers" )->Position = groupBox1->BindingContext->get_Item( ds, "Customers" )->Position + 1
>665
え? 自作すればいいだろ、これぐらい
ファイルの対応表から、マネージド・ラッパのクラス吐いて、インターフェイスの実装再配置を
使って、アンマネージドなクラスにマッピングすればいいんだと思うが
もしかして、それよりもずっと高度な話を言ってる?
0668デフォルトの名無しさん
NGNGやれることに違いは無いのかな?
0669デフォルトの名無しさん
NGNG言語って、そういうものだろ?
0670デフォルトの名無しさん
NGNGまあそうですけどね。ただ、VJ++とCOMのシームレスな連携と
C++とCOMのあのメンドクささを、ただの記述の違いというには
個人的には違和感を感じます。あれぐらいの違いがあるのかなと。
0671デフォルトの名無しさん
NGNGC++/CLI の最大の焦点は、マネージドとアンマネージドの2層化
MC++ ではCILヒープとヒップの層の分離ができていないために、総てが一緒くたに
new していた。だから、逆に何を削除するか、何をガベージに任せればいいのか
わからなくなっていた
MC++ はその試行錯誤の段階の言語といえる。管理を明確にし、型を分離し、配置位置を
ちゃんと意識しながらコーディングできるようにしたのが C++/CLI
そして、同時に標準 C++ の純粋性を保持しようとしている。また、継承関係でもマネージド
・非マネージド間での相互参照を許可する(予定。笑)設計になってる
これらを考えると、内部的にはかなり違っている。追加された表記は特にオブジェクトの
配置位置を明確にすることと、さりげに、C++ の抽象化への不満を解消するための
キーワードが多い
こんな感じで良い? まぁ、口で説明受けるより組んでみた方が良い
漏れの意見はちょっとヽ(´ー`)ノマンセー意見が過ぎると思う
ECMA 標準化 C++/CLI ドラフト
http://msdn.microsoft.com/visualc/homepageheadlines/ecma/default.aspx
0672デフォルトの名無しさん
NGNG自作のアイコンを作成してFormに適用しました。タスクバーにもアイコンが表示されています。
ところがXPにはタスクバーにアイコンが増えるとアイコンをまとめる機能があり、
これが働くとデフォルトのアイコンに戻ってしまいます。
たぶんフォームではなくアプリのアイコンを表示しているのだと思います。
アプリケーションに自作のアイコンを適用するにはどうすればよいのでしょうか?
C#ではプロジェクトのプロパティにビルドという項目があってそこで指定できます。
しかしMC++にはこれがありません。app.icoを自作のアイコンで上書きしたところ、
app.rcの中も自作のアイコンに置き換わりましたが、上記の不具合はなおりませんでした。
0673672
NGNGapp.icoを上書きすればよかったのですね…。
debugビルドでは反映されないので混乱してしまいました。
0674デフォルトの名無しさん
NGNGが
BindingContext->get_Item( ds, "Customers" )->Position = groupBox1->BindingContext->get_Item( ds, "Customers" )->Position + 1
に化けるのか。
なんかどこかで見たような....
そうそう。C++Builder で Delphi のクラスを使うときも、こんな感じで記述が増えた。
同じことをやっているんだね...
0675デフォルトの名無しさん
NGNGただ単に、現状の C++/CLI では、インデックス・プロパティをサポートできていないから
こうなってるだけなんでは?
インデックス・プロパティに対応したら、
BindingContext[ds, L"Customers"]->Position = BindingContext[ds, L"Customers"]->Position + 1;
になるでしょう。もっとも、+や++をわざわざオーバーロードする気がなさそうなんで
あまりかわんないけど
0676デフォルトの名無しさん
NGNGBindingContext->get_Item( ds, "Customers" )->Position++;
こんなにすっきり。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGクラス変数はGCポインタをもてないので。
0679デフォルトの名無しさん
NGNG使う方法教えてくれ。これなしでC++のプログラムをせいと
いうわけじゃなかろ?
0680デフォルトの名無しさん
NGNGSingleton クラスを一つ作って、gcroot でメンバを持たせたら?
>679
C++/CLI が無事完成するのを待て
ふつーのSTLや標準C++ライブラリしか使わないなら、マネージド拡張なしで作れば
いいんでない?
#pragma unmanaged 使ってさ
漏れ、boostをそれで使ってるよ
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGいいと思われ
このペースじゃ2005 Mid のWhidbeyリリースまでに1000逝かんでしょ
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNGDictionary<String ^, data ^> ^dic = gcnew Dictionary<String ^, data ^>;
で作ったデータで、
String ^keyword = ...
dic->ContainsKey(keyword)
としたとき、データとして含まれているはずなのに引っかからないことがある
(´-`).。oO(なんでだろう?)
0685デフォルトの名無しさん
NGNG0686age
NGNGMicrosoft Visual C++ .Net 2003: Kick Start
http://www.amazon.co.jp/exec/obidos/ASIN/0672326000
を読むと何か参考になるかも。
0687wonapi
NGNGサンプル プログラムで動作を確認できる。
詳しくは、下の「WonAPI MRIMG32 トップページ」で最新情報をご確認を。
WonAPI MRIMG32 トップページ
http://f59.aaa.livedoor.jp/~wonapi/mrimg32/index.html
0688デフォルトの名無しさん
NGNG0689デフォルトの名無しさん
NGNG__gcの無いクラスからコールバックをするにはどうしたらいいのでしょうか?
0690デフォルトの名無しさん
NGNG・__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レスありがとーー!
試してみます。報告は後ほど
0692デフォルトの名無しさん
NGNGありがとうございました。
解決しそうです。
ちなみに何かいいMC++の書籍ありますか?
0693デフォルトの名無しさん
NGNGこんなの使ってる奴いるのか?
正気か?
0694デフォルトの名無しさん
NGNG使わざるえない時もあるってもんさヽ( `Д´)ノ
0695デフォルトの名無しさん
NGNG俺はMSDNだけで済ませてる。
あとは過去ログ参照
>>693
俺だってC#とか使いてぇよ…orz
まぁ、デフォのC++よりは幾分マシ
0696デフォルトの名無しさん
NGNGpublic:
__property ????? get_AddressList() { return aaa; }
__property void set_AddressList(????? value) { aaa = value; }
AAAクラスを配列で持ちたいので
こんな感じでプロパティを宣言したいのですが
うまくいきません。?????の所をどうしたらいいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています