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
577 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 04:34:54.96 ] たぶんやりたいのはこうだと思うんだけど、違うかな。 DWORD WINAPI proc(LPVOID param) { typedef void (*fp_t)(void); fp_t fp = reinterpret_cast<fp_t>(param); for(int i = 0; i < 10; ++i) { ::Sleep(1000); fp(); } return 0; } public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); IntPtr fp = Marshal::GetFunctionPointerForDelegate(gcnew MethodInvoker(this, &CppCli575::Form1::addText)); ::CreateThread(NULL, 8192, proc, static_cast<LPVOID>(fp), 0, NULL); } void addText() { if (textBox1->InvokeRequired) { textBox1->Invoke(gcnew MethodInvoker(this, &CppCli575::Form1::addText)); return; } textBox1->Text += "A"; }
578 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 08:45:11.72 ] >>577 MethodInvoker^はメンバ変数に置いとかないと
579 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 10:12:04.44 ] 日本人は マスコミ電波で動く ロボット人間 日本人は、先進諸国で飛び抜けてマスコミ報道を鵜呑みに 信じやすいことがこの動画で実証されています。 いわばマスコミ報道の「鵜呑度」を国際比較すると、 日本人は、先進国中ダントツに「鵜呑度」が高く70%、 最も低い国民は英国で14%です。 その他の主要欧米諸国(ロシアを含め)は20−35%です。 日本に近い国は、ナイジェリア、中国など、途上国と新興国となります。 別の言い方をすれば、日本人の70%は、 自分の頭で考えず(思考停止)、 テレビ、新聞、週刊誌などのマスコミの情報を鵜呑みにしていることを意味します。 青山は以前からこれを「観客民主主義」と言っています。 観客民主主義は、マスコ ミの情報操作による世論誘導に最も陥りやすく、 独裁にも呼応しやすい特性を持っています。 マスコミ報道「鵜呑度」 日本人70%、英国人14% You Tube www.youtube.com/watch?v=ypPqsWUC6Vo www.asyura2.com/12/senkyo132/msg/578.html
580 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 12:21:37.43 ] >578 たしかにGCされるとだめですね。フォローどうも。
581 名前:575 mailto:sage [2012/08/15(水) 03:56:45.46 ] >> 576-577 ありがとうございます。 実装してみたところ、確かに望みの動作をしました!! なぜ自分のコードが動かないか突き止めるために 教えていただいたコードを変更していますが、別の問題にもつまづきました。。 申し訳ないですがもう少し教えてください。 <当面の問題:うまくコンパイルできない> 関数procを、クラス内のstaticメソッドに変更しようとした(下記)。 #コンパイル時に、未解決のトークン (0A000043) "public: static void (__cdecl* test2ch::Testproc::fp)(void)"とのエラーが発生。 class Testproc { typedef void (*fp_t)(void); static fp_t fp; public: Testproc(LPVOID func) { fp = reinterpret_cast<fp_t>(func); ::CreateThread(NULL, 8192, (LPTHREAD_START_ROUTINE)Testproc::proc1, this, 0, NULL); } DWORD static WINAPI proc1(void) { for (int i = 0; i<10; ++i){ ::Sleep(1000); Testproc::fp(); } return 0; } };
582 名前:575 mailto:sage [2012/08/15(水) 04:00:38.88 ] 連投すみません。 ちなみに、元の問題の原因究明のために今後確認したいことは (staticメソッドでラッパした)インスタンスメソッドとしてproc1()を定義し、 proc1()内ではstaticではない関数ポインタfpを実行するように変更して スレッドを実行して所望の動作(formが変更できる)かどうかを確認 です。
583 名前:デフォルトの名無しさん mailto:sage [2012/08/15(水) 21:02:13.28 ] >>581 C++/CLIじゃなくてただのC++の話だな。 static fp_t fp; これの実体を定義していないだろ?
584 名前:575 mailto:sage [2012/08/15(水) 21:19:41.78 ] >>583 お恥ずかしい限りです・・・ ご指摘ありがとうございました。 581の問題は解決しました。
585 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 17:07:44.86 ] コンパイルが通りません 教えて下さい ref class Test { bool& Bl; Test(bool& bl) { Bl = bl; } };
586 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 17:11:57.85 ] Test(bool& bl):Bl(bl){ }
587 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 17:30:32.24 ] >>586 コンパイルが通りました ありがとうございました
588 名前:デフォルトの名無しさん [2012/10/25(木) 19:29:47.52 ] 画面周りだけCLI使ってそこから呼び出すのはPUREなC++にしている
589 名前:デフォルトの名無しさん mailto:sage [2012/10/25(木) 23:09:06.37 ] 最初はそういう使い方してたけど 最近はp/invokeがあるからC#で別段問題ない
590 名前:デフォルトの名無しさん mailto:sage [2012/10/29(月) 12:21:58.58 ] 最初から/CXの構想で作れなかったのかねえ
591 名前:デフォルトの名無しさん mailto:sage [2012/10/29(月) 15:20:01.15 ] >>588 →画面をC#にしたら簡単すぎワロタ→内部もC#にしても速度変わんなかった→もうC#だけでいいや
592 名前:デフォルトの名無しさん [2012/10/29(月) 22:32:04.19 ] 既存のC++のライブラリがある場合はC#から呼び出しまくると速度ゲロ重
593 名前:デフォルトの名無しさん mailto:sage [2012/10/30(火) 00:03:22.69 ] C++/CLIから呼んでもC#から呼んでも速度は変わらんよ C++のライブラリはC#だとラップするのがゲロ面倒だから、その点ではC++/CLIが有利 でも本当に速度を求めるんなら、C++/CLIでもC#でも細かくネイティブコードを呼ばないで 必要なデータをまとめて受け渡しするようにして、 細かいところは全部ネイティブコードで書いてしまうのがいい
594 名前:デフォルトの名無しさん mailto:sage [2012/10/30(火) 00:11:42.83 ] >C++/CLIから呼んでもC#から呼んでも速度は変わらんよ C++ InteropはP/Invokeより高速だよ msdn.microsoft.com/ja-jp/library/ky8kkddw%28VS.80%29.aspx 他のところは同意。まとまった単位でネイティブに切り出さないと高速化の恩恵は薄い。下手するとC#より遅くなる。
595 名前:デフォルトの名無しさん mailto:sage [2012/10/30(火) 00:28:06.09 ] 変なマーシャリングしないようにすればC#のDllImportでもそんなに遅くはならないよ アプリに即した形でまとめてネイティブコードで処理、を突き詰めると 結局C++(not CLI)とC#でいいんだよなあ
596 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 01:02:26.73 ] C++/CLIはビルドが遅いから糞
597 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 04:22:13.18 ] 必要に迫られて仕方なく使うもんですし
598 名前:デフォルトの名無しさん [2012/10/31(水) 20:11:20.60 ] マネージドからアンマネージドの処理を制御するのはいいんだけど アンマネージドからマネージドに通知したい時どうしようか悩む
599 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 21:21:47.37 ] gcrootで余裕 C#とDllImportだと参照管理がかなり面倒
600 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 07:39:47.26 ] C++/CXもここでいいの? βでもあったし環境依存みたいだが、VS2012 for Windows8で ターゲットwin32の時に出るコンパイルエラー対策を自分用にメモっとく インクルードディレクトリに追加 ;$(WindowsSDK_IncludePath); ライブラリディレクトリに追加 ;$(WindowsSDK_LibraryPath_X86);
601 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 09:24:06.16 ] >C++/CXもここでいいの? 全然別ものなので違います
602 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 10:02:20.29 ] /CXも/CLIと同様に、GUI作るのに使おうとする勘違い君がたくさん出てくるんだろうな このスレに溢れるC++/CLIに対するネガティブな意見はほとんど/CXにも当てはまる
603 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 12:16:56.17 ] そう? ストア用アプリ開発をC++でやりたいって人に 思い留まらせるような要素は、C++/CXの環境には無いと思うけど
604 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 13:09:28.96 ] 説明するだけ無駄な気はするけど、 WinMDのおかげでDllImportの手間が消えて、呼び出しコストが減って、C++製のネイティブコードを対象にしたリフレクションすら使えるようになった。 これだけ扱いやすくなってくれると高速化のために部分的に利用するってのも十分いける。 C++ AMPとか面白げな物もあるしね。 (C++やC#製のライブラリがJavaScriptからも簡単に呼び出せるので、UIをHTML5とJSで作る人が増えそう) C++を使いこなせるならC#覚えるのは簡単。 C++が使えてもWinRT部分は全部0から覚えなおし GUI作るのに何倍も時間がかかるわりには、同じライブラリ使っているため体感速度に差がない。 それならC#覚えて、重い処理のとこだけC++でやればいい。(HTML5+JSでもいいけど) この辺の事情からC++/CXもC++/CLIと同様にGUIを作るためのものではないと断言する。 これだけ言われてもC++/CXだけでやりたいって言うなら止めないけど、どこまで行っても茨の道だぞ
605 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 16:58:40.48 ] GUIはともかくDirectX使う場合はC++/CXになりそうだがXNAないし
606 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 17:50:29.07 ] >>604 うーん、説明されても無駄だったなあ C++/CXのデメリットの部分が抽象的でピンとこないや WinMDちゅーても既存のネイティブライブラリをC#アプリにマージしようとしたら 結局ラッパークラス書かなきゃならないわけで C++/CLI時代なら、ラッパークラスの作業量が多くなり過ぎるくらいなら インターフェイスの粒度を洗いなおしてもうDllImportにしちまえよってことになるけど C++/CXはそのまま全部に使うっ選択肢もありだとおもうけどね
607 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 18:03:13.80 ] >>605 DirectXはCX拡張使わずに普通のC++で使えるからC++/CX関係ない 設定画面などで少しだけOSネイティブのUIを使いたいときだけほんのちょっとCX使うくらいだろ >>604 考え方が逆だと思う これまでの.NETでは、C#からDllImportでC++を呼び出すのは簡単でもその逆は難しい だからそこを補助するのにC++/CLIは有効 WinRTでは、C++からCXを使ってC#やWinJSで書かれたコンポーネントを呼び出す ということが簡単に行えるから、既存のC++コードを他言語から 呼び出すためのラッパーなんて書かなくていいの 新規に作ったC#やJSのコンポーネントをC++から呼び出せばいい
608 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 18:16:29.83 ] まぁ、どっちの使い方も出来るんだから好きなようにやりゃいいさ
609 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 18:37:36.69 ] むしろC++/CXで呼び出せるデスクトップ用GUIライブラリが欲しかった… C++/CLIはcli上にネイティブ用マーシャリングコードの生成だったけど C++/CXはネイティブ上にCOM/WinRT用マーシャリングコードの生成なんんだよね確か つまりObjCのパk(ry
610 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 18:53:57.94 ] パコパコ
611 名前:デフォルトの名無しさん [2012/11/01(木) 21:43:12.40 ] 問題はMSが途中で放り投げないのはどれかということだよ
612 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 21:57:19.02 ] C++資産の活用という目的があるから/CLIも/CXも無くなることはないだろうけど /CXも/CLIみたいにIDEサポートがなおざりになっていく可能性が高いな /CLIも誕生当初は.NET開発の本命とか言われてたんだし
613 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 22:01:57.86 ] 全部放り投げて新たな言語開発したりしてw
614 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 22:12:33.37 ] MSって実験的な技術でも最初から気合入れてしっかり使えるものを出してくるから厄介なんだよね 新技術出してすぐ放り投げるのはGoogleのほうがよっぽど酷いけど あっちは一目見て「ああこれダメだわ」とわかるからな
615 名前:デフォルトの名無しさん mailto:sage [2012/11/18(日) 18:32:24.63 ] hackとproductの文化的な違いでしょ MSのは、OSSのフリーライダーに仕方なく合わせてきた感がタップリ 過去の因縁からしてMSの製品は使わないといった派閥は今日でも現存する
616 名前:デフォルトの名無しさん mailto:sage [2012/11/23(金) 09:55:41.06 ] 共産主義の理想はOSSのみが実現できる
617 名前:デフォルトの名無しさん mailto:sage [2012/11/23(金) 09:57:46.75 ] OSSと共産主義が関連あるのは本当?FSFじゃなくて?
618 名前: ◆QZaw55cn4c mailto:sage [2012/11/23(金) 13:01:21.23 ] >>617 共産主義の定義による、スターリン以前か以後かどっち?
619 名前:デフォルトの名無しさん [2012/11/23(金) 18:05:53.27 ] C++で作られた.LIBなファイルをC++/CLIから呼び出すには何か注意点ありまか? いま、ビルドはできるけどランタイムの初期化?で落ちてしまいます
620 名前:デフォルトの名無しさん [2012/11/23(金) 23:14:32.20 ] visual studio でc++ やってるけど #include "stdafx.h" #include "stdio.h" #using <System.Dll> #using <System.Data.Dll> #using <System.Xml.Dll> #include <string> using namespace System; using namespace System::Data; using namespace System::Xml; using namespace System::Collections; using namespace System::Data::SqlClient; int main(void) { String^ str; String^ str200; char* comp[100] ; SqlConnection^ Conn = gcnew SqlConnection("Password=apple;User ID=sa;Initial Catalog=master200;Data Source=.\\sql2031"); Conn->Open(); int t; str = "Select * FROM Customers"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,Conn);// SqlDataReader^ dr= sqlCmd->ExecuteReader (); while( dr->Read() ) { str200=dr["CompanyName"]->ToString(); comp[t] = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str200).ToPointer(); こっから 表示ができない。 printf("<TD><input type='text' name='comp' size='30' value='"+comp[t]+"' ></TD>" );
621 名前:デフォルトの名無しさん [2012/11/23(金) 23:16:25.59 ] システム ストリング から苦労して char* 変換できたけど どうやってstringf できるか教えてほしい。
622 名前:デフォルトの名無しさん mailto:sage [2012/11/24(土) 09:22:28.68 ] あっさりできました。 printfやめたるだけだった。 Console::Write("<TD><input type='text' name='comp' size='30' style='background: #fafad2; font-weight: bold ;' value='"+dr["CompanyName"]+"' ></TD>" ); ストリング変換とかキャラ変換とか一切不要でした。
623 名前:デフォルトの名無しさん [2012/11/24(土) 10:22:23.19 ] >>622 死ね
624 名前:デフォルトの名無しさん [2012/11/24(土) 11:28:11.23 ] >>623 なんでそういうこというんですか? 私はあなたが、ガソリンをかぶって、 火をつけて焼身自殺することを望みます。 2ちゃんねる ニュース板+で 焼身自殺した人のニュースみたら、凄い悲しみます。 でも後悔はしないです。
625 名前:デフォルトの名無しさん mailto:sage [2012/11/24(土) 22:00:38.23 ] 内閣府は24日、「外交に関する世論調査」結果を発表した。 中国に「親しみを感じない」と答えた人の割合は2011年の前回調査比9・2ポイント増の80・6%で、 1975年の調査開始以降で最高となった。 韓国に「親しみを感じない」という人も23・7ポイント増の59%と急増し、過去2番目に高い数字となった。 外務省は「尖閣諸島(沖縄県)や竹島(島根県)をめぐる対立が、中国や韓国に対する国民感情の悪化につながった」と分析している。 調査は9月27日〜10月7日にかけ、全国の成人男女3000人を対象に行い、1838人(61・3%)が回答した。 日中関係が「良好だと思わない」との回答は16・5ポイント増の92・8%、 日韓関係が「良好だと思わない」も42・8ポイント増の78・8%に達し、ともに過去最高となった。 中国との関係では、今年9月の尖閣諸島国有化をきっかけに中国各地で反日デモが相次ぎ、 現地の日系企業が焼き打ちや略奪に遭ったことなどが影響したとみられる。 「韓流ブーム」などを通じ近年は良好だった韓国との関係についても、 今年8月の韓国の李明博(イミョンバク)大統領による竹島上陸が「冷や水」を浴びせた格好だ。 www.yomiuri.co.jp/national/news/20121124-OYT1T00811.htm?from=ylist
626 名前:デフォルトの名無しさん mailto:sage [2012/11/25(日) 15:24:56.72 ] C++/CLIのクラスライブラリのプロジェクトが2つ(AとB)あります。 BはAを使うので、Bのプロジェクトの設定でAを参照するようにしています。 Aのビルドは問題なくできますが、Bをビルドすると LNK2020: 未解決のトークン (06000022) <Aにあるクラスの静的メソッド名> と言われます。 何か他に設定が必要でしょうか。教えてください。
627 名前:デフォルトの名無しさん mailto:sage [2012/11/25(日) 15:46:03.82 ] msdn.microsoft.com/ja-jp/library/b57tw91b (v=vs.80).aspx このエラーを解決するには、次のどちらかの操作を実行します。 欠けている関数またはデータを定義します。 欠けている関数またはデータが既に定義されているオブジェクト ファイルあるいはライブラリを取り込みます。
628 名前:デフォルトの名無しさん mailto:sage [2012/11/26(月) 22:01:25.29 ] C++でのオブザーバーパターンの実装例を教えていただけますでしょうか 色々検索したのですが見つかりませんでした
629 名前:デフォルトの名無しさん mailto:sage [2012/11/26(月) 22:05:15.44 ] C++/CLIならそんなもん要らん。言語に組み込まれている。 イベントを使え。
630 名前:デフォルトの名無しさん mailto:sage [2012/11/26(月) 22:10:44.54 ] オブザーバーパターンの実装が分からんとか さすがにC++/CLIを使う資格がないと言わざるを得ない C#かC++からやれ
631 名前:デフォルトの名無しさん mailto:sage [2012/11/26(月) 22:35:48.50 ] obsecureですね わかります
632 名前:デフォルトの名無しさん [2012/11/28(水) 21:17:29.45 ] C++/CLIみたいな方言をやる意味あるのか?
633 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 22:48:53.31 ] しがらみってもんがあってな
634 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 23:56:16.87 ] 2012で..netのウィンドウがある普通のアプリが 作れなくなったのだったか?
635 名前:デフォルトの名無しさん mailto:sage [2012/11/28(水) 23:58:00.13 ] プロジェクトテンプレートが無くなっただけで、WinFormsの項目テンプレートはある MSとしてはフェードアウトさせたいんだろうな
636 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 04:17:32.21 ] C++/CLI勉強中なんですけど、なんでpropertyで2回以上も型を書かせるのはなんで? property System::Collections::Generic::IEnumerable<System::String^>^ Kuso { System::Collections::Generic::IEnumerable<System::String^>^ get(); void set(System::Collections::Generic::IEnumerable<System::String^>^ value); } と書くのは気が狂うんですけど。それぞれの型が異なることってあるの?↓でいいじゃん。 property System::Collections::Generic::IEnumerable<System::String^>^ Kuso { auto get(); void set(auto value); } てかこのスレ2ヶ月間も書き込みがないってどういうことなの。あっ…(察し
637 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 09:57:28.12 ] 便利に普通に使う言語じゃねえからなこれ たかが.NETとネイティブコードを橋渡しする非標準拡張のために 必要以上に言語に手を入れたくなかったんだろ
638 名前:デフォルトの名無しさん [2013/01/27(日) 15:02:59.86 ] printf("%x", data); すると 出力が ffffff93 や ffffff94 などになるdataという名前の変数に対して演算をして 結果をdata2に格納し、 printf("%x", data2); の出力が必ず ffffff90 になるようにしたい (16進数表示した時の下一桁以外は変えず、下一桁だけを必ず0にしたい)のですが、 dataに対してどのような演算を行えばよいでしょうか。
639 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 15:40:23.86 ] >>638 ビット演算でANDする。
640 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:35:27.93 ] >636 typedefという便利な機能があってのう…(しかし名前空間が汚染される)
641 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:58:33.08 ] マクロの出番だよ、マクロの出番
642 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 15:00:14.29 ] C++、C#どっちもできて、C++でGUIを簡単に作りたいっていうのには向いてるよね SDKがC++でもC#どちらでも使えるし、守備範囲が広い ただその為に変数の型変換とかちょっとめんどくさいこと調べないといけないけど
643 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 00:50:44.45 ] 酷い釣りだ…C++に見えてその実全く違う言語じゃねぇか。
644 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 07:09:42.74 ] 顧客が本当に望んでいたもの: デスクトップ向けC++/CX
645 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 08:33:51.13 ] >>643 いや両方とも使える 逆に言うと2つの言語を覚えてる気分になるかもしれん
646 名前:デフォルトの名無しさん [2013/02/20(水) 15:07:47.77 ] //homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.html このHPを見て勉強しているんですが 「グローバルに下記を設定しておく。」の範囲ってどこからどこまででしょうか?
647 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:11:06.36 ] htm じゃないか
648 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:15:14.41 ] >>647 あ、すいませんhtmでした //homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.htmです
649 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:26:26.90 ] staticなんだし適当にやってみりゃよかろう WIDTHとHEIGHTはどこでもいいしarray部分はclass Form1に入れたら とりあえず動いたぞ、面白いなこれw
650 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:33:46.31 ] 何の役に立つのかな
651 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:34:48.07 ] >>649 自分やると動かないんですけど・・・ 何で動かないんだ?
652 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:38:18.30 ] エスパー希望ですねわかります
653 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 15:54:18.59 ] うまくいかないのは実行時なのかコンパイル時なのか うまくいかないと判断したのはどこ?
654 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 17:02:18.31 ] 初心者なので…すいません 実行するとエラー100いくつとかはくんですよね 範囲設定間違ってるのか、何が原因なのかわかんないです。。。
655 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 17:07:17.35 ] 100いくつって数かよ もしそうならコンパイル時だろうし 全角スペース入ったままなんだろ 置換で半角に変えとけ
656 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 17:26:40.56 ] 全角→半角やってもダメみたいです… もし成功した方いたらそのプロジェクトファイルうpしていただけませんか? どなたかお願いしますううう
657 名前:デフォルトの名無しさん mailto:sage [2013/02/20(水) 17:30:18.61 ] ダメみたいとか、自分の状況を隠し続ける人に言えることは何もない
658 名前:デフォルトの名無しさん [2013/04/17(水) 21:57:33.57 ] 等高線グラフを表示させたいのですが、 手段が見つかりません。 3D点(x,y,z)の点(データ)×数万個を線で結びつけて、色付けしたものです。 チャートコントロール(mschar)では等高線をサポートしておらず、実現できません。 System::Windows::Forms::DataVisualization::Charting::Chart どなたかご教授くださいませ! [環境] visual c++ 2008 express vs2012へ更新検討中
659 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 22:02:56.86 ] そういうのは可視化ツール使えよ ParaViewとか
660 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 22:10:53.92 ] Gnuplotでも使えば一瞬 自分でそういうの書くのは手段が目的化してるバカ
661 名前:デフォルトの名無しさん mailto:sage [2013/04/17(水) 23:21:24.73 ] マルチ
662 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 08:15:06.30 ] ちょっと教えてください 自分は独学でC/C++,C#と、まぁC系の勉強をして、ソフトも作れるようにもなりました。 で、就職活動してたんですが、年齢のせいで、資格か業務経験が無いとって感じで、どの企業にもスルーされてきました。 で、今、職業訓練学校でJAVA及びAndroidアプリの作製っていうコースにかよってて さすがに、まぁ、昔、独習JAVAって本でさらっとJAVAを勉強してた部分もあったりでJAVA自体は 勉強するというより(現在は、まだAndroid開発の講義じゃなくてJAVAの講義)今の、講師からも言われたんですが 「〜(自分)さんは、もうJAVAの部分は解かってるだろうから、色々と予習していったら良いですよ。」と言われてる状態です。 さて、ここからが本題ですが、JAVAのソースを見てるとnativeっていう修飾子があって文字通りnativeで作られた メソッドがあったんです。で、JAVAのVMもどうやらCで書かれてるようなのがソース見てわかりました。 そしてCLIですが、C++で組んだアンマナージドなクラスライブラリ等をC#で使う時ってなんかしらの修飾子 ってあるんですか?一度実験でアンマネージドなC++のクラス作ってマネージド(CLI)なクラスの中にほりこんだら [そりゃ無理じゃ、ポインタとして宣言しろ!このカスが!]って嘘だけど、まぁ、こんな感じのエラーがでたんです。 C#側でwin32apiを使いったかったらdllのアトリビュート文を書けば良いんですけど クラスはどうしたら良いんでしょうか。 どなたかこうすれば良いという方法があればご教示ください。
663 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 09:35:33.80 ] 文章にイラン部分が多すぎ。人生相談の板は別にあるぞ 質問は的確に
664 名前:662 [2013/06/01(土) 10:22:22.81 ] >>663 そやね、確かに質問がまとまってなかったは。 要は、普通にC++でクラスを作ります(例えばTestっていうクラス)。 それをC#内で使おうと思っても、無理になります。 で、その仲介役としてCLIを使うとします。 その時にCLIで作ったマネージドなクラス内でTestクラスのインスタンスを生成するには どうしたら良いですか。という質問です。
665 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 11:56:57.18 ] >>664 C++のクラスをCOMコンポーネントにする これで直接C#内で使えるだろ
666 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 12:11:21.91 ] gcnew じゃなくて new してポインタを受けるだけじゃうまくいかなかったのか? ちなみにマネージドとアンマネージドの世界の行ったり来たりはオーバーヘッドすごいから 小さなメソッドをちまちま呼び出すような処理はやめておけ。
667 名前:662 [2013/06/01(土) 12:13:59.07 ] >>665 あ、そっか、たしかにCOMコンポーネントは呼べるね。 でも、C#で以前(何年前かは忘れた)Excel呼び出して C#側で、Excel終了さしたのにプロセス見たら 残ってて、こりゃあかんと思ってExcel呼び出すのは やめたんだけど、今のVSは、そこらへんもちゃんとしょりしてるのかな 俺がもってるVSって2005なんでね
668 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 12:22:18.97 ] >>667 ぼろいPCならアプリ終了しても暫くプロセス残ってるなんて普通にあると思うが
669 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 14:37:10.11 ] COMの場合それとは違って寿命管理の話だな
670 名前:デフォルトの名無しさん mailto:sage [2013/06/01(土) 14:39:16.16 ] >>664 C++/CLIのマネージドクラス内でインスタンスを生成して 「フィールドに保持したい」ということでいいのか フィールドをポインタにしてnewして持てばいい
671 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 00:02:02.93 ] こんなかんじかな、Disposableにしてるから deleteのタイミングが重要なときはDisposeすればよい ref class M2 { N1 *n; public: M2() { n = new N1; } ~M2() { delete n; } !M2() { delete n; } };
672 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 10:25:59.95 ] CLI用スマポを作る
673 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 12:55:57.74 ] >>667 多少スレ違いだけど、それの解決方法はほぼ確立してるんだ。 結局のところ外部プロセスサーバーが終了する前に Execl.Appicationを何度も生成からそうなるわけで、 はじめからExecl.Appicationをひとつだけ生成しておくか、 WeakReferenceにExecl.Appicationの参照をもって、 参照が消えてれば生成するというロジックにすれば万事解決する。 連続して使うときはExcelのインスタンスが毎回立ち上がらずに パフォーマンスがいい。
674 名前:デフォルトの名無しさん [2013/06/02(日) 13:08:52.90 ] そうだね
675 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 14:57:18.85 ] >>667 似たような経験があるけど、そのときは、単に参照を破棄してもGCされるまでは オブジェクトが解放されないからCOMサーバーに伝わらんだけだった。 そういうことじゃなくて?
676 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 15:17:26.36 ] 俺も経験ある GCされるまで開放されないんだよねあれ
677 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 19:34:42.29 ] 馬鹿には無理
678 名前:デフォルトの名無しさん mailto:sage [2013/06/02(日) 21:35:27.92 ] ReleaseComObjectは現実的な対処法ではないだろう。 ある程度の規模のコードで、例外時も含めて漏れなく書くとなると コード量が膨らみすぎる。
679 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 19:39:26.55 ] .Net Framework 2.0のUdpClientクラスって、recvfromに該当するものってないのかな? 相手のIPアドレスが知りたいんだけども。 同じポートに複数のスレッドがブロードキャストしてて、片側のパケットだけを対象にしたい のよね。
680 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 22:44:18.60 ] Connectすればいいよ
681 名前:679 mailto:sage [2013/06/18(火) 12:48:05.81 ] 自己解決した。 ひとまず、EndRecieveの引数にIPEndPoint仕掛けてやればいいっぽ。 そしたらStringで判定できる。
682 名前:デフォルトの名無しさん mailto:sage [2013/06/18(火) 13:06:09.51 ] >>679 recvfrom の仕様は分からないけど、送信元のアドレスは UdpClient.Receive の引数で取れるよ。 非同期なら UdpClient.EndReceive の第2引数。 見当違いだったらごめん。
683 名前:682 mailto:sage [2013/06/18(火) 13:07:11.20 ] リロード忘れたorz
684 名前:679 mailto:sage [2013/06/18(火) 15:35:49.41 ] >>682 うん、後者でやることにしたんだわ
685 名前:デフォルトの名無しさん mailto:sage [2013/06/18(火) 15:44:15.55 ] リロード忘れたの意味がわからない人か
686 名前:デフォルトの名無しさん mailto:sage [2013/06/18(火) 16:31:15.38 ] わかってるから優しくフォローしたように見えるけど。 世の中難しいね!
687 名前:デフォルトの名無しさん [2013/07/03(水) NY:AN:NY.AN ] 配列初期化時に値も設定したのですが、gcnew array<int>(3){1,2,3}; って書かないとコンパイラさんにはじかれます。 gcnew array<int>(){1,2,3}; みたいな、配列サイズを指定しない初期化方法は無いでしょうか。
688 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) NY:AN:NY.AN ] ()書かない
689 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) NY:AN:NY.AN ] 本当だ!!<>のあとに{}を書くっていう発想がなかったです。 ありがとうございました。
690 名前:デフォルトの名無しさん mailto:sage [2013/07/15(月) NY:AN:NY.AN ] C++/CLIで使えるロギングライブラリってどういうのがあるんでしょう? .netで用意されているのか、あるいはlog4cppなんかのC++用の ライブラリを使ったりしているんでしょうか。
691 名前:デフォルトの名無しさん mailto:sage [2013/07/15(月) NY:AN:NY.AN ] log4netとか
692 名前:デフォルトの名無しさん mailto:sage [2013/07/15(月) NY:AN:NY.AN ] なるほど、見落としていました。 log4netは名前を見たことはあったんですが、「C#で使うもの」と 刷り込まれて、すっかり頭から抜けていました。
693 名前:デフォルトの名無しさん [2013/07/17(水) NY:AN:NY.AN ] listBox1->Items->Add("A"); これがOKで std::string a = "A"; listBox1->Items->Add(a.c_str()); これだと'const char *' から 'System::Object ^' に変換できないって出るんだけどどういうこと? 最近CLIさわりはじめたんだけどわからん・・・
694 名前:デフォルトの名無しさん mailto:sage [2013/07/17(水) NY:AN:NY.AN ] リテラルの文字列は文脈によってString^として扱えるってだけ char*やwchar_t*とString^は別物 char*からならgcnew Stringしたりとか
695 名前:デフォルトの名無しさん mailto:sage [2013/07/18(木) NY:AN:NY.AN ] >>694 とんくす
696 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] >>679 これ自分も試してるんだがうまくいかん。 EndReceivedの第二引数の中みても"255.255.255.255"で見分けがつかない。 後でコード載せますん。
697 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] コードっす(1/2)。"192.168.3.128"からのUDPブロードキャストのみを対象にしたいっす。 -------- #pragma endregion private: System::Void btnUdpRecv_Click(System::Object^ sender, System::EventArgs^ e) { String^ FilterIPAddress = L"255.255.255.255"; // Receive a message and write it to the console. int portID = 3000; IPEndPoint^ ipep = gcnew IPEndPoint(IPAddress::Any, portID); UdpClient^ udpcli = gcnew UdpClient(ipep); UdpState^ udpst = gcnew UdpState(); udpst->e = ipep; udpst->u = udpcli; udpst->u->Connect(FilterIPAddress, portID); this->btnUdpRecv->Enabled = false; Console::WriteLine("listening to RT"); udpcli->BeginReceive(gcnew AsyncCallback(this, &UDP_RECVTEST::Form1::ReceiveCallback), udpst); // Do some work while we wait for a Packet. For this example, // we'll just sleep while (!messageReceived) { System::Threading::Thread::Sleep(100); } this->btnUdpRecv->Enabled = true; }
698 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] 続きっす(2/2)。 -------- //Call back function for the read packet data System::Void UDP_RECVTEST::Form1::ReceiveCallback(IAsyncResult^ ar) { String^ FilterIPAddress = "192.168.3.128"; UdpState^ state = (UdpState^)ar->AsyncState; UdpClient^ udpcli = state->u; IPEndPoint^ ipep = state->e; EndPoint^ remoteep = udpcli->Client->RemoteEndPoint; int len = udpcli->Client->EndReceive(ar); String^ recvip = ipep->Address->Broadcast->ToString(); if(ipep->Address->Broadcast->ToString() == FilterIPAddress) { array<unsigned char>^ receiveBytes = udpcli->EndReceive(ar, ipep); //Packet received Console::WriteLine("Received packet length {0}", receiveBytes->Length); messageReceived = true; return; } Console::WriteLine("listening to RT"); udpcli->BeginReceive(gcnew AsyncCallback(this, &UDP_RECVTEST::Form1::ReceiveCallback), state); }
699 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] 以下、簡単に説明。 プロジェクトはWindowsフォームアプリケーションです。フォームにボタンを配置して クリックしたら"btnUdpRecv_Click"がうごくという簡単なもの。 あと、UDPブロードキャスト送信側は、inet_addr("255.255.255.255")で送信しております です。 なにかヒントでもありましたらご教示くださいませ。
700 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] EndReceiveの第二引数かいてないのはいろいろ試してそれでもだめだったんで 一回もと(というか、チャレンジする前)に戻したためです。ご了承くだ。
701 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] なんでEndReceive二回よんでんの?
702 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] そう!すいませんアホなことしてましたアンド紛らわしい変数名つけてたんで違うほうみてた… お騒がせしますた!
703 名前:デフォルトの名無しさん mailto:sage [2013/07/24(水) NY:AN:NY.AN ] スレッドを立てたいんだけど、 HANDLE ThreadHandle = (HANDLE)_beginthreadex(NULL, 0, ReadThread, NULL, 0, NULL); unsigned __stdcall ReadThread(void *p){} こうすると関数呼び出しには引数リストが無いからメンバーへのポインタを作成するために &Namespace::ReadThreadって感じで指定しろって言われたからそうしたら今度は delegate インスタンスを作成する場合以外に&Namespace::ReadThreadのアドレスを指定できないとか言われて八方塞なんだけどどうしたらええの・・・
704 名前:デフォルトの名無しさん mailto:sage [2013/07/24(水) NY:AN:NY.AN ] いっそ、CreateThread
705 名前: ◆QZaw55cn4c mailto:sage [2013/07/24(水) NY:AN:NY.AN ] _biginthread ってなんで必要なんだ? CreateThread で十分用がたりるのだが? というか cygwin/gcc-3 なんでこれしか選択肢がない
706 名前:デフォルトの名無しさん mailto:sage [2013/07/25(木) NY:AN:NY.AN ] _beginthreadも結局は内部でCreateThreadを呼び出しているのではあるが そのほかにランタイムが使う内部変数の初期化なども行っている よっていきなりCreateThreadを呼び出すと 出所不明のメモリリークに悩まされたりすることになる 逆に言えばMSVCRTを使わないのであればCreateThreadをつかえば良い
707 名前:デフォルトの名無しさん mailto:sage [2013/07/25(木) NY:AN:NY.AN ] テンプレ類は覚えること少なくする目的で簡単にしようという理念からはじまり、 いろいろ隠ぺいすることで逆にめんどくさいものになってるよね
708 名前:デフォルトの名無しさん mailto:sage [2013/07/25(木) NY:AN:NY.AN ] >>703 warning C4441無視してね?
709 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] Managed Threadは使わんの?.NETなんだし
710 名前:デフォルトの名無しさん mailto:sage [2013/08/05(月) NY:AN:NY.AN ] array<String^>^ txts = gcnew array<String^>{"りんご", "ごりら", "らっぱ"}; int index = 0; String^ msg = txts[index ++] + txts[index ++] + txts[index ++]; とやった時にmsg = "りんごりんごりんご"になるのですが msg = "りんごごりららっぱ"となるようなインクリメントの方法はないでしょうか
711 名前:デフォルトの名無しさん mailto:sage [2013/08/05(月) NY:AN:NY.AN ] 3行にわければ? sehermitage.web.fc2.com/program/c_lang.html > インクリメント演算子++とデクリメント演算子--は,変数の値を変化させるが, > その変数が同じ式の中で再び参照された場合,動作は未定義となり値は保証されない
712 名前:デフォルトの名無しさん mailto:sage [2013/08/05(月) NY:AN:NY.AN ] >>711 情報どうもです!式を分けるしかないですね。
713 名前:デフォルトの名無しさん [2013/08/11(日) NY:AN:NY.AN ] 32bitのネイティブのDLLを呼び出す.netのDLLがあります。 それを呼び出す.netのアプリの設定で、共通言語ランタイムサポートを/clr:safeでコンパイルすると、64bitOSで動かなくります。 共通言語ランタイムサポートを/clrにすると動きます。/clr:safeのままで動かすにはどうしたら良いでしょう。
714 名前:デフォルトの名無しさん mailto:sage [2013/08/11(日) NY:AN:NY.AN ] >>713 safeだとanycpu指定で作ったアセンブリとなるので、 64bitのWindowsだと64bitモードで動作する 手元にあるVS2010では適当なコンパイルオプションが見つからないので、 CorFlagsで32bitフラグをONにするとかかな
715 名前:713 mailto:sage [2013/08/16(金) NY:AN:NY.AN ] >>714 corflagsでいけました。ありがとうございます。
716 名前:デフォルトの名無しさん [2013/09/08(日) 19:50:17.03 ] MFCアプリを移行しようと/clrでビルドしたところ、LNK4248が大量に発生しました。 原因は使用しているdllで使う構造体の定義本体がなく事前宣言しかないための ようですが、これは無視しても問題ないものでしょうか? 当然、この構造体のメンバにアクセスすることはなく、これまでは問題ありませんでした。 また、この警告の出力を抑制する方法はないでしょうか?環境はVS2008です。
717 名前:デフォルトの名無しさん mailto:sage [2013/09/09(月) 01:05:58.58 ] 数が少ないなら struct nantoka { }; みたいなのを定義するとか。 あるいは大量にあって全部無視して安全だと分かっているなら link.exe にオプション /ignore:4248 をつけるとか。 (こっちは試したことないので動くかどうかはしらん)
718 名前:デフォルトの名無しさん mailto:sage [2013/09/10(火) 01:04:26.29 ] 前者の方法でうまくいきました。ありがとうございました。
719 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 18:19:50.17 ] PropertyGridで説明つけるとき C#は、 [Description("説明領域に書き込めます。")] VBは、 <Description("説明領域に書き込めます。")> _ とあるのですが CLIではどのように記述すればよろしいのでしょうか?
720 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 18:22:25.98 ] そんなのはMSDN見ろよ C++/CLIは今はまだサンプル表示できる言語に残ってるぜ
721 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 18:34:21.21 ] サンプル見てもCLIのPropertyGridのDescription見つからなかったのです。 で、解決しました。 Formと同じusing namespace書いたら C#と同じ書式でいけました。
722 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 18:35:33.94 ] ComponentModelにおった
723 名前:デフォルトの名無しさん mailto:sage [2013/09/23(月) 12:57:32.04 ] ドッキングウインドウとかできますか?
724 名前:デフォルトの名無しさん mailto:sage [2013/09/27(金) 21:09:38.57 ] MDIとか、できない?
725 名前:デフォルトの名無しさん mailto:sage [2013/09/29(日) 00:32:42.55 ] bulletを使いたいのですが 整列データ型はサポートされてないって言われ 通りません。 BT_MANAGED_CODE定義以外何か必要なのでしょうか? 教えてください
726 名前:デフォルトの名無しさん mailto:sage [2013/09/29(日) 16:15:50.71 ] Imageクラスって各イメージファイル形式のフォーマット知らんでも勝手に保管してくれるんだっけ? たとえば jpeg の 0xFFD9とか
727 名前:デフォルトの名無しさん mailto:sage [2013/09/29(日) 16:21:06.24 ] ちょっと言ってる意味が分からない
728 名前:デフォルトの名無しさん mailto:sage [2013/09/29(日) 17:39:33.10 ] あー、ごめん。 例えばBITMAP形式のファイルを読み込んでSaveメソッドでjpeg指定するだけで変換できるのかと。
729 名前:デフォルトの名無しさん mailto:sage [2013/09/29(日) 17:41:13.27 ] というか、まぁ出来たは出来たんだけどね。 ただ、.Netのバージョンによって挙動が変わるっぽいね。 0xFFFEの部分が無視されちゃったりされなかったり。
730 名前:デフォルトの名無しさん [2013/10/02(水) 18:23:28.32 ] visual studio 2012は、新しい項目の追加で継承されたフォームが 出てこないんですか? 継承されたフォームを作成するにはどうすればいいのか教えてください。
731 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 15:02:58.87 ] for(int i=0;i<Hoge->Split(array<String^>{L"\r\n"},StringSplitOptions::None)->Length;i++){ ... } と array<String^ >^Hoge_Split = Hoge->Split(array<String^>{L"\r\n"},StringSplitOptions::None); for(int i=0;i<Hoge_Split->Length;i++){ ... } と int i=0; for each(String^ Hoge_Line in Hoge->Split(array<String^>{L"\r\n"},StringSplitOptions::None)){ ... i++; } のどれが処理が速いの? 「...」の部分が十分に長く要素の番号を参照することがあるとして
732 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 16:26:14.92 ] 試せよ
733 名前:デフォルトの名無しさん [2013/10/12(土) 16:53:11.84 ] フォームアプリケーションでの質問だけど、 テキストボックス(名前:textBox1とする)を配置すると、 textBox1->Text でString型の文字列がとれるんだけど、これをatoiしたいがためにchar型に変換しようとして、 atoi(textBox1->Text->c_str()); って書くと、「c_strはSystem::Stringのメンバではありません」って表示される。 c_strってメンバじゃないの?
734 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 17:06:19.97 ] じゃないよ System::Stringとstd::stringは別物
735 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 17:12:51.52 ] VBじゃねえんだから大文字小文字の区別はつけよう
736 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 17:26:01.80 ] うおおまじか 紛らわしいな…ありがとう
737 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 23:00:26.48 ] C++/CLIでWPFをやろうとしていますが、XamlReader::Load()で自作クラスのインスタンス化に失敗します。 フレームワークに含まれるSystem.Windows.Applicationなら<Application>でのインスタンス化に成功するが、 その派生クラスMyApp.Appをインスタンス化しようとして<Application x:Class="MyApp.App" >としても、 クラス名を間違えたときと同じように下のような例外が出てしまいます。。 指定されたクラス名 'MyApp.App' は、実際のルート インスタンス型 'System.Windows.Application' と一致しません。 クラスを見つけられていないんだと思いますが、これはどこかで設定する必要があるんでしょうか? プロジェクトの設定は「空のCLRプロジェクト」のサブシステムをWINDOWSにして、WPFに必要な PresentationCore.dllなどの参照を追加した程度です。
738 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 23:10:16.98 ] Applicationを継承しろ っていうか素直にC#を併用しろ時間の無駄だ
739 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 23:18:26.35 ] C#でデザイナ使ったときはXamlってコンパイル時に処理されるからなあ clr-namespaceとか指定してみたら
740 名前:デフォルトの名無しさん mailto:sage [2013/10/13(日) 00:20:33.93 ] <my:App x:Class="MyApp.App" xmlns:my="clr-namespace:MyApp">としてみると 不明な型 '{clr-namespace:MyApp}App' を作成できません。 というエラーになりますね。やっぱり何か認識できていないのかな。
741 名前:デフォルトの名無しさん mailto:sage [2013/10/13(日) 00:25:09.93 ] ApplicationのXAMLいらなくね? 普通にコードからgcnew AppしてRunしてMainWIndowすればいいじゃん アプリケーションリソース使うならリソースディクショナリをLoadXamlすればいいし デザイナがないのにわざわざデザイナ向けの面倒な方法をとる意味がわからん
742 名前:デフォルトの名無しさん mailto:sage [2013/10/13(日) 00:51:09.66 ] App.xamlに限れば省略する手もあるでしょうが、現象としてはMainWindow.xamlも同じなので。 クラスをインスタンス化するという意味においてはApp.xamlもMainWindow.xamlも違いは ありませんので、例としてApp.xamlを挙げたに過ぎません。
743 名前:デフォルトの名無しさん mailto:sage [2013/10/13(日) 08:31:38.34 ] >>733 やりたいなら、Convert::ToInt32(textBo1x->Text) だな
744 名前:デフォルトの名無しさん mailto:sage [2013/10/13(日) 08:32:40.33 ] ちとタイプミスったが許せ
745 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 04:03:56.73 ] C#のfixedとC++/CLIのpin_ptrって同じものですか? C#で配列をfixedして処理するより,C++/CLIにマネージ配列で渡した後,C++/CLI内でpin_ptrして処理する方が速いのでしょうか? 初歩的な質問で申し訳ないです.
746 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 07:13:51.28 ] ネイティブコードに渡さないときはinterior_ptrで書くんじゃない。 パフォーマンスは大差ないかと…。
747 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 07:53:22.46 ] そもそも普通にマネージコードで処理するんならC#で普通にインデックス使って回せば最適化されるから十分速い ヘタにポインタ使った方が遅くなることもある
748 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 12:45:13.44 ] パフォーマンス的には対して変わらない,下手な書き方をすればかえって遅くなるということでしょうか? やりたかったのは,C#からBitmapとint配列を渡して,C++/CLI内でヒストグラムを作るとかそんなところです. C#側からは, MakeBrightnessHistogram(Bitmap^ bmp, array<int>^ histogram) を呼び出して,この関数の内部でFormat32bppRgbのBitmapDataを取得し,histogramをpin_ptrで固定した後, MakeBrightnessHistogram_Unmanaged(int* data, int size, int* p_histogram) を呼び出すというような形になっています.(dataはBitmapData->Scan0をint*にキャストしたもの,sizeはbmpの画素数) ちなみに,MakeBrightnessHistogram_Unmanaged内で,RGBの値をBrightnessに変換する変換テーブル(ネイティブ配列)にアクセスしています. 画像データやヒストグラム,変換テーブルといった配列にアクセスする命令が多いので,C++/CLIを使えば速くなるのかと思ってプログラムしてみたのですが, こういった処理は,わざわざC++/CLIを使わなくても,C#で高速にできるものなのでしょうか? 最初から素直にこれを質問すれば良かったですね...
749 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 13:40:47.67 ] そういうコード書くならCかC++でDLL作って それを呼び出すようにした方が手っ取り早い気がするのよ
750 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 13:53:11.58 ] C#で書いて問題になるほど遅かったら移植すればいいでしょ 実際そんなに変わらないけどな パフォーマンスの心配は9割無駄だからくだらないこと気にしてないでまずは動かせ 先入観でパフォーマンスを考えるほど無意味なことはない
751 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 14:12:32.92 ] とりあえずC#で書いてみて,処理速度がDLLを呼び出す方法と対して変わらないようであれば, DLL使わずにC#だけで書くようにしたいと思います. ありがとうございました.
752 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 19:45:52.63 ] >>748 lockbits()を使うだけでも相当速くなるぞ BitMapキャンバスへの描画メソッドは物凄く遅い homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleBitmapPlus.html tinqwill.blog59.fc2.com/blog-entry-46.html ここら辺とか
753 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:31:16.11 ] BitmapDataと言ってるからLockBitsは使ってるんでしょ
754 名前:デフォルトの名無しさん mailto:sage [2013/11/11(月) 09:48:07.24 ] >748 アルゴリズムをunmanagedで書くなら、たしかにSSE2 intrinsicとか使えば圧倒的なスピードが出る。 でも、それならP/Invokeでいいのでは感がある。
755 名前:デフォルトの名無しさん mailto:sage [2013/11/11(月) 22:42:22.66 ] 環境に合わせて最適なコード吐くんだろ?違うのか?
756 名前:デフォルトの名無しさん mailto:sage [2013/11/18(月) 13:42:22.83 ] byte[,] bmp = new byte[640,480]; とかやってたりしてw
757 名前:デフォルトの名無しさん mailto:sage [2013/11/19(火) 13:06:00.35 ] >>756 それ自体別に何もおかしくないぞ 必要ならポインタでアクセスすることもできる
758 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 11:24:38.95 ] >>757 C#が遅いとか言ってる奴いるけど、C#で多次元配列をこう書くと遅くなるんよ ジャグ配列を使うか一次元配列で処理すれば、C++とほぼ同じ速度で処理出来るが
759 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 22:16:01.02 ] だからポインタでアクセスできると言ってるでしょ ポインタ使えば多次元配列でも1次元配列をforループで回して最適化が効いた時と同程度には速くなるよ
760 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 23:39:11.69 ] あれ?遅いのはジャグ配列じゃなかったか? 最近別言語の案件やってるんで忘れてしまったわ
761 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 23:47:38.45 ] bmp[y][x]をx方向に処理する場合は1次元配列の連続アクセスと同じなので速い y方向だと無茶苦茶効率悪いから多次元配列のほうが有利
762 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 09:39:48.63 ] bmp[x + y * bmp.width] で、ええやん
763 名前:デフォルトの名無しさん mailto:sage [2013/12/03(火) 03:37:15.12 ] スマホで眺めるのによいライブラリリファレンスサイト教えてください
764 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 00:11:16.35 ] 速度が問題になるとこをCLIで書くなよ。
765 名前:デフォルトの名無しさん [2013/12/16(月) 23:15:56.37 ] ある外部staticライブラリをつかうプロジェクトをVS2008で作ったんですが それをデバッグリンクすると実行時にランタイムでヒープが壊れてるとか アサートだします。 出すところは外部ライブラリで static std::map<>; してグローバルにmapを作ってるところです。 clrなしのプロジェクトを作ってやってみると問題ないんですがなにが悪いんでしょう? ランタイムライブラリはどちらも/MDdで外部ライブラリと同じです。
766 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 23:55:38.87 ] STLCLIを使えというヘジたんの思し召し
767 名前:765 mailto:sage [2013/12/17(火) 01:47:56.48 ] stackoverflow.com/questions/4928763/mixed-mode-c-cli-crashing-heap-corruption-in-atexit-static-destructor-regist /ENTRY:mainが悪いみたいだよ 消してWinMainからmainよんだら直った
768 名前:デフォルトの名無しさん mailto:sage [2013/12/17(火) 17:35:03.34 ] OnPaintBackgroundさせないようにするため Panel継承したMyPanelを作り、 今までgcnew Panelされてた部分をMyPanelに置き換えたら、 デザイン編集する画面がエラーになりました。 継承したコントロールをデザインで使う方法か Panelコントロールの再描画を継承しないですむ方法ありますか?
769 名前:デフォルトの名無しさん [2014/01/29(水) 15:03:47.19 ] C++/CLIってUNICODE使うのがデフォ?
770 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 15:11:01.76 ] System::String^はそうだな ネイティブ側は好きなのにしる
771 名前:デフォルトの名無しさん [2014/02/16(日) 08:13:15.62 ] VC6以来のWinアプリの仕事何だけど 最近は.net使えばグラフ表示とか簡単にできるようになったの? それともGDI使うやり方健在?
772 名前:デフォルトの名無しさん mailto:sage [2014/02/16(日) 09:39:35.75 ] 市販のかexcel使ったほうが早いという状況は変わらん
773 名前:デフォルトの名無しさん mailto:sage [2014/02/16(日) 23:57:23.21 ] EXCELに描かせるのが一番金がかからない
774 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 13:02:54.72 ] エクセル最強すぎる。 C++でエクセル出力したい。 CSV無しで
775 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 13:47:00.62 ] POIかNPOIで
776 名前:771 [2014/02/17(月) 18:45:06.84 ] オシロの画面みたいなのを1秒あたり10フレームくらい表示させたいのですが,,,
777 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 10:09:25.99 ] 今どうやってんの? DirectX使ってる?
778 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 13:15:15.29 ] WPFなら秒間60フレーム余裕だよ
779 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 15:44:04.10 ] C#でも余裕だな 3日もあればそれなりの物作れるし
780 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 17:38:23.07 ] 今のPCなら10fpsは全くもって問題無い 俺は初めて自力描画したが、25ms間隔でUSB送信+描画が全く問題無かった
781 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 18:10:01.30 ] C++プロジェクトとC#プロジェクトからなるソリューションを 作る場合は、DllImport を使うのが正統的なやり方ですか?
782 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 18:18:26.53 ] C++/CLIを使うのも別に不当ではないぞ 好きにしろ
783 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 18:19:01.60 ] エスパー呼んでる?
784 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 18:21:31.68 ] でもさ、C++/CLIって今はWindowsフォームアプリ作れなくなったというか、非推奨でしょ? ヒッジョーに残念なんだけど、俺はクソなC++Builder使ってる
785 名前:781 mailto:sage [2014/02/22(土) 19:14:11.22 ] >>782 ,783,784 最近C++始めました。今まで作ったC#の自作ライブラリをC++化しようとしています。 CLRクラスプロジェクトでクラスライブラリを作ってC#アプリから使う場合は、普通に 参照設定して使えましたが、でもそれだと、クラスライブラリの中身がReflectorなどで 見えてしまうので、それで/clr無しでビルドしてDllImportの方法でC#から使えたのですが、 これが正しいやり方かどうか知りたかったのです。要するに、逆コンパイルできない (あるいは難しい)クラスライブラリを作りたいのですが。
786 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 19:25:29.69 ] 難読化しろ
787 名前:781 mailto:sage [2014/02/22(土) 20:01:19.06 ] >>786 それも考えたのですが、C#のDLLを難読化するくらいなら、C++でDLL 作るほうが手間がかからないかなと思ったのですが。 皆さん、こういう用途には、VS2013付属の難読化ソフトで十分ですか?
788 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 21:16:20.23 ] 秘密にしたいところはC++で書くよ
789 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 10:59:05.87 ] ILMergeはC++/CLIでも使えますか?試したら出来ませんでした。
790 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 12:00:23.44 ] mixed moeだとだめかもしれんね。/clr:safeや/clr:pureは試した?
791 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 12:18:42.22 ] > clr:safeや/clr:pure これ使うならC++/CLI使う理由が消えないか? 難読化がC++/CLI使う目的ならなんか違う気がする 業務か趣味かでも違うし
792 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 13:20:04.45 ] 難読化の質問の続きなのか?
793 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 11:45:55.31 ] VS2013に難読化のソフト付属するようになったのか
794 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 14:39:40.34 ] わざわざネイティブコードがちょろっとついてたら、まっさきにそこ覗くけどね まあしっかり考えて。
795 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 15:10:45.06 ] 確かに、覗いてみたくなるな Dependency Walkerに放り込むだけでもそれなりに見えてくるしな
796 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 22:42:23.74 ] 確かにすげー怪しいもんなw むしろ、木を隠すなら森の中じゃないかな。
797 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 00:13:46.26 ] ILが解析しやすいのはディスコンパイルできることよりも、 型名やメソッド名などのメタ情報がそのまま残ってることだから、 その辺改善したほうがましだな。 簡単な難読化ツールのやってることもその程度だし
798 名前:デフォルトの名無しさん mailto:sage [2014/03/08(土) 21:13:21.28 ] >>784 俺は顧客の強い要望でVS2013 expressのVC++でWindows formアプリを作ってる。 非推奨だけど、作ろうと思えば一応作れるのね。
799 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 10:17:51.76 ] C++でのデザイナ機能も一応残してるんだよね っていうか、Expressでも出来るんだ
800 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 20:21:18.79 ] >>799 できますよ
801 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 10:47:47.08 ] ATL/MFCもexpressでやらせてくれたらいいのに あったらあったでそれなりに便利
802 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 10:59:46.32 ] ATL/MFC無しでもCStringくらい標準にしてくれるといいのにね System::Stringからの変換がスマートにできるのに
803 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 11:35:40.31 ] ATL/MFCまで入れちゃったら有償版と変わらないのでは?
804 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 15:16:32.72 ] まあそれ以外にも違いはいろいろあるし
805 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 23:00:52.68 ] ウィザードやリソースエディタなんかがないとまともに開発には使えないだろうけど、 MFCのコードをビルドだけできるようヘッダとライブラリを公開して欲しいとは思う。
806 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 21:18:07.18 ID:KpGSNq9a] C++/CLIとC#を相互運用するとき、IDisposableの扱いについて参考になるWebページがあれば教えてください。
807 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 14:59:59.03 ID:svYczKSB] 初歩的な質問ですみません。 ^ がついた関数と ^ がついていない関数の間でやりとりをしたいのですが、 やりかたが分かりません 例えば時間を再設定するときに、 DateTime^ dth = gcnew DateTime(2014, 3, 20, 0, 0) と DateTime dt = DateTime(2014, 3, 20, 0, 10) を作ったとして、 dth = dth->AddSeconds(10) とかではなく、 dth = dt.(なにかの変換演算子) で時間を再設定してみたいのですが、 なにか方法はありませんか?
808 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 15:11:41.08 ID:IvzGN7OH] dth = dt; dth = %dt; // 丁寧に書いた場合
809 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 17:32:35.09 ID:yZVXWZKu] C++/CLIでは値型とクラスの場合で書き方が変わったりするから要注意だな
810 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 17:57:34.38 ID:iFIpmoD3] C++/CLIで作っているフォームの表示が気づいたらXP仕様になってしまいました 過去につくった物はWin8仕様の表示になっているのですがどこの設定で変更できるのでしょうか 環境はWindows8.1でVS2012です
811 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 20:04:05.05 ID:svYczKSB] >> 808-809 ありがとうございます。さっそく参考にしていろいろ調べてみますv
812 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 20:28:07.59 ID:svYczKSB] 807です。質問の時に代入する方向が逆でしたが、もらったヒントで 無事解決できました m(_ _)m dth = %dt; // DateTime^ = DateTime dt = static_cast<DateTime>(dth); // DateTime = DateTime^
813 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 21:58:05.31 ID:geioZCY7] 2段目のはこれでいけるな。 dt = *dth -> が *. なのもCの文法と同じ。 dth->AddSencond(...) (*dth).AddSencond(...)
814 名前:デフォルトの名無しさん mailto:sage [2014/03/20(木) 22:26:22.96 ID:svYczKSB] >>813 一文字で決まるおまじない教えてくれてありがとうですv
815 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 21:20:34.11 ID:HlHPSHO4] 質問失礼します クラスaの配列をメンバ変数に持つクラスbを作りたいのですが、クラスaの配列の初期化がうまく行きません。(コンパイル自体はできます) これは初期化の方法が間違っているのでしょうか? それともそのような設計(クラス配列を持つクラス)自体がよろしく無いものなんでしょうか? ref class a { int x; public: a(int num){x = num;} }; ref class b { array<a^>^ array_a; public: b(){ array_a = gcnew array<a^>(10); for (int i = 0; i < array_a->Length; i++) { array_a[i] = gcnew a(i); } } };
816 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 21:31:58.22 ID:lzq9JOXE] 問題なさそうだけど どう「うまく行きません」なの?
817 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 22:35:57.72 ID:HlHPSHO4] 実体がない(?)と言いますか、array_aに何かしようとすると、その関数のそれ以降の処理をすっ飛ばすようになります。 例えばクラスaにint GetX(){return x;}、 クラスbにint GetArrayA(int num){return array[num]->GetX();}みたいな関数を追加して、 ウィンドウズFormの方でLabelを一つ用意します。 private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { b^ test; test->GetArrayA(0); Label1->Text = "だいじょうぶ"; } これだと、Label1->Textは「だいじょうぶ」に変わらずLabel1のままです。 しかし >test->GetArrayA(0); の部分をコメントアウトにするとLabel1->Textは「だいじょうぶ」になります。
818 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 23:19:57.49 ID:ZHSALumd] これってコンパイル通る?>>817 の方。
819 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 23:36:35.34 ID:HlHPSHO4] >>818 817もコンパイルは通ります あと、今試してみたんですが出来上がったexeファイルを起動してみると 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。(中略) オブジェクト参照がオブジェクトインスタンスに設定されていません」 と出ますね…… こちらもまたtest->GetArrayA(0);の部分をコメントアウトすると問題なく起動します
820 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 01:02:03.43 ID:XCyA/SAw] test =gcnew 以下略つけてみたら?
821 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 01:50:12.79 ID:Ae/Hf3r6] >>820 あっ……「だいじょうぶ」になりました。 ありがとうございました!
822 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 11:45:41.86 ID:R2MpMn2O] デバッガ使えない環境なのかな、、、 例外起きた時は出力ウィンドウに出るぜ
823 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 12:11:13.54 ID:J0aLOZMr] c#のdynamic型に相当するものを c++/cliで何と書けば良いですか?
824 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 21:57:27.97 ID:t/xZR1S/] 多分無い
825 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 18:40:24.14 ID:avbF2wuD] c++/cli勉強したいと思っています。 >>array<a^>^ array_a; の<a^>^ってどいういう意味ですか? 顔文字に見えます。ググりたいのですが^>^でググっても ヒットしません。キーワードを教えてけろ。
826 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 18:46:04.26 ID:Mn4+ksrv] トラッキングハンドル
827 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 19:05:13.77 ID:avbF2wuD] >>826 ありがとうございます。さっそくググってみます。
828 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 22:02:14.61 ID:OFkZfhFe] 参照型を内部に保持するコンテナの参照を宣言かな。
829 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 09:25:37.06 ID:QKhoqLLT] ジェネリックメソッドの継承がうまく行きません。 generic<typename T> ref struct B; ref struct A abstract { generic<typename U> virtual A ^f(B<U> ^u) = 0; }; //C4570 明示的に抽象として宣言せずに抽象関数を含んでいます generic<typename T> ref struct B : A { //C4490 オーバーライド指定子が不適切 generic<typename U> virtual A ^f(B<U> ^u) override { return u; } }; 同じ戻り値と引数でも、同じ関数だと認識されないようなのですが、どのようにすれば良いですか?
830 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 10:02:57.61 ID:Kixx6i0Q] ttp://social.msdn.microsoft.com/forums/vstudio/ja-JP/2f138907-64a3-4326-bfea-d0e4b3c15fa8 仕様っぽいのであきらめてC++/CLI投げ捨ててC#で書く
831 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 10:44:57.11 ID:QKhoqLLT] なるほど・・・ありがとうございました。
832 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 23:30:42.34 ID:OiuzuWyN] C#でdelegateに設定されたメソッドを調べるのにGetInvocationListを参照していたのですが、 C++/CLIで同じようなことをするとコンパイルエラーが発生してしまいます。 どのようにコーディングすればよいでしょうか? // C# ideone.com/O4j7TX // C++/CLI ideone.com/Lazyxs ※実際は23行目のauto mcd = (MulticastDelegate^)hoge->Piyo;で error C3918: 使用するには、'Delegate::Hoge::Piyo' がデータ メンバーでなければなりません といったエラーが発生してしまいます。
833 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 23:41:08.55 ID:RH21G1qI] C++/CLIの方はeventじゃん
834 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 23:47:44.50 ID:OiuzuWyN] >>833 あーeventキーワード取っ払ったら通りました。ありがとうございます。 そこでコンパイルエラーにしてくれたらいいのに…。
835 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 08:39:30.20 ID:ICklhj5Y] event自体は正当で使う側が問題なのに、eventの方でコンパイルエラー言われても
836 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 11:14:20.64 ID:k1JIQlQE] ワロタ
837 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 23:09:07.27 ID:OfRhuTl1] すいません>>832 です。 禿しく勘違いしてました。C#のeventはシンタックスシュガーなんですね。 event EventHandler^ Piyo { void add(EventHandler^ value) { mPiyo += value; } void remove(EventHandler^ value) { mPiyo -= value; } void raise(Object^ sender, EventArgs^ e) { mPiyo(sender, e); } } EventHandler^ mPiyo; などとしたら上手くいきました。
838 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 03:20:04.74 ID:l0k3Jdk0] c++/cli初めて作成しています。 c++プロジェクトでライブラリを作成して void func1(const char *p){ cout << p << endl; } を定義して、 c++/cliプロジェクトでこの関数を呼び出すと、 func1("Hello World"); //呼び出し成功 func1("Hello" + "World"); //型 "System::String ^" の引数は型 "const char *" のパラメーターと互換性がありません となったので、エラー解決のために少しググって、よくわからないまま char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi("Hello" + "World").ToPointer(); のようにして、 func1(pStr); //呼び出し成功 しました。 この場合、 func1("Hello" + "World"); を実行可能に出来るようにc++ライブラリ側で、この引数を受けられるfunc1関数を定義することは可能でしょうか?
839 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 05:33:40.37 ID:TbdBw+Sj] 無理
840 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 09:14:28.60 ID:l0k3Jdk0] >>839 そうですか無理ですか。 出来れば、出来ない理由を教えてください。
841 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 09:35:16.69 ID:QBzBPwJ7] System::String^はネイティブでは直接扱えないから
842 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 09:42:14.96 ID:l0k3Jdk0] >>841 なるほど。ありがとうございました。