- 1 名前:./1256645713/662 mailto:sage [2010/03/15(月) 09:41:19 ]
- おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ! このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。 .NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。 前スレッドはこちら くだすれC++/CLI(初心者用) pc8.2ch.net/test/read.cgi/tech/1142144110/l1 dat落ち姉妹スレ C++/CLI part3 pc12.2ch.net/test/read.cgi/tech/1206447234/l1 pc11.2ch.net/test/read.cgi/tech/1142147319/l1 pc8.2ch.net/test/read.cgi/tech/1126450441/l1 managed C++ やろうぜ!! 002 pc8.2ch.net/test/read.cgi/tech/1139043535/l1
- 151 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:54:50 ]
- >>150
え。それは、今では使うのは好ましくないとされているレガシー関数群をいまだにお使いになられているからではないですか?
- 152 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 11:47:30 ]
- CとC++に互換性があるとは言わないだろ
CLIの部分については互換性ゼロなんだから
- 153 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 11:51:41 ]
- >>152
> CとC++に互換性があるとは言わないだろ それは上位互換ありでしょ。完全ではないけれども。
- 154 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 12:50:45 ]
- boostを完璧にコンパイルできないだろとか言い始めるのかと思ったら
斜め上をいく馬鹿だったか
- 155 名前:デフォルトの名無しさん [2011/02/08(火) 22:27:38 ]
- 初心者です。
ストリップメニューを開くと5個ぐらい項があって 3つチェックされているとして、その3という数字を取りたいのですが どうすれば良いでしょうか? 開く部分の変数はStripMenuItem1です。 for(int = 0;i<StripMenuItem1->項目数;i++){if(StripMenuItem1->子項目->checked == true){temp++;}} みたいなのはありますでしょうか?どうすれば良いでしょうか?よろしくおねがいします
- 156 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 22:55:33 ]
- 自前で数えろよ、毎回書くのがいやなら関数にしとけ。
- 157 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 23:02:04 ]
- >>155
StripMenuItem1.Itemsプロパティで子が全て取得できる 言っちゃ悪いけどそういう意味での初心者がC++/CLIなんか使うもんじゃない 先にC#覚えて
- 158 名前:デフォルトの名無しさん [2011/02/08(火) 23:03:11 ]
- >>156
レスありがとうございます 申し訳ありません。理解できません 何か関数があるのでしょうか? 自前で数えるといっても、2個チェックのときは2と自動で取ってこれるようにしたいのです。 そういえば if(項の変数->checked == true){temp++;} を何行も書けばいいだけですね。ありがとうございました!
- 159 名前:デフォルトの名無しさん [2011/02/08(火) 23:03:52 ]
- >>157
ありがとうございました!
- 160 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 23:11:25 ]
- ときどき勘違いした可哀想な子が紛れ込んでくるな
>>21や>>42はまだC++/CLI使ってるんだろうか
- 161 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 00:53:00 ]
- 次スレでは「初心者用」を消して、
> - C++プログラミング > - .NETプログラミング (C#, VB.NET, etc.) > > に不自由する方はお引き取りください とか若干きつめに書いておけばいいじゃね? 何年先になるかは分からんけどw 4,5年ぐらい?ww
- 162 名前:デフォルトの名無しさん [2011/02/09(水) 06:13:09 ]
- WCHAR f[] = aToolStripMenuItem->Text->ToCharArray();
cli::array<Type,dimension> ^' から 'WCHAR []' に変換できません。 ->ToCharArray();でWCHARが帰ると思っていたのですがなぜでしょうか?どうすれば良いですか?
- 163 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 06:31:17 ]
- そのWCHAR[]をどうしたいかによる
- 164 名前:デフォルトの名無しさん [2011/02/09(水) 06:33:29 ]
- >>163
wcscpyしたいです。 というか元々wcscpyの引数に入れるつもりでしたができませんでした。
- 165 名前:デフォルトの名無しさん [2011/02/09(水) 07:06:40 ]
- >>163
ちなみに、第二引数にその->TEXTの文を入れて 別に用意した第一引数のWCHAR[3][]とかに入れたいのです
- 166 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 07:48:58 ]
- >>161
もともとは初心者お断りスレもあったが、話題があまりなくて落ちた >dat落ち姉妹スレ >C++/CLI part3
- 167 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 09:38:59 ]
- このスレでもC++、.NETの初心者は対象外だけどな
- 168 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 11:16:29 ]
- >162
文字列操作はこれがひっかかったぞ ttp://vene.wankuma.com/prog/CppCli_strings.aspx
- 169 名前:デフォルトの名無しさん [2011/02/09(水) 11:18:17 ]
- >>168
サンクス おせーよ
- 170 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 15:36:36 ]
- C++と.NETの両方を極めないとCLIは使いこなせないからな
- 171 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 16:44:50 ]
- Express EditionでもC#プロジェクトと同じソリューションに入れられればいいのになあ
VCのExpress Editionが入門者向けというより達人の縛りプレイ用になってるじゃないか
- 172 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 17:53:40 ]
- CLI使わないという選択肢はないのかw
- 173 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 18:35:17 ]
- そんな選択肢があったらこのスレにいない
- 174 名前:デフォルトの名無しさん mailto:sage [2011/02/13(日) 04:23:39 ]
- >>171
金払え
- 175 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 09:47:29 ]
- ダイアログで値を入力させて、その値を親ウィンドウで処理したい場合に
どうやって値の受け渡しをすればいいの? 親にpublic関数を用意して呼び出すのが簡単なわけだけど この.hファイルに親の.hファイルをインクルードすると子のデザイナが壊れる 子ダイアログで親の形を認識させる手段がない
- 176 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 10:00:22 ]
- 子のプロパティを公開して親からアクセスすればいいんじゃねえの?
- 177 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 16:30:00 ]
- 比較関数を書く形式で、リスト(cliext::list)をクラスのメンバで
ソートするにはどうしたら良いでしょうか? こんな感じじゃないかと思うのですが 「関数呼び出しには引数リストがありません。 メンバへのポインタを作成するために '&Test::Form1::less' を使用してください」 とエラーが出ます 以下コードを簡略化して書いてます //クラスTest ref class Test { public: DateTime date; Test(void){}; }; //比較関数 bool less(Test^ lhs, Test^ rhs) { return lhs->date < rhs->date; } //リストの作成 list<Test^> list_item; Test^ item = gcnew Test(); list_item.push_back(item);//(以下省略 //ソートする list_item.sort(less);
- 178 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 17:09:32 ]
- 試してないけど、static にして Test::less じゃね?
- 179 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 17:41:53 ]
- レスありがとうございます
Form1クラスの上で定義したらできました いまいちよくわからないですが これからじっくり理由を考えて見たいと思います、感謝
- 180 名前:デフォルトの名無しさん mailto:sage [2011/02/20(日) 21:49:54.49 ]
- VC++のスレでこちらの方がふさわしいのではないかと言うことで移ってきました。
VC++2010 Expressでフォームからマウスが外れているときはフォームの透明度を あげる(薄くする)と言うプログラムを組んでいます。フォームのMouseLeaveイベントと、 MouseEnterイベント発生時にOpacityプロパティを変えることで実現を目論んだのです が、ウインドウの外枠(サイズを変えるときにドラッグする部分や、上部のウインドウ名 が書かれている部分)にマウスがあると、MouseLeaveイベントが発生して、薄くなって しまいます。もちろん、ここではたとえ、フォーム外側から移動してきてもMouseEnter イベントは起きません。 フォームから完全にマウスカーソルがそれた時のみ透明度を高めたいのですが、 どういうイベントを用いればよいんでしょうか?
- 181 名前:デフォルトの名無しさん mailto:sage [2011/02/21(月) 01:14:11.85 ]
- で、その質問内容のどこがC++/CLIに関係しているんだ?
- 182 名前:180 mailto:sage [2011/02/21(月) 07:06:34.79 ]
- ってことは、.Net Frameworkのスレ探します。
- 183 名前:180 mailto:sage [2011/02/21(月) 07:08:31.22 ]
- .net Framework関連のスレって見つからないんですが、どこが適切でしょう。
すみません。
- 184 名前:デフォルトの名無しさん mailto:sage [2011/02/21(月) 07:51:25.56 ]
- ふらっとあたりで聞けばいい
- 185 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 23:54:49.36 ]
- ref classのメンバー変数にID2D1SolidColorBrush*のようなものがある
template <class T> inline void SafeRelease(T *ppT) { unsigned long refCount; if (*ppT) { refCount = (*ppT)->Release(); *ppT = NULL; } } にID2D1SolidColorBrush*のポインターを渡すことが出来ないからpin_ptrで渡してたんだが、いい加減書くのがめんどくさくなってきた スマートに処理しようと思い、template <class T> inline void SafeRelease(T *%ppT)というパラメーターの関数を定義したんだが、こいつへの渡し方がわからない 誰か教えてくれまいか
- 186 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 02:13:39.66 ]
- あるプロセスをオープンしようとしてます
読み取り専用で試したが結果は同じ CLIとしてコンパイルしたWindowsアプリからOpenProcessを呼び出すとフル権限で開ける C++としてコンパイルしたコンソールアプリからはOpenProcess読み取り専用でもアクセス拒否される OSはWindows7 64bit 内部のことは分からないですが、OpenProcessは同じ標準process.h内のものを使ってると思う 少なくともソース上ではそういう記述をしてますがコンパイラが何をしてるかまでは定かじゃないです 大きな違いはコンソールアプリであることですが、それが拒否の原因になるんでしょうか?
- 187 名前:デフォルトの名無しさん [2011/02/27(日) 18:39:56.37 ]
- VC2010を使用しています。
テキストボックスに文字が入力され、エンターを押されたら動作する処理を行いたいのですが、 TextChangedイベントに if(TextBox1->Text->EndsWith("\r\n")) では、認識出来ないのですが、どのようにすればよろしいのでしょうか? よろしくお願いします。
- 188 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 19:14:15.81 ]
- フレームワークの話しはスレ違い
- 189 名前:デフォルトの名無しさん [2011/02/27(日) 19:44:49.91 ]
- フレームワークの話はどこですれば良いのでしょうか?
- 190 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 19:48:31.21 ]
- C#の質問にして、ふらっとC#で聞くといい
- 191 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 15:45:27.41 ]
- >185
com::ptr で保持して、リリース処理はそっちで対応しちゃあかんの?
- 192 名前:185 mailto:sage [2011/02/28(月) 18:59:52.28 ]
- >>191
ref classにはcom::ptrはおけない思う
- 193 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 19:01:42.54 ]
- >>192
すまん。 CComPtrと勘違いしてた com:ptrはCLRでも使えるのか
- 194 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 19:28:37.85 ]
- >193
それ用のクラスだぜ あとは .net Framework の System::Runtime::InteropServices::SafeHandle を実装したら?
- 195 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 20:58:29.72 ]
- DirectXのリソースの解放にSafeHandleは使えないんじゃなかったっけ
最近のは知らんけど
- 196 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 23:42:18.77 ]
- >187
KeyPress
- 197 名前:デフォルトの名無しさん mailto:sage [2011/03/01(火) 00:17:52.54 ]
- >195
詳しく
- 198 名前:デフォルトの名無しさん mailto:sage [2011/03/01(火) 01:40:02.26 ]
- Direct3D自体の作成/解放が1スレッドに限定されるのに対し
ファイナライザスレッドでどーのこーのみたいな話だったか 使えないというか使う意味がない、みたいな
- 199 名前:デフォルトの名無しさん [2011/03/10(木) 18:48:24.24 ]
- printfとか普通に書いたとき、
なんでprintfがアンマネージのコードって コンパイラは理解できるの? それらしい印になるようなキーワードを 特に書いてないような気がするのだが?
- 200 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 18:56:54.84 ]
- 内部的には #pragma managed や unmanaged 指定がされてんじゃね?
#include か #using かで切り分けてるんだと思うけど
- 201 名前:デフォルトの名無しさん [2011/03/15(火) 00:19:49.85 ]
- 失礼します。
Form1からForm2を開き、Form2を表示した状態でForm1のテキストボックスにフォーカスを合わせたいのですが、何か良い方法はありますでしょうか? Form2のShownイベントで、Form1->TextBox1->Forcus();を実行してみましたが、Form1が見つかりませんでした。 よろしくお願いします。
- 202 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 14:20:33.94 ]
- 見つかりませんでしたじゃなくて
見つかる様にするんだよ。 作成時にインスタンス渡すとか、間を取り持つ作るとか
- 203 名前:201 [2011/03/23(水) 22:44:49.12 ]
- imagingsolution.blog107.fc2.com/blog-entry-109.html
ここを参考に、Ownerを指定してもダメでした。 と、言うよりサンプル通りに作ってみても 1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2039: 'Form2_Load' : 'Form2Test::Form2' のメンバーではありません。 1> d:\vc2010\test\form2test\form2test\Form2.h(15) : 'Form2Test::Form2' の宣言を確認してください。 1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2065: 'Form2_Load' : 定義されていない識別子です。 (以下略) と、なってしまいました。 Form2.hの宣言 this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 273); this->Name = L"Form2"; this->Text = L"Form2"; this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load); this->ResumeLayout(false); Form2.cppにて #include "Form1.h" using namespace Form2Test; System::Void Form2::Form2_Load(System::Object^ sender, System::EventArgs^ e) { Form1^ PForm; if(this->Owner != nullptr){ PForm = static_cast<Form1^>(this->Owner); } } この記述では間違っているのでしょうか?VC2010を使用してます。 よろしくお願いします。
- 204 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 02:14:35.75 ]
- 本当にForm2はグローバル名前空間なのか?
とりあえずヒントだけ出したけど、C++、.NET、プログラミングの基礎にあたる内容はスレチだから返答は不要 というか、C++/CLIはコンパイル可能なコードすら書けないようなプログラミング初心者が使うものじゃない
- 205 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 04:38:21.64 ]
- VC++2010&CLIで4.0以前(4.0は含まない)のNETを使う方法はありますか?
MSDNには3.5を利用するには2008SP1を入れろとかありましたが NETのバージョンごとに入れるのはさすがに無駄すぎるので。
- 206 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 11:57:27.41 ]
- msdn.microsoft.com/ja-jp/library/ff770576.aspx
プロジェクトファイルをテキストエディタで編集しろということらしい C++/CLIで作った混合アセンブリはCLR2(.NET2.0-3.5)向けにコンパイルすると CLR4では動作しなくなるので注意 インテリセンスも削られてるのでC++/CLIなら2008で作業するほうがいいよ
- 207 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 20:41:15.80 ]
- >>206
msdn.microsoft.com/ja-jp/library/47w1hdab.aspx こちらのページを読んだところ 2010は4.0だけ、2008SP1なら3.5だけなのかと思ってしまったのですが 2008SP1は2.0〜3.5まで扱えるんですね 2008を入れることにします ありがとうございました
- 208 名前:デフォルトの名無しさん mailto:sage [2011/04/01(金) 22:50:53.88 ]
- 質問です
画面を表示させ、ボタンを押したら表示されている画面をbitmapイメージとして保存(出来れば印刷も)したいのですが、 そういう事は可能なのでしょうか? サンプルソース等探してみたのですが見つからなくて行き詰ってしまいました。
- 209 名前:デフォルトの名無しさん mailto:sage [2011/04/01(金) 22:54:32.68 ]
- C# スクリーンショット でググれ
C#だぞ。C++/CLIじゃないぞ。
- 210 名前:デフォルトの名無しさん mailto:sage [2011/04/01(金) 22:57:17.22 ]
- >>209
なるほど、C#で調べれば良かったんですね。。 自身に[Alt]+[Print Screen]を送れば良かったんですね ありがとうございます
- 211 名前:デフォルトの名無しさん [2011/04/02(土) 12:02:12.18 ]
- フォーム上にメニューバーを追加したいんですが
どういうソース書けばいいんでしょうか?
- 212 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 12:06:00.79 ]
- C# MenuStrip でググれ
C#だぞ。C++/CLIじゃないぞ。
- 213 名前:デフォルトの名無しさん [2011/04/02(土) 12:31:38.06 ]
- サンクス
- 214 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:27:27.97 ]
- 質問です。
テキストファイルから設定を読み取り、動的にリンクを生成し、別プログラムを起動するランチャーを作っています。 動的にリンクは生成できますが、イベントハンドラに仕込むコールバック関数を動的には生成できないため、 1つのコールバック関数を呼び出しそのなかで起動するプログラムを判断せざるを得ないと考えました。 gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandlerで登録される関数には、 呼び出し元のリンクが引数に渡されるので、cliext::mapで事前に、リンクとコマンドラインの組を格納して判断に用いよう と考えました。が、リンクのハンドラ( System::Windows::Forms::Label^ )はoperator <が定義されておらず ソートできないため使用できませんでした。 それではcliext::vectorに、リンクとコマンドラインのcliext::pairを格納しようと思いましたが、どうやらムリみたいです。 実際コンパイルエラーになりました。参考ウェブサイト: ttp://blogs.wankuma.com/episteme/archive/2007/11/21/109646.aspx ttp://d.hatena.ne.jp/crimsonwoods/20071130/1196384990 どうすれば、リンクとコマンドラインの型を管理できるでしょうか。 リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、 コマンドラインをメンバ変数として持たせるというのも考えましたがどうも無理やり過ぎる気がします。 何かよい方法はないでしょうか。
- 215 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:39:23.59 ]
- .NETでSTLは使うな
System.Collections.GenericのDictionary<,>使え というか>>208以降の人はC++/CLIやる前にまずC#やったほうがいい
- 216 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:45:48.60 ]
- >>215
お早い回答ありがとうございます。 > System.Collections.GenericのDictionary<,>使え どのようなものか、調べてみます。 > というか>>208以降の人はC++/CLIやる前にまずC#やったほうがいい C++を既に学習しており、基本C++の文法でいける(と私が思う)C++/CLIのほうが新たにC#を学ぶより よさそうだと考えておりましたが、 今後考えてC#を学ぶことも考えたいと思います。ありがとうございました。
- 217 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:58:52.75 ]
- やったらもう戻ってこないだろう
- 218 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 18:01:20.52 ]
- コントロールのTagプロパティを使う手もあるけどね
C++/CLIはC++とC#を理解して その上でもしも両方同時に必要になったときに橋渡しするために嫌々ちょっとだけ使う言語です
- 219 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 18:38:49.60 ]
- >>218
そんな手もあるのですね。 結局>>214で述べた > リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、 > コマンドラインをメンバ変数として持たせると(略 これで作ってしまいました。今回はこれでいいとして、今後はC#を学んでみたいと思います。 ありがとうございました。
- 220 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 17:02:31.86 ]
- >>214
手元にあるvs2010では問題なく動いた
- 221 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 18:14:41.51 ]
- CLIはすぐデザイナが壊れるし
IDEが自動でインデントをぐちゃぐちゃに破壊してくれるので C++をラップするくらいにしか使わない
- 222 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 19:08:09.39 ]
- VSの次のバージョンではC++/CLIのWinFormsデザイナは削除したほうがいいと思う
>>219のようなかわいそうな人を生むだけで害悪しかない
- 223 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 21:53:39.15 ]
- C++もかわいそう
別に「統合」してくれと頼んだわけでもないのに へんな統合開発環境の下で働かされてる
- 224 名前:デフォルトの名無しさん mailto:sage [2011/04/10(日) 21:32:31.72 ]
- 繰り返しの多い処理をするとメモリオーバーになってしまいます
どのようにメモリを解放するのですか?
- 225 名前:デフォルトの名無しさん mailto:sage [2011/04/10(日) 21:42:17.88 ]
- 再現するソース出して
- 226 名前:デフォルトの名無しさん mailto:sage [2011/04/10(日) 21:49:49.30 ]
- こういうこと?
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
- 227 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 05:33:09.44 ]
- C++/CLIのコードをビルドしたアセンブリにアンマネージコードが
含まれてないかチェックする方法って知ってますか? なぜこういうことを聞くかというとこのクラスライブラリをマネージコードから 使う必要が出てきたためです。
- 228 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 10:25:23.73 ]
- /clr:pure
- 229 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 11:04:57.59 ]
- それで分かればいいよねぇ
- 230 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 11:11:26.93 ]
- 意味がわからん
混在アセンブリはマネージコードから使えるけど セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら まず間違いなく/clr:pureではダメで/clr:safeでないといけない でも/clr:safeなんて世の中にあるC++/CLIのコードのほとんどがコンパイルできないよw
- 231 名前:227 mailto:sage [2011/04/23(土) 09:53:36.44 ]
- >>228-230
レスありがとう > 混在アセンブリはマネージコードから使えるけど > セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら > まず間違いなく/clr:pureではダメで/clr:safeでないといけない 説明不足でした とにかくC++/CLIのコードのすべてのパブリックなクラスとメンバに マネージコードからアクセスできるようにしたいんです アンマネージコードが含まれてるとそれができないんじゃないかと思って質問しました
- 232 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 11:45:11.72 ]
- アンマネージコードは含まれててもいい
というかそのためのC++/CLI
- 233 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 12:23:54.63 ]
- 何を持って出来ないと思ったかがポイントかな。
とりあえず動くコードを張っとこう。 VS2010だとこのままで動くし、 VS2005-2008の場合はmanifestをちょこちょこいじる必要がある。 // cl /LD /O1 /clr test1s.cpp #include <iostream> class baz { public: void say() { std::cout << "Hello BAZ" << std::endl; }}; public ref class Foo { public: void Say() { std::cout << "Hello FOO" << std::endl; baz b; b.say(); }}; ref class Bar { public: void Say() { std::cout << "Hello BAR" << std::endl; baz b; b.say(); }}; // csc /o /r:test1s.dll test1.cs using System; class Program { static void Main() { new Foo().Say(); // new Bar().Say();// internalは呼び出せない。 } }
- 234 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 12:31:41.38 ]
- clrをマネージだけで使うとかかなりマゾい人だな
- 235 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 14:15:04.04 ]
- そんな有り得ないというか無意味な使い方を想定するのは不毛だし
C++/CLIみたら混在しているものと見なせばいいよ
- 236 名前:227 mailto:sage [2011/04/23(土) 18:24:35.15 ]
- >>232-235
レスありがとう アンマネージが含まれてもマネージから呼び出せるということだけど C++/CLIのソースコードで画像処理とかやってて、 例えばビットマップの構造体をnewして先頭からのバイト数でアクセスするとか、 その情報を渡してWin32APIを呼ぶとかしまくってるんだけど、 これってアンマネージにコンパイルされるよね。 こんなメソッドをC#から呼んでまともに動作するんだろうかって心配なんです。
- 237 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 19:13:47.90 ]
- やっぱり、Managed Unmanagedの意味を取り違えてたか。
その程度ならManagedでコンパイルされてるよ。ただしunsafeだけどね。
- 238 名前:227 mailto:sage [2011/04/24(日) 11:33:12.50 ]
- >>237
マネージだけど暗黙的にunsafeとしてコンパイルされるから アンマネージのように構造体やポインタが使えるってことか。 納得した。ありがとう。
- 239 名前:デフォルトの名無しさん [2011/04/24(日) 19:03:40.58 ]
- 文字列を逆順にするプログラムを書こうとした場合、自分で考えると以下のようになりました。
--------------------------- #include <string> string str = "abcde" string new_str; int i; int length = str.size(); for (i=0; i<length; ++i) { new_str[i] = str[length-i-1]; } --------------------------- なにかかカッコ悪い感じがするのですが、 一番スマートな書き方はどのような感じになりますでしょうか? PHPのarray_popみたいのがあったらwhileで回して綺麗にかけると思うのですが、 C++のstringライブラリにありましたでしょうか? あと、C++では i++は++iの方がよいと誰かに教わったのですが、理由を忘れてしまいました。 何故でしたでしょうか・・? ご教示いただけますと幸いです。
- 240 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 19:23:40.94 ]
- スレ違い
- 241 名前:239 [2011/04/24(日) 19:27:37.31 ]
- すみません
- 242 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 19:43:51.75 ]
- このスレ的にはこういう回答になる(笑
// cl /FUSystem.Core.dll /clr:safe test2.cpp using namespace System; using namespace System::Linq; int main(array<String^>^ args) { String^ str = "abcde"; String^ new_str = gcnew String(Enumerable::ToArray(Enumerable::Reverse(str))); Console::WriteLine(new_str); } 拡張メソッドは使えなかったっけ?ちとスマートじゃないな。
- 243 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 20:55:50.28 ]
- WCHAR [32]' から 'System::Object ^' に変換できません
というエラーがでた場合、どういう変換処理をかいたらいいんでしょうか??
- 244 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 21:08:28.84 ]
- System::Object^ v_obj = gcnew System::String(v_wchar);
- 245 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 22:09:06.50 ]
- たぶんこれかな
msclr::interop::marshal_as
- 246 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 22:36:22.37 ]
- >244
ありがとうございました。その逆の変換はどうするんでしょうか?
- 247 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 23:47:43.19 ]
- >>242
今時サロゲートペアすら考えないコーディングは絶滅すべき
- 248 名前:デフォルトの名無しさん mailto:sage [2011/04/25(月) 04:59:47.67 ]
- >>246
msdn.microsoft.com/ja-jp/library/ms235631.aspx
- 249 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 16:00:21.03 ]
- >>247
サロゲートペア対応に挑戦しようと思うのだが、VS2010expressのコンパイラでエラーになる。 なんかスマートな対応方法ないすか? literal String^ str = L"「叱る」と「\uD842\uDF9Fる」"; error C3850: '\uD842': ユニバーサル文字名が無効な文字を指定しています。 error C3850: '\uDF9F': ユニバーサル文字名が無効な文字を指定しています。
- 250 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 21:36:58.89 ]
- >>249
ググると𠮟るのユニコードは「20B9F」となってるけど。
- 251 名前:デフォルトの名無しさん [2011/04/27(水) 21:40:24.11 ]
- textBoxに入力した文字を分割して配列に割り当てる方法がわかりません
|

|