- 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
- 428 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 23:10:34.52 ]
- コンストラクタの引数で渡すかプロパティ定義して渡す
つかそれだとC#もC++もさっぱりだよね? ならまだ遅くないから今すぐC#に乗り換えること。
- 429 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 20:42:15.74 ]
- FindWindow で探すとか、EnumWindow でタイトルを調べるとか?
- 430 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:12:34.82 ]
- Showする前に渡せば良い
- 431 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:53:59.80 ]
- 同じアプリ内でしかも.NETのフォームでFindWindow/EnumWindowとかアホか
- 432 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 00:53:02.53 ]
- オブジェクトとメンバ関数名を与えられたときに、その関数を呼び出すことはリフレクションを介して簡単にできますが、
指定された名前のグローバル関数を呼び出すことは可能ですか?
- 433 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 01:19:51.91 ]
- .NETでグローバル関数なんて使うもんじゃない
クラスの静的メンバにする
- 434 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 01:37:36.37 ]
- ですよねー。
- 435 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 14:05:35.23 ]
- グローバル関数なんて無かったんや!
- 436 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 22:13:47.85 ]
- 自作したグローバル関数を書くのはどこが一番よろしいですか?
プロジェクト全体でつかうような関数です。 stdafx.hに書いたら error LNK2005: "int __clrcall testfunc(void)" (?testfunc@@$$FYMHXZ) は既に stdafx.obj で定義されています。 ってエラーが出るのですが( ;∀;)
- 437 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 23:10:37.60 ]
- そらそうだろ
C++/CLIというか、C++の基本から勉強し直してこい
- 438 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 06:58:01.68 ]
- インクルードガード
- 439 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 07:29:07.57 ]
- 関数にstaticかinlineつけて内部結合にするがよろし
- 440 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 15:36:45.42 ]
- ガードしても意味無いだろ。
別々のソースでインクルードされてコンパイルして、 それらをリンクしたら同じ名前の関数が複数出来上がってるわけだし。 と、ついでに質問者に説明してみる
- 441 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 18:59:29.54 ]
- >>440
スマヌ
- 442 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 18:04:16.59 ]
- あるサイトを参考にUnicodeからshift_jisに代えようとしてるんですが以下のコードで
cli::array<unsigned char^>^ ToShiftJis(System::String ^ unicodeStrings) { System::Text::Encoding^ unicode = System::Text::Encoding::GetEncoding(1200); cli::array<unsigned char>^ unicodeByte = unicode->GetBytes(unicodeStrings); System::Text::Encoding^ s_jis = System::Text::Encoding::GetEncoding(0); cli::array<unsigned char>^ s_jisByte = System::Text::Encoding::Convert(unicode,s_jis,unicodeByte); cli::array<unsigned char^>^ s_jisChars = gcnew cli::array<unsigned char^>(s_jis->GetCharCount(s_jisByte,0,s_jisByte->Length)); s_jis->GetChars(s_jisByte,0,s_jisByte->Length,s_jisChars,0); return s_jisChars; } をビルドすると error C2664: 'int System::Text::Encoding::GetChars(cli::array<Type> ^,int,int,cli::array<wchar_t,dimension> ^,int)' : 4 番目の引数を 'cli::array<Type> ^' から 'cli::array<Type,dimension> ^' に変換できません。 とエラーが出るのですが、どうすればよいのでしょう どなたかご教示ください。
- 443 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:18:25.11 ]
- MFC の CString 使ったら?
- 444 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 04:07:52.11 ]
- Encoding.GetChars()ってChar[]とるんじゃないのか?
関係ない型をボックス化して何がしたいの? というか、Encoding.Convert()の時点で既にSJISになっているし
- 445 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 13:58:16.46 ]
- Hoge hoge[x];
の要素数はsizeof(hoge)/sizeof(hoge[0])で取得できますが Hoge *hoge=new Hoge[x]; の要素数はどうやって取得すればいいですか?
- 446 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:05:42.47 ]
- >>442
unsigned charに ^ は要らないと思うが
- 447 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 20:58:34.89 ]
- >>445
ネイティブ配列のサイズは自分で変数や定数で覚えとくのが基本 というかC++/CLI関係ないだろ
- 448 名前:デフォルトの名無しさん [2012/01/13(金) 18:39:32.59 ]
- System::Stringからchar*に変換する関数を書きました。
半角256文字以上のテキストを投げると、255文字+\0でめられてしまいます。 下記をどのように修正すればいいでしょうか? #include <msclr/marshal.h> inline char* toPtChar(const String^ Text) { String^ temp = (String^)Text; msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context(); return (char*)(context->marshal_as<const char*>(temp)); }
- 449 名前:448 mailto:sage [2012/01/13(金) 18:45:03.89 ]
- >半角256文字以上のテキストを投げると、255文字+\0でめられてしまいます。
半角256文字以上の文字列を投げると、255文字+\0で丸められてしまいます。 2000文字程度変換できれば良いのですが、 の間違いです。すみません。
- 450 名前:448 mailto:sage [2012/01/13(金) 19:43:34.29 ]
- 関数を以下のように書き換えてSystem::String→char*しても、
やはり256文字以上は消えてしまいます。 関数ではなく、何か他に原因があるんでしょうか? #include <msclr/marshal.h> using namespace msclr::interop; using namespace System::Runtime::InteropServices; char* toPtChar(const String^ Text) { String^ foo = (String^)Text; IntPtr ptr = Marshal::StringToHGlobalAnsi(foo); return (char*)ptr.ToPointer(); } is.gd/BgDTis
- 451 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:35:10.44 ]
- ttp://www.cetix.de/DotNetNews/Thread61630-String_to_string_-_truncates_at_255.aspx
これか? 試してないけど。
- 452 名前:デフォルトの名無しさん [2012/01/18(水) 17:31:31.29 ]
- ◢▀▅ ▃
▋ ▋ ◢▀ ▀◣ ▌ ▌ ▌ ▌ ▌ ▌ ▌ ▌ ▐ ▌ ▌ ▌ ▐ ▀■ ▌ ◢◤ ▀▃ ◢◤ ◥◣ ▌ ▌ ▐ ● ● ▌ 馬鹿にはコピペできないの。 ▌ ▌ ◥◣ ╳ ◢◤ ◢▀▅▃▂ ▂▂▃▅▀▅ ◢◤ ▀▀▀▀▀ ◥◣ ▐◣▃▌ ▐▃◢▌ ◥◣▃▌ ▐▃◢◤ ▀▅▃ ▂▅▀ ▀■▆▅▅▅▆■█▀ ▐▃▃▃▲▃▃▃◢▍
- 453 名前:デフォルトの名無しさん [2012/01/18(水) 17:32:09.47 ]
- ◢▀▅ ▃
▋ ▋ ◢▀ ▀◣ ▌ ▌ ▌ ▌ ▌ ▌ ▌ ▌ ▐ ▌ ▌ ▌ ▐ ▀■ ▌ ◢◤ ▀▃ ◢◤ ◥◣ ▌ ▌ ▐ ● ● ▌ 馬鹿にはコピペできないの。 ▌ ▌ ◥◣ ╳ ◢◤ ◢▀▅▃▂ ▂▂▃▅▀▅ ◢◤ ▀▀▀▀▀ ◥◣ ▐◣▃▌ ▐▃◢▌ ◥◣▃▌ ▐▃◢◤ ▀▅▃ ▂▅▀ ▀■▆▅▅▅▆■█▀ ▐▃▃▃▲▃▃▃◢▍
- 454 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 18:05:42.86 ]
- 日本の国民の中には、外国の事情がある程度分かっている人を除けば、
放送内容を信頼している人がまだいることは確かだ。一方で、ネット 住民たちのほぼ全員が、放送番組には政府の意図が色濃く反映されて いることを知っている。自分の国がどういう国かということが、よく 分かるようになってきているのだ。
- 455 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 23:34:30.86 ]
- 失礼します。色々まわっていたのですが此方を勧められたので此方でも質問させて頂きます。
VC++でWindowsフォームのプログラムを組んでいるのですが、 別ファイルでextern宣言したクラス(の配列)をform1.h等で参照したいのですがコンストラクタが上手く働いてくれないのか、宣言の場所が悪いのか ゴミ値ばかりで上手く動作してくれません。 何かヒントもらえませんか?
- 456 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:53:36.13 ]
- ソース貼るか
エラー貼るか 何かヒントもらえませんか?
- 457 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 23:51:21.19 ]
- いきなりcharではなくwchar_tに変換
でWinAPI使ってcharに
- 458 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 11:17:33.74 ]
- >>455
コードも何も書かれてないから憶測でしかないが、newとgc_newを使い分けてないとか、*と^を使い分けてないとか、その辺じゃない? 後は配列が.netのクラスをちゃんと継承してないとか 生のC++とC++/CLIは全くと言って良いほど別言語で、でも生のC++も使えちゃうからC#とC++の合わせ技より罠が多く、バグが多くなり易いよ
- 459 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 11:32:22.34 ]
- publicにしてないとか
- 460 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:35:15.69 ]
- dll が違うとか
- 461 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:29:28.14 ]
- VC++のプロジェクトのwindowsフォームアプリでOpenMPって使えないんですかね?
'/clr:pure' と '/openmp' は同時に指定できません ってエラーが出てるんで、CLIでは使えないのかな?とか思ったりしたんですがどうでしょう
- 462 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:38:46.12 ]
- /clr:pureで使えるわけがないだろネイティブコード入れられないんだから
/clrならどう? っていうかWindowsフォーム使いたいだけだったら終わってるC++/CLIなんてやめて C#でGUI作って重い計算だけC++(/CLIでない)で書いてC#から呼んだほうがいいよ
- 463 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:06:17.85 ]
- >>461 です
/clrならできました。ありがとうございます。 よくわかっていないのですが、/clr:pureにしていたのはネイティブとごっちゃになって 変なことになるのを防ぐためなんですかね?だから/clrとしてもそこらへんを気をつければ 問題ない、ということでいいんでしょうか? C++/CLIは初めてなんで、どう”終わってる”のかわかりませんが、C#はやったことが無いので、 できればこっちでやりたいところなんです。
- 464 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:20:54.26 ]
- 大丈夫だ、C++経験者からしてもC++/CLIの習得よりC#の習得の方が楽だから
- 465 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:21:49.18 ]
- /clr:pureだとアセンブリにネイティブコードが混ざらない。
ネイティブコードを混ぜないC++/CLIなんて存在価値ゼロだから、C++/CLI使うんなら常に/clrでおk。 C#をやれ。いくらC++の経験があろうが関係ない。間違いなくC#の方が早く使えるようになるし 開発効率に天と地ほどの差がある。C++/CLIはMSに完全に見捨てられている技術。
- 466 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:25:20.13 ]
- VS2010ではもうインテリセンスすら付けてくれてないもんね
- 467 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 21:09:13.08 ]
- C#やってみます。
過去のレス見てきたんですけど、ひどい言われようですね あと、あんま書き込み無いのにレスは早くて面白かったです。
- 468 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:13:52.05 ]
- いろいろと屈折した愛があるからなw
- 469 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 02:03:40.75 ]
- 俺はこのスレに張り付いてるけど一応ちょっと待ってからレスしてるわ
- 470 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 07:33:50.86 ]
- 呼び出し規約がよくわからないのですが、関数を宣言した場所で明示しない場合
・引数・返り値の型にマネージ型が含まれる→__clrcall になる ・含まれない→__stdcall になる。実装がマネージドコードにコンパイルされると、double-thunkingになる という理解であっているでしょうか。 また、非マネージ型のメンバ関数においては、 managed-code -> __thiscall stub -> __clrcall のような double-thunking が発生するのでしょうか?
- 471 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 16:17:15.87 ]
- VS11βでもインテリセンス無いかな?
- 472 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:59:01.93 ]
- 今ちょっと打ってみたが効くみたいだよ。
- 473 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 21:11:04.75 ]
- C1001 が出た。
みんな報告してる?
- 474 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 04:07:10.11 ]
- 可能な限りする
- 475 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 11:15:03.77 ]
- やっぱそうだよな。VS11Betaで試してconnect行くわ。
- 476 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 09:53:47.89 ]
- VS11betaでもやっぱりIntellisSense効かなくて
"No additional information available"って言われるんだけど 何が悪いんだろう ButtonとTextBox置いてButtonのイベントハンドラの中で textBox1->とかやってるだけなんだけど 最初のt打っただけで上のエラーが出て ->まで打ってもエラー出たままでメンバも表示されない
- 477 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 20:40:01.46 ]
- homepage3.nifty.com/ishidate/vcpp10_20/vcpp10_20.htm
ここの一番下の図5は図6用の計算式はどの様に記入すれば良いのですか。
- 478 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 10:49:25.88 ]
- function1のとこだろ
どう考えてもC++/CLIでやるべきことじゃないよなこれ 内容は凄いのに…C#にすれば…
- 479 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 11:04:51.87 ]
- おお、派手だなw
.net framework 使いたいだけならC#でいいなーほんとに
- 480 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 12:14:54.13 ]
- eのこと聞いてんのかな?
Math::Exp() にすりゃいいと思うが、、、、
- 481 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 20:55:02.08 ]
- こういう変に優秀な勘違いがいるからC++/CLIに手を出す奴がいなくならないんだよな
C++/CLIの記事や書籍ってC#やVBに比べて妙に良質だったりするし
- 482 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 00:15:02.30 ]
- C/C++では配列の終端の一つ次を指すポインタは有効なポインタだったのですけど、
マネージ配列の終端の一つ次を指す interior_ptr は配列がGCで移動したときに正常に更新されますか?
- 483 名前:482 mailto:sage [2012/03/25(日) 13:00:47.00 ]
- いまさらですが、試してみたところ正常に移動するようでした。
- 484 名前:482 mailto:sage [2012/03/26(月) 18:19:27.80 ]
- (勝手な推測ですが) interior_ptr はハンドルとオフセットのペアで実装されているのではないかと思います。
array<int> ^a; auto pa = &a[3]; // { a, 12 } int *p; interior_ptr<int> ip (p); // { nullptr, p } ところで、長さ 0 の配列 (b) に対して &b[0] は IndexOutOfRangeException なんですね…。困った困った。
- 485 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 21:59:14.05 ]
- 配列でinterior_ptrなんて必要?
君が言ってるように常に配列のハンドルとオフセットをペアにしとけばよくね interior_ptrってクラスのインスタンスフィールド指すのに使うやつでしょ
- 486 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 07:37:57.33 ]
- 既存コードの一部だけマネージに持っていく実験なので。
*& はできても interior_ptr<T>% はできないので、配列 + オフセットの方が便利なのはその通りです。
|

|