- 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
- 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に入力した文字を分割して配列に割り当てる方法がわかりません
- 252 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 22:11:33.08 ]
- C# 文字列 分割 でググれ
C#だぞ。C++/CLIじゃないぞ。
- 253 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 23:46:28.19 ]
- >>249
\uxxxxじゃなくて\UxxxxxxxxでUTF-32使って指定するとか?
- 254 名前:249 mailto:sage [2011/04/29(金) 10:49:09.60 ]
- >>250,253
CLRは内部コードが16bitのユニコードなのでこうなちゃうんですね。 C#はこれでいけるのですけどね;; const string msg = "「叱る」と「\uD842\uDF9Fる」"; とりあえず、これで対応しました。 array<wchar_t>^ cmsg = { L'「', L'叱', L'る', L'」', L'と', L'「', 0xD842, 0xDF9F, L'る', L'」' }; String^ msg = gcnew String(cmsg); サロゲート対応のコードを書いてみました。 ideone.com/rXbuf
- 255 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 11:04:15.35 ]
- string.Concat(
StringInfo.GetTextElementEnumerator(s) .Cast<string>() .Reverse() .ToArray() ) でええやん(めんどくさいからC#)
- 256 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 12:57:21.31 ]
- サロゲートと聞くと松田聖子を思い出す
- 257 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 13:17:08.71 ]
- .GetTextElementEnumeratorの戻値はIEnumerableじゃくて
IEnumertorだから直接Linqにつなげない。
- 258 名前:デフォルトの名無しさん [2011/04/30(土) 13:14:38.20 ]
- 文字をシフトJISに変換する方法
- 259 名前:デフォルトの名無しさん mailto:sage [2011/04/30(土) 13:32:03.61 ]
- 一行で様々な疑問を出させる才能
- 260 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 13:44:13.14 ]
- C++/CLIの具体的な難点ってなんでしょうか?
少し触ってみたところ、GUIも作り易い感じがするしCライブラリも簡単に使えそうだし、 いったいどういう問題があるのかなと気になりました (VC++2008EEなのでintellisenseもとりあえず大丈夫です)
- 261 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 21:00:19.76 ]
- C#やVBと比較して生産性が遥かに劣る
それだけ
- 262 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 21:23:06.33 ]
- >>261
できればもうちょっと具体的にお願いします
- 263 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 21:55:07.50 ]
- ・C++言語ではなくではなくてC++/CLI言語であること、
C++/CLI独特の文法を覚える必要がある。C#との互換性もない。 ・使う人が少ないので情報が少ない ・Intelisenceの不具合が多い(例え2010でも逃れられない) ・中途半端にネイティブなのでCLRとしての最適化も中途半端。
- 264 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 22:05:31.03 ]
- Cのライブラリ使うにしても、DllImportの手間を差し引いてもよっぽどでなきゃC#の方が楽なんだよね
- 265 名前:260 mailto:sage [2011/05/15(日) 19:08:05.61 ]
- どうもありがとうございます
Visual C#を試しに入れてみたところ、 何だこれは…ひょっとしてC++/CLIだけでなくVisual C++自体が手抜き…?と思ってしまいました これだとたしかに生産性に差が出るかもと思うと同時にMSの露骨な贔屓に少し閉口してしまいました まだほんの入口ですしCライブラリについて不安はありますが、とりあえず使ってみようと思います
- 266 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 23:25:23.90 ]
- VC++はネイティブC++の開発環境としては現在最高だろ
言語そのものがインテリセンスやRADに向いてない C++にはC++にしかできないことをやらせるとMSは言ってるので フォームデザイナを使うような用途へのサポートが強化されるようなことは今後も期待できない C++はネイティブ特化、C++/CLIは橋渡し専用
- 267 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 00:10:28.27 ]
- まだVS2010のC++/CLIのインテリセンスないのか
この分だともうずっと出ないだろうな
- 268 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 09:33:24.32 ]
- 2010で外されたってことは、MSは諦めたってことなじゃないの?
- 269 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 10:32:51.80 ]
- いや、次のバージョンでは復活させるって言ってる。
問題は「次」というのがSP2なのかVS2014とかになるのかが分からないこと。
- 270 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 10:37:08.05 ]
- その前にC++/CLI自体が…
今やMSにとってはATLでCOM触るラッパーを書くためだけの言語だからなあ
- 271 名前:デフォルトの名無しさん [2011/05/24(火) 01:29:53.63 ]
- /*********************************/
/* __finallyブロックは何のために */ /*********************************/ try { throw 128; } catch (int num1) { System::Console::WriteLine("catchブロック: num1 == {0}", num1); } __finally { System::Console::WriteLine("__finallyブロックって何の意味があるのか疑問だな"); } System::Console::WriteLine("__finallyブロックがなくても、throwの有無にかかわらずここで実行できるじゃないか。");
- 272 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 21:38:05.21 ]
- だがその処理の呼び出し元でcatchしたかった時はどうする?
C++なら自分で再throwする必要があるが、 finallyを使えばそういうことを考える必要がない。 ついでに言うと、finallyブロックは 例外が起きようとも起きなかろうとも、 breakやreturnで抜けても必ず実行されるので ファイルの閉じ忘れなどを回避する実に有効な手段である。
- 273 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:17:43.72 ]
- スタック割当構文じゃだめなの。
- 274 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 23:31:46.12 ]
- >>273
だいたいそれで間に合うとは思う。 auto_handleやauto_gcrootの助けもあるしな。 まあ、今までのVisual C++にも__finallyあるし、C#にもfinallyあるし、 あえてC++/CLIに__finallyを搭載しない理由もないと言ったところでは?
- 275 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 01:03:44.37 ]
- 使ったオブジェクトのデストラクタ呼ぶだけでいいケースは確かに多いけどそうじゃないときもあるだろ
その場限りのちょっとした後処理のためにもいちいちクラス作るの?
- 276 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 05:07:03.51 ]
- 超初心者です。
教えてほしいのですが、 hoge(int *piyo)は hoge(int^ piyo)と してるのですが hoge(int **piyo)は どのように書き換えれば良いのでしょうか すいませんが教えてください
- 277 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 12:12:03.85 ]
- array<int^>^ piyo とか?
- 278 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:22:59.15 ]
- /* Hashtableのポインターへのポインターがコンパイルエラー */
using namespace System; using namespace Collections; const char *pc1; const int nmax = 4; // const char * の任意の要素数のデータを動的にメモリを割り当てて使う const char **ppc1 = new const char *[nmax]; int n1 = 0; *(ppc1 + n1++) = "higasi"; *(ppc1 + n1++) = "nisi"; *(ppc1 + n1++) = "minami"; *(ppc1 + n1++) = "kita"; for (n1 = 0; n1 < nmax; ++n1) { pc1 = *(ppc1 + n1); Console::WriteLine(gcnew String(pc1)); } // 同様の手段で、Hashtable ^^ にメモリを動的に割り当てて任意の数 // のHashtable ^ を格納しようとするとコンパイルエラー ArrayList ^pArrayList1 = gcnew ArrayList(); for (n1 = 0; n1 < nmax; ++n1) { pArrayList1->Add(gcnew Hashtable()); } Hashtable ^pHashtable1, ^pHashtable2; Hashtable ^^ppHashtable1 = gcnew Hashtable ^[nmax]; // コンパイルエラー ppHashtable1 = gcnew Hashtable ^[nmax]; for (n1 = 0; n1 < nmax; ++n1) { pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]); // ^(ppHashtable1 + n1) = pHashtable1; // コンパイルエラー // pHashtable2 = ^(ppHashtable1 + n1); // コンパイルエラー pHashtable1 = pHashtable2 = nullptr; }
- 279 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:26:26.71 ]
- このコンパイルエラーになる
System::Collections::Hashtable ^^ppHashtable1; って何とかならんかいな。多重ループで毎回dynamic_cast演算子使ってる と効率悪いだろうし。
- 280 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:45:23.45 ]
- delete [] ppc1; を忘れとった。
それと、ppHashtable1 = gcnew Hashtable ^[nmax]; の行も 「// コンパイルエラー」を忘れ取った。
- 281 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 01:02:41.42 ]
- なんていうか、C++ のことは忘れた方が良いよ
- 282 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 03:30:26.71 ]
- /* cli::array を使ってもコンパイルエラーかいな、難しいもんだな */
cli::array<Hashtable^> ^ppHashtable1 = gcnew cli::array<Hashtable ^>[nmax]; IEnumerator ^pIEnumerator1; pArrayList1->GetEnumerator(); while (pIEnumerator1->MoveNext()) { pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]); ^(ppHashtable1 + n1) = pHashtable1; pHashtable2 = ^(ppHashtable1 + n1); pHashtable1 = pHashtable2 = nullptr; } pIEnumerator1 = nullptr;
- 283 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 03:33:53.23 ]
- 間違えた
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]); の行は間違いで正しくは pHashtable1 = dynamic_cast<Hashtable ^>(pIEnumerator1->Current); だった。
- 284 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 04:48:38.33 ]
- using namespace System;
using namespace Collections; typedef Hashtable^ pHashtable; pHashtable pHashtable1 = gcnew Hashtable(); pHashtable pHashtable2 = gcnew Hashtable(); pHashtable pHashtable3 = gcnew Hashtable(); pHashtable *ppHashtable1; ppHashtable1 = &pHashtable1; // 可能 ppHashtable1 = nullptr; // ppHashtable1 = new pHashtable; // コンパイルエラー // delete ppHashtable1; // ppHashtable1 = nullptr; // const int nmax = 3; // ppHashtable1 = new pHashtable[nmax]; // delete [] ppHashtable1; new演算子が使えないならSTLのvectorなら何とかなるんだろうか。 でも、.NET Framework 2.0 SDKをダウンロードしたものでは標準ライブラリの ヘッダーファイルを#includeできないからアンマネージは使えない。
- 285 名前:276 mailto:sage [2011/05/27(金) 05:15:05.02 ]
- 中途半端な質問をしてすいませんでした。
>>277さんレスありがとうございました。 実はDirectXのBaseClassesをCLIで書いてるのですが GetSyncSource( [Out]IReferenceClock** pClock) ; (IReferenceClockはmanagedインターフェイスです) の部分をどう書けば良いかわからないです。 interior_ptrというのを使えと出てきますが、使い方がよくわかりません。 どう書けば良いか、どなたかご教示ください。
- 286 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 05:52:09.46 ]
- 静的配列も作成できないのか。これもエラーになるのか。
typedef System::Collections::Hashtable ^pHashtable; pHashtable pHashtable_hairetu[8]; マネージなクラスというのはどうしようもないな、困ったもんだ。
- 287 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 06:13:49.43 ]
- これもエラーになるのか。
やっぱりArrayListのままで甘んじるしかないようだな。 typedef System::Collections::Hashtable ^pHashtable; pHashtable *pHashtable1 = new pHashtable(); char *pc1 = reinterpret_cast<char *>(&pHashtable1); pc1 = reinterpret_cast<char *>(&pHashtable1); pHashtable pHashtable2 = *(reinterpret_cast<pHashtable *>(pc1)); CLIってぼろいな。
- 288 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 23:37:00.98 ]
- マネージドクラスをネイティブクラスでラップしてから配列に入れるとか・・
C++/CLIは異なる言語が同居する2世代住宅言語だからなぁ。 #include <msclr/auto_gcroot.h> using namespace msclr; using namespace System; ref struct Foo { void Say() { Console::WriteLine("Hello World !"); } }; struct Bar { auto_gcroot<Foo^> foo; Bar() : foo(gcnew Foo()) {} }; int main(array<String^>^ args) { Bar bs[] = { Bar(), Bar(), Bar() }; for (int i=0; i<3; i++) bs[i].foo->Say(); }
- 289 名前:デフォルトの名無しさん mailto:sage [2011/05/28(土) 06:57:48.67 ]
- もうちょっと改良
#include <msclr/auto_gcroot.h> using namespace msclr; using namespace System; ref struct Foo { void Say() { Console::WriteLine("Hello World !"); } Foo() { Console::WriteLine("Foo Created"); } ~Foo() { Console::WriteLine("Foo Deleted"); } }; typedef auto_gcroot<Foo^> foo; int main(array<String^>^ args) { foo ag[] = { gcnew Foo(), gcnew Foo(), gcnew Foo() }; for (int i=0; i<3; i++) ag[i]->Say(); }
- 290 名前:276 mailto:sage [2011/05/28(土) 08:14:55.34 ]
- すいませんが再度質問さしていただきます
C++で class Foo{ --色々なメソッドやメンバ-- } である別のクラスのメソッドで void Piyo(Foo **hoge);というのがあり 渡す値がFoo* fooとして Piyo(&foo);とするとします。 これをCLIで実現するにはどのようにすればよいでしょうか どなたかご教示ください。
- 291 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 00:06:15.74 ]
- 質問の意図が良く分からないけど、こんな感じの回答でいい?
using namespace System; ref class Foo {}; void Piyo(Foo^ %hoge) { hoge = gcnew Foo(); } int main(){ Foo^ f = nullptr; Piyo(f); Console::WriteLine(f); Foo f2; Piyo(%f2); Console::WriteLine(%f2); }
- 292 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 12:26:48.80 ]
- .NET的には単にreturnで返すのが普通
どうしても参照渡しでやりたいなら void Piyo([System::Runtime::InteropServices::OutAttribute]Foo^ %hoge) こう書くのが.NET的には正解 クラスライブラリ作ってるんでなければ好きにすればいいけど
- 293 名前:276 mailto:sage [2011/06/01(水) 06:53:05.38 ]
- ありがとうございました。
たいへん参考になりました。
- 294 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 07:08:44.99 ]
- 教えてほしいんですが。
C,C++なら typedef union { int a; short b; double d; }Union; としたらUnionのサイズはsizeof(double)で Union u = 1;としたら、aに1が入ると思うんですが。 CLIで [StructLayout(LayoutKind::Explicit)] ref struct Union { [FieldOffset(?)]int a; [FieldOffset(?)]short b; [FieldOffset(?)]double d; }; と宣言したとして、?の部分には何の数値を入れればよいのでしょうか。 ヘルプを見ると「フィールドの物理的な位置を示します。」 と書かれているのですが、馬鹿なんでわかりません。 どなたか教えてください。
- 295 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 21:57:49.20 ]
- C++/CLIにおけるジェネリックメソッドとテンプレート関数の違いを説明してくださいお願いします
- 296 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 21:20:40.48 ]
- >>294
全部0 >>>295 テンプレートはただの言葉遊び ジェネリックは実行時に展開される DLLを作る場合、アセンブリのパブリックメンバにテンプレートを使ってはいけない
- 297 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 14:38:11.46 ]
- DirextXXinputのXInputGetState関数実行の格納先構造体
struct CONTROLER_STATE { XINPUT_STATE lastState; XINPUT_STATE state; DWORD dwResult; bool bLockVibration; XINPUT_VIBRATION vibration; }; をC#で受け取れるようにするにはどうすればいいんですか? ラップというのはどういう流れになるんですか?C++/CLIの本2冊読んだんですが解説コードからちょっとでも違うと全くわからないです 今のところの認識は、 structをそのままrefクラスに入れる>エラー大量 structの前にrefをつける>エラー大量 structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む>これなら当然できる ラップするとはどういうことなんでしょうか
- 298 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 15:04:33.10 ]
- 本二冊読んでvalue classが出てこないってありえるのか…?
- 299 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 15:58:05.32 ]
- どういうことですか?structの前にvalueをつけたら混合型はサポートされていませんというエラーがでます
- 300 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 17:21:15.05 ]
- そりゃ、ref や value をつけたら C++/CLI の管理だからな
通常の C++ のポインタとか持ってちゃ、混合型になるだろ
- 301 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 17:47:19.16 ]
- >>297
> structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む もちろんこれ 単純に書くだけなら直接C#でも大して手間の差はない
- 302 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:50:06.15 ]
- まじですか・・・
何かものすごい事を期待していました・・・
- 303 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:05:39.17 ]
- ってC++CLI使わなくても直接C#からXinput呼べるんですか?
どうやるんですか?
- 304 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:19:52.39 ]
- PInvoke で渡す構造体はC#側で用意してあげればいい
- 305 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 20:30:56.92 ]
- ありがとうございます
意味が全く分かりませんがPInvokeを調べてみます
- 306 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 20:31:25.24 ]
- XInputだったらXNA使えよ
- 307 名前:294 mailto:sage [2011/06/05(日) 04:08:13.35 ]
- >>296さん
ありがとうございました。
- 308 名前:294 mailto:sage [2011/06/07(火) 07:00:08.28 ]
- 再度質問さしていただきます
struct Hoge { union { DWORD dwGBitMask; DWORD dwUBitMask; DWORD dwZBitMask; DWORD dwBumpDvBitMask; struct { WORD wFlipMSTypes; WORD wBltMSTypes; } MultiSampleCaps; }; を ref struct Hoge { [StructLayout(LayoutKind::Explicit)] ref struct Union { [FieldOffset(0)]DWORD dwGBitMask; [FieldOffset(0)]DWORD dwUBitMask; [FieldOffset(0)]DWORD dwZBitMask; [FieldOffset(0)]DWORD dwBumpDvBitMask; とまでしたのですが、 struct MultiSampleCaps { WORD wFlipMSTypes; WORD wBltMSTypes; } の部分はどのように書けば良いのでしょうか、すいませんが教えてください。
- 309 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 13:08:48.20 ]
- C++/CLIでわざわざマネージ型をP/Invokeに使う意味がわからん。
しかもよりによってなぜ今時DirectDrawなのか。 [StructLayout(LayoutKind::Sequential)]struct MultiSampleCaps { ここは同じでオフセットも不要 } /*Hogeの中*/[FieldOffset(4)]MultiSampleCaps MultiSampleCaps; .NET関連で調べ物するときのキーワードはC++/CLIじゃなくてC#ね。 情報量1000倍だから。アホらしいと思ったらC#へどうぞ。
- 310 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 20:55:56.86 ]
- VC++6.0のMFCなプログラムとVC++2008 Express Edition の.NETなプログラムで
プロセス間通信したいのですがどうすればいいですか。
- 311 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 22:03:55.29 ]
- WM_COPYDATAとか手軽でいいんじゃないか
- 312 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 22:35:11.37 ]
- もしくは共有メモリ。DDEでも動くぜ。
- 313 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 01:29:30.29 ]
- Graphicsをつかって1ドット書きたいのですが方法在りますか?
g->DarwLineだと2ドット最小?
- 314 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 06:08:56.94 ]
- FillRectangle
- 315 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 11:33:33.87 ]
- g->FillRectangle(Brushes::White, 0, 0, 1, 1);
できた! これからc++/cliするのとc#するのどっちがいいですか? GPGPU & direct Xやるとしたらc++の方向のほうがいい?
- 316 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 11:48:19.12 ]
- C++かC#の2択、C++/CLIは無い
- 317 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 12:42:08.36 ]
- ありがと、c++でいく
- 318 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 13:44:22.22 ]
- GPGPUやDirectXならC++のみじゃね?
C#だとラッパー使うことになるし まぁ、C++/CLIだけは無いけど
- 319 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 10:09:33.25 ]
- C++/CLIを使おうとした初心者を思いとどまらせるスレになってるな
- 320 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 10:20:17.40 ]
- 進む先が地獄であることを知らない奴を追い返してやるのは当然だろう
- 321 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 10:50:11.25 ]
- 何も知らないでVisualC++使ってWindowsアプリを作ろうと思うと、
自動的にC++/CLIになるからなー MSは鬼や
- 322 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 00:13:45.93 ]
- .NET FrameworkとC++を知ってればどうって事無い
- 323 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 00:20:14.62 ]
- 333
- 324 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 06:58:51.76 ]
- C++だけよりは、UI作るのは楽。
- 325 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 14:45:59.69 ]
- C++だとUI作り辛いし、C#だとネイティブじゃないから、
C++/CLIを使えば良いんじゃね?
- 326 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 14:52:10.85 ]
- こうしてC++/CLIを勘違いした犠牲がまたひとり・・・
- 327 名前:325 mailto:sage [2011/06/24(金) 15:04:02.96 ]
- と、思っていた時期が俺にもありましたってだけ
MSは頑張って理想通り完成させてくれよう むしろ諦めたっぽいがw
- 328 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 23:04:13.78 ]
- 正直、むしろ起動速度や処理の即応性とかの GUI こそ C++ でやって、ロジックとかに
.net fw を使うための言語だと思うんだが
- 329 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 11:43:42.77 ]
- C++とC#を使いこなしたうえで両方を使うために
C++/CLIというならいいけど、両者の利点を 生かすためにいきなりこれ、というのは無理w
- 330 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 09:26:00.43 ]
- >>328
起動速度や応答性を気にしないなら、C#で十分ってことだな
- 331 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 10:22:03.55 ]
- いや起動速度はC#と変わらないよ
ネイティブのDLLを読み込む分遅くなることはあっても速くなることはない それからアンマネージコードとマネージコードの境界を越えるオーバーヘッドは馬鹿にならないので 下手するとマネージコードだけの方が速い
- 332 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 10:36:48.76 ]
- さらにC++/CLIの存在価値が下がったw
本当にラッパー専用言語だな
|

|