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
2 名前:./1256645713/662 [2010/03/15(月) 09:45:45 ] ドキュメントの MSDN には、System::String(SByte*); て書いてあるけども、 System::String(char*); が正解ってことか? それとも SByte が signed char ではなくて char てこと?それは無いような気が。 ちなみに、使ってる教科書のサンプルプログラムは8bitでは char* 配列を渡してる。
3 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 19:44:10 ] 厳密名の付け方が分かりません 検索しても意味不明なものしか引っかからない
4 名前:デフォルトの名無しさん [2010/03/17(水) 21:02:17 ] 開発でつかわれてるのかな? C++/CLIって。
5 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 21:41:39 ] 必要なら使われるだろ。 だからなんなんだ?
6 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:37:29 ] >>3 LINKにある。 /KEYCONTAINER /KEYFILE
7 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:45:13 ] というか必要な時だけ最小限使うもの 基本的に使わないほうがいい
8 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:33:17 ] 最近妙にお気に入り
9 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 09:03:31 ] Managed C++でさえ一部で使われていた。
10 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 19:23:41 ] フォームの中にあるテキストボックスの内容をmainとか関数とかから書き換えたいんだけど どんな方法があるでしょうか? 今までは強引にチェックボックスにチェックが入ると void test(System::Windows::Forms::TextBox^ tb_log_view); こんな感じの関数呼び出してTextBoxを強引にわたして指定の処理して テキストボックスにメッセージ表示させてたんだけど 何せ使い勝手が悪いので・・・
11 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:29:18 ] String^使えばいいんちゃう?
12 名前:デフォルトの名無しさん [2010/03/25(木) 18:00:01 ] 今、「Cで書かれたライブラリをC++/CLIでラッピング(DLL化)し、 C#で使おう」という目的に向けて、Cのライブラリをラッピング中ですなのですが、構造体で悩んでます。 C++/CLI側でC#側に「構造体の配列」を返す関数が見せてるのですが、実行すると思ったように動きません。 C++/CLI側 [宣言] public ref struct SampleStruct { static CHAR cUpdate; }; static array<SampleStruct^>^ pstSample = gcnew array<SampleStruct^>(10); 関数 array<SampleStruct^>^ hogehoge(){ if(pstSample[0] == nullptr ){ for(int i=0; i<10; i++ ){ pstSample[i] = gcnew (SampleStruct); } } pstSample[2]->cUpdate = 2; return pstSample; } C#側 SampleStruct[] stTest = new SampleStruct[10]; stTest = LIBSAMPLE.hogehoge(); ここで、stTest[0].cUpdateからstTest[9].cUpdateまでを見ると 全部2が入っております。(本当は[2].cUpdateだけ2が入っていて欲しい) どこが原因か分かりますでしょうか? OS:XP 環境:VS2008 ExpressのC++版とC#版を使ってます。
13 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:34:20 ] > static CHAR cUpdate; Cさえ理解していないのがよくわかる。
14 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:45:45 ] うわ・・・・・ 泣ける・・・・orz 回答有難うです
15 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:53:51 ] 突っ込みどころや怪しい箇所が多すぎて、どうしたいかが見えてこない(笑 配列はC++/CLIでアロケーションしていいのかとか。 C#でいう構造体はvalue class (or struct)であって、ref structはクラスだけどどっちにしたいのとか。
16 名前:12,14 mailto:sage [2010/03/25(木) 19:13:48 ] 目的は、「Cで書かれたライブラリをC#で使う」事なのですが、 現状は、Cの方には手を加えないように、やる方法として、C++/CLIで ラッピングするという手段があるという事なので、作業している次第。 そこで、構造体のポインタを戻り値としている関数はどう扱えば?と 思ってましたら、 ap.atmarkit.co.jp/bbs/core/fdotnet/17380 このような話をみつけたので、まずはref structでやってるという状況です。
17 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 20:50:34 ] CのライブラリだったらC++/CLIなんか使わずにC#でDllImportすればいいような
18 名前:12,14 mailto:sage [2010/03/26(金) 09:55:14 ] >>17 説明不足でした。 (当然の疑問ですよね) そのCのライブラリというのが、元がスタティックしか考慮されておらず、 DLL用にはなってなく(__declspec(dllexport)のような記載は一切なし)、 選択肢として 1 Cのソースをdll対応に修正(__declspecを全関数に追加) 2 元のCには手を加えず、新しくラッパーを作る があり、今後もCの方は勝手にバージョンが上がっていくので、 それなら、元のソースに手を加えない方向でやろうとなった次第です。
19 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:26:08 ] だからってそのラッパーをC++/CLIで書く必要はないだろ Cで薄ーいラッパー書いて普通のネイティブDLLとしてコンパイルすればおk C++のライブラリとなると面倒だけどそうでないならC++/CLIはできるだけ避けたほうが賢明
20 名前:12,14 mailto:sage [2010/03/26(金) 12:05:28 ] >>19 その手がありましたか! C#でDllImportして、 DLL関数に渡す構造体、DLL関数から受け取る構造体は [StructLayout(LayoutKind.Sequential)]を用いてC#側に定義して やりとりするという事ですね。 試してみます
21 名前:デフォルトの名無しさん [2010/04/25(日) 20:06:11 ] 【初心者歓迎】C/C++室 から誘導されてきました。 Form1とForm2があり、Form1からForm2を呼び出すようにしています。 また、Form2に配置したボタンを押すと関数が呼び出されて、所望の処理をするようにしています。 以下の2点について教えてください。 1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。 2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。 両方ともポインタを使えば出来そうな気がするのですが、例えば2.の方ではForm2を指すポインタの宣言の仕方が わからないです。 よろしくお願いします。
22 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:24:49 ] >>21 ポインタじゃなくて参照になる。 Form2^ form2;
23 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:26:28 ] >>21 動くかどうかは試してない。 【Form1.h】 ref class Form1 { public: System::Void Form1Func() {〜} private: System::Void Form2Func(); private: System::Void Form1_KeyDown(〜) {Form2Func();} } 【Form1.cpp】 #include "Form1.h" #include "Form2.h" System::Void Form1::Form2Func(){ Form2^ form2 = safe_cast<Form2^>(Application::OpenForms["Form2"]); form2->Form2Func(); } 【Form2.h】 ref class Form2 { public: System::Void Form2Func() {〜} private: System::Void Form1Func(); private: System::Void Form2_KeyDown(〜) {Form1Func();} } 【Form2.cpp】 #include "Form1.h" #include "Form2.h" System::Void Form2::Form1Func() { Form1^ form1 = safe_cast<Form1^>(Application::OpenForms["Form1"]); form1->Form1Func(); }
24 名前:21 [2010/04/25(日) 23:09:54 ] >>22 >>23 ありがとうございます。 残念ながらうまくいかないです。 環境はVS2005 C++ WinXP SP3 Form1(親フォーム)からはForm2.hをインクルードして Form2^ frm = gcnew Form2(); frm->ShowDialog(); とできるのですが、Form.hではForm1.hをインクルードすると循環参照になってしまうようでエラーになります。 また、Form2.h内で関数宣言だけしてForm2.cpp内でForm1.hをインクルードして実行部分を書こうとしましたが Form2.h内の関数宣言(>>23 のprivate: System::Void Form1Func();にあたる部分)がコンパイルエラーになってしまいます。
25 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:31:54 ] なんでこういう意味での初心者がC++/CLIなんてマニアックな言語触ってるんだろう……? > Form2に配置したボタンを押すと関数が呼び出されて > 1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。 Form1関係ないよね? Form2が勝手にやってろって話 > 2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。 Form1がForm2を作ったとき、Form2のFormClosedイベントに引っかけるとかすればいいんじゃね? // Form1内のForm2を表示させる処理 Form2^ form = gcnew Form2(); form->FormClosed += gcnew FormClosedEventHandler(this, &Form1::OnForm2Closed); form->Show(); // Form1内で定義 private: void OnForm2Closed(Object^ sender, FormClosedEventArgs^ e) { this->Close(); } ×アイコンで閉じたときはForm1は閉じない、ボタン押したときだけとかなら Form2にCloseWithParentみたいなプロパティ用意して 表示させるときのForm2^はメンバ変数に保持しておいて OnForm2Closedで確認
26 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 09:58:49 ] C++/CLIだと、Cのランタイム例外のハンドリングが出来ない臭いんだけど、どうすれば良いんだろう… ハンドラ設定してるのに動いてくれない 例えば_tcsftime(..., L"%h", ...);みたいなやつ ※普通の例外じゃないんで、マネージand/orネイティブでもtry catch出来ない
27 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:43:17 ] そもそもCRTが例外なんて投げないはずだが > 727 :デフォルトの名無しさん[sage]:2008/07/03(木) 13:51:22 > なんで、VC++2008の、strftime _tcsftimeは、 > 書式に無い文字を渡すと例外終了するのかなあ。 > 単に無視してくれりゃいいのに。 > 自前でパースしてから、渡してやるしか無いのかな。 > 729 :デフォルトの名無しさん[sage]:2008/07/03(木) 14:11:02 > ちょっと見てみたけど > _ASSERTE( ( "Invalid format directive" , 0 ) ); > だからデバッグ時だけの話じゃん。
28 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:35:20 ] >>27 つ msdn.microsoft.com/ja-jp/library/ksazx244 (v=VS.80).aspx 試してみると早いかも… int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); tm tmNow; __time64_t tNow; TCHAR sz[20]; try { _time64(&tNow); _localtime64_s(&tmNow, &tNow); _tcsftime(sz, 20, L"%h", &tmNow); } catch (...) { Console::WriteLine("error!"); } Console::ReadLine(); return 0; }
29 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:07:44 ] ハンドラ設定ってなんだ普通に_set_invalid_parameter_handlerで呼んでくれたが
30 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 22:16:23 ] SerialPortクラスを使ってデータを受信する際、 ・SerialPort::Data_Receivedイベントで受信 ・受信データはQueueクラス経由でメインスレッドから受信 ・メインスレッドでは、あるバイト数を数秒以内に受信できない場合タイムアウト を、実装したいのですが、タイムアウト処理はどのように記述したら良いのでしょうか? // Data_Receivedイベント private: System::Void serialPort_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) { int length = serialPort->BytesToRead; array<unsigned char>^ buffer = gcnew array<unsigned char>(length); serialPort->Read(buffer, 0, length); Queue^ sync_queue = Queue::Synchronized(m_queue); for (int i = 0; i < length; i++) { sync_queue->Enqueue(buffer[i]); } }
31 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 12:09:02 ] マネージクラスのインスタンスをグローバルスコープっぽく参照する方法ないの? 全コンストラクタでやりとりするようなマンドクセ方法がいやだ
32 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 15:55:49 ] クラスの静的メンバに入れとけばいいだけ
33 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:28:42 ] あと public static ね
34 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:46:40 ] C++/CLIに書き換えてる奇特なものです char www[100]; char* ptr; ptr = www + i; array<char>^ www = gcnew array<char>(100); array<char>^ ptr; ptr = www + i; ← ? ?の部分をご教授くださいm(_ _)m
35 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 00:53:22 ] CLI配列はポインタじゃないから無理
36 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 10:21:40 ] pin_ptr してもいいけどさ、www[i] で駄目な理由は何なの?
37 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 08:14:59 ] C++の感覚なら毎回[i+a]としないで最初からオフセット付けときたいのは当然だろ 無理なので常にwwwとiをセットにして持ちまわるのが普通 メソッドの引数にもオフセットを指定できるようにする
38 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 22:43:16 ] perlのように return a, b できるようにしてくんないかな
39 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 12:07:55 ] .NET4ではTuple型自体は導入されたのでC#やVBでは将来的に 言語レベルでサポートされる可能性はある。 C++/CLIはほぼ見捨てられてるので期待するだけ無駄。
40 名前:デフォルトの名無しさん mailto:sage [2010/08/17(火) 21:49:08 ] >>34 array<char>^ www = gcnew array<char>(100); interior_ptr<char> ptr; ptr = &www[0] + i;
41 名前:デフォルトの名無しさん [2010/08/21(土) 06:53:22 ] VC2010 EEを使用しています。 RS-232Cで通信を行い、プログラムを終了させようとして this->Close(); を行うと、エラーメッセージも出ないままプログラムが固まってしまいます。 ポートを閉じてないことが原因かと思い、 serialPort1->Close(); を実行してみたところ、今度はここで同じように固まってしまいました。 vsug.jp/tabid/63/forumid/46/postid/9991/scope/posts/Default.aspx を、参考に、BeginInvokeを使用していますが、ダメでした。 この場合、どこを見れば良いのでしょうか? よろしくお願いします。
42 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 16:16:15 ] 画像処理を行いたいのですが、 Bitmap、Image、Graphic・・・どのコンポーネントを使うのがお得なのでしょうか
43 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 16:36:42 ] >>42 どんな画像処理をするかが分からないと、 えらべないと思われます
44 名前:42 mailto:sage [2010/09/18(土) 16:48:33 ] カラー画像をモノクロにしたり、コントラストかけたり、拡大縮小したりの初歩的なことがしたいです。 あと、今のところはCUIで行いたいです。
45 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 18:01:22 ] >>44 俺はあまり詳しくないが、 ぐぐると ttp://msdn.microsoft.com/ja-jp/academic/cc998604.aspx ここで Bitmap クラスを利用することにより、画像に対してピクセル単位で様々な処理を行うことができます と書いてある .netのクラスを使うなら、おそらくやりたいことはこういうことだろう
46 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 23:40:29 ] Bitmap使ってみたけれど、画像の保存の仕方がわからない・・・ WriteBitmap("C:\\・・・",data)とかdata.Save(・・・)ってな感じでできないのかな
47 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 23:43:33 ] 普通にSaveメソッドあるだろ
48 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 05:14:50 ] ホントだ。ごめん、見逃してたわ。
49 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 03:53:30 ] なぜ下記のようなプログラムでエラーが発生するのかわかりますか?? --- プログラム --- #include "stdafx.h" using namespace System; using namespace System::Drawing; int main(array<System::String ^> ^args){ Bitmap^ image = gcnew Bitmap("test.jpeg"); image->SetPixel(0,0,Color::Black); ←ここでなぜかエラー起きます image->Save("test2.bmp"); return 0; } --- エラー内容 --- ハンドルされていない例外: System.ArgumentException: 使用されたパラメータが有効ではありません。 場所 System.Drawing.Bitmap..ctor(String filename) 場所 main(String[] args) 場所 c:\documents and settings\***\デスクトップ\test\test.cpp:行 10 場所 mainCRTStartupStrArray(String[] arguments) 場所 f:\dd\vctools\crt_bld\self_x86\crt\src\mcrtexe.cpp:行 309
50 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 07:25:44 ] >>49 test.jpegはちゃんとプロジェクトファイルと同じ階層にある? 余計なお世話かも知れないが、.netでやるなら C#で作ったほうが楽なんじゃないだろうか・・・ わざわざマイナーな環境で挑戦するよりもいいと思うんだが
51 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 08:08:59 ] >>49 落ちてる場所は、その上の行だぞ。
52 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 11:32:08 ] これだけ利用者に嫌われてる言語も珍しいな 初心者が質問するたびに使うなと勧められる
53 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 13:44:55 ] >>50-51 ありがとう。jpegじゃなくてjpgだったという凡ミスしていたことに気づけたわ ・・・一度C#に浮気してみる
54 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 13:53:46 ] >>52 嫌われているというか、言語自体が初心者お断りだからな 初心者が無謀なことしようとしていたら、そりゃ止めるだろう
55 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 14:01:21 ] C++も.NETも使いこなせる人が、止むを得ず使うための物。 使わなくていいなら使いたくない。
56 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 15:01:38 ] 始めようにも資料が無さ過ぎる MDI作るときどうするかとか ちょっとしたことの逆引きがネット上で全く出てこない ようやくOpenGL表示できるようになって C++の頃の遺産をつかえると思ったのに
57 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 16:33:26 ] C#でできるから、それを参照にすればいい なにもかもC++/CLIで済ませようとしないことをお勧めする
58 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 02:27:48 ] 嫌ってはいないんだ ただ何故かこの言語とのファーストコンタクトというか接し方が 一言入れておかないと不幸にしかならなそうな人が多いのよね
59 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 09:55:56 ] WinFormsデザイナとかC++/CLIにそもそも要らないんだよな こういうのがあるから「Visual C++ 2008 で簡単GUIプログラミング」みたいな勘違い本やサイトが出て初心者が道を間違える
60 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:18:00 ] 56ですが自分 C++の文法がある程度使えて フォームデザインが総合開発環境上で扱えて 至れり尽くせりじゃん、と思ってとっかかりました 現実は情報が全く無く よくわからないクラスとかいっぱいあって 解説も無くて どうしようと途方にくれていましたが、QTとかよりは 導入コストも再勉強のコストも無いだろうと信じて使ってます。 だって、CやC++だとGUI作るの辛いんだもん っていう理由だとダメですか
61 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:32:23 ] まあ正直C++の名前が付いてるだけで マネージ部分はC++とは直接関係なくて学び直し必要だし それなら素直にC# C#2.0の範囲までなら多分C++/CLIより簡単だし サンプルも多いし将来WPF/Silverlightとかにも応用できるし C#やっとけば逆にC++/CLIを橋渡し用ぐらいなら書けるようになるし
62 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 13:44:31 ] けっきょくC++風に文法を汚したC#と普通のC++を無理矢理くっつけただけの代物だからな
63 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 14:03:20 ] >>62 それを一応形にできたところは評価できる。
64 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:28:25 ] #define健在なり
65 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:37:10 ] #define private public
66 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:31:06 ] LPVOIDからarray<String^>^に変換したいのですが、アドバイスください。 //////////Form1_Load////////// HANDLE hMap; LPVOID lpBuf; hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,L"View"); if(hMap==NULL){Form::Close();} lpBuf=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0); if(lpBuf==NULL){Form::Close();} if(GetLastError()==ERROR_ALREADY_EXISTS){//すでに同じ名前のオブジェクトが存在する lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー ///////////ここまで///////////// つまり二重起動時に共有メモリを使いたいのですが、どうしてもできません。 先人方どんなことでもいいので教えてくだせえ。
67 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:40:23 ] marshal_asとかじゃねえの
68 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:51:50 ] > LPVOIDからarray<String^>^に変換したい > lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー コードの方はarray<String^>^からLPVOIDに変換したいように見える
69 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:19:27 ] >>67 2008 Express Editionを使っていまして・・・ヘッダーがないらしいです。 www.codeguru.com/forum/showthread.php?t=468408 >>68 コマンドライン引数を得た後、array<String^>^に変換しようと思ったのです。 宣言時からarray<String^>^だとMapViewOfFileでつまずいちゃうので・・・。 どちらにせよ、コマンドライン引数を得た後、 共有メモリarray<String^>^として反映できればいいのですが。
70 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:50:07 ] 全体にコードが滅茶苦茶に見えるし そもそもLoadイベントなんかでやる処理には見えないけど(mainでやることだろ) 共有メモリにString^を書き込みたいのなら > ttp://www.codeguru.com/forum/showthread.php?t=468408 のリンク先にString^をポインタに変換する方法が載ってるからmemcpyなりなんなりすればいい 複数の文字列を書き込む必要があるなら\0なりなんなりで区切る
71 名前:デフォルトの名無しさん mailto:sage [2010/09/29(水) 06:10:09 ] 共有メモリをやめてSendMessageに妥協しました とにかく二重起動時にコマンドライン引数を渡すことができました! 皆様、貴重なアドバイスをありがとねん
72 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 12:39:42 ] C++/CLIにおけるsafe_cast,static_cast,dynamic_castの違いについて教えてくださいよ safe_cast :型が合わないと例外が発生、実行コスト中 dynamic_cast:型が合わないとNULLを返す、実行コスト大 static_cast :型が合わなくても何もしない、実行コスト小 この認識であってますか?
73 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 16:11:05 ] safe_castとdynamic_castのコストはほぼ同じ。 static_castが速くなるのはダウンキャストの場合だけ。静的に解決できる場合はsafe_castと同じ。
74 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 20:39:28 ] >>66 いまさらだけど、.NET Framework 4以降ならMemoryMappedFileクラスを使えばいいと思うよ。
75 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 20:52:42 ] .NETのハンドルのダウンキャストにstatic_cast使うのは激しく疑問 公式の説明でもパフォーマンスをえらく強調してるが、 そのためにわざわざ検証不能コードにしてまでやるほどのものなのかと
76 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:22:23 ] www.infoq.com/jp/news/2010/10/Co-Evolution-Doubts >どうやらそれらは、レガシC++アプリケーションをWindows Phoneに移植したいと考えている多くの開発者にとって、C++/CLIは、ベストなルートに見えるのであろう。 地獄への道は善意で舗装されている
77 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:28:08 ] 筆者自身は否定的に見えるけど、まだそんなこと考えてる人もいるんだねぇ
78 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:52:06 ] 筆者ほんとにC++/CLI触ったことあるのかな Silverlightで使える範囲のC++/CLIはC++とは全く互換性なくてただの汚いC#なんだけど
79 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 21:47:31 ] 絶対的処理性能が必要な場合か、過去資産使う時以外はメリットよな?
80 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 22:05:21 ] 検証可能なコードしか使えない場合は処理性能同じだし過去資産も使えないよ
81 名前:デフォルトの名無しさん mailto:sage [2010/10/09(土) 21:36:15 ] 音の再生ってC++/CLIでできるの? 画像の場合ピクチャボックスみたいな感じに楽に音楽再生させたいのだけど
82 名前:デフォルトの名無しさん mailto:sage [2010/10/10(日) 23:03:16 ] ネイティブのC++でできるなら同じ方法でできる .NET使ってもできる どちらにしてもC++/CLIとは直接関係ない話
83 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 00:46:33 ] サンクス これ絶対初心者向けじゃない気がする
84 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 00:49:57 ] 「気がする」ではない。 絶対初心者向けではない、その通りだ。
85 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 06:02:46 ] ですよね 俺みたいな勘違い君が集まるから スレタイ変えると平和になる気がする
86 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 11:40:19 ] 「C#でアプリを作っているが、C++のライブラリで音を鳴らしたい」もしくは 「C++(非CLI)でアプリを作っているが、.NETのライブラリを使って音を鳴らしたい」 →そこだけC++/CLIを部分的に使おう という風に特別な意図を持って言語であって、 >>81 のような質問が出てくる時点でC++/CLIを使うのは間違っている
87 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 12:08:45 ] 前者はCLIでなくていいだろ
88 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 13:10:09 ] そんなに大きなライブラリでなければ>>19 方式がベターだな
89 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 15:50:17 ] 初心者用のC++/CLIじゃなくて C++/CLIの初心者向けのスレなんだよなw
90 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 16:27:40 ] C++/CLI初心者にクラスチェンジできる条件が、 1) C++習得レベル一定以上 2) .NET習得レベル一定以上 だからな
91 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 02:47:19 ] C++とC#があった上で補助的に使うもんだからねぇ みんな言うように初心者が使う物じゃないね。
92 名前:デフォルトの名無しさん [2010/10/12(火) 15:18:47 ] こんなのに熟練したくないわ どうしても必要なときにちょっと調べてその場が凌げれば充分
93 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 18:55:47 ] C++にGCを導入した言語。そう考えれば実用性は高いはず。
94 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 19:17:34 ] C++と、GCをサポートした別の言語を混ぜた言語。 アンマネージとマネージの境界は常に意識する必要がある。
95 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 20:52:46 ] 仕事では使いたくないが、趣味でいじるのなら楽しい。 Express Editionだと実行中のプロセスにアタッチできるのが C++しかないってのも使ってる理由のひとつ。
96 名前:デフォルトの名無しさん mailto:sage [2010/10/27(水) 21:11:21 ] 日経のムックでC++/CLIが宣伝されてるな。 簡単GUIプログラミング!みたいな見事な勘違い記事だった。騙されて道を誤る初心者が不憫でならない。
97 名前:デフォルトの名無しさん mailto:sage [2010/10/30(土) 18:38:53 ] 道を踏み外しそうになり、C++Builderにシフトできました
98 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 02:19:24 ] 初心者はC#いじっとけ
99 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 23:54:01 ] 増えた言語仕様って、ref, ^, gcnew だけでしょ?
100 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 23:59:30 ] ジェネリック,トラッキング参照,ファイナライザ,プロパティ,イベント,デリゲート, etc CLI拡張の部分だけでも言語仕様書の量がC#並み
101 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 00:03:31 ] 2種類の言語が同居してる構造だな。
102 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 04:25:15 ] D言語よりマシ。
103 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:45:49 ] Z言語になるころには なんとなくこんな感じ、って思い描いたものが 1行で組みあがるくらいに なるわけねぇ
104 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 17:28:32 ] ref classのメンバーに構造体がある場合、その構造体のポインターはどうやって取得すればいいの? pin_ptr<SCRIPT_STRING_ANALYSIS*> pssa = &(this->構造体型の変数); こういう風にしてもうまくいかないんだが
105 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 17:41:24 ] >>104 自己解決した 単にpin_ptrの型を間違っていただけだった
106 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 20:14:40 ] これって変数名とかに全角文字がつかえるのだな。 int 数値 = 0; みたいに。 うっかり全角アルファベット混ぜたりしたら大変だな。
107 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 20:26:13 ] それCLIでない方のC++でもできるよ コンパイラが共通なんだから
108 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:11:50 ] >>106 今のパソコンて、ゼロに斜線が入らないから、うっかり int 数値 = O; とかしてしまうとやばいぜw
109 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 04:36:06 ] どっかでOが定義済みでないと通らないだろ
110 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 13:04:12 ] Windows Mobile用のWM_GESTUREが入ったgesture.hは何を入れたら良いんですか? Windows Mobile 6 Professional SDK Refresh.msiと 試しにVS2010EEを入れてみたけど ダメでした Windows Mobile 6 Professional SDK Refresh.msiは2環境でインストールして いるのでインストーラがコケたとかでは無さそうです 定義だけなのでGoogle Codeとかでも良いのですが、MS系は上手く手に入りません。 くだすれですがよろしくお願いします。
111 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 12:22:30 ] queue<array<String^>^ > queue_dwnload; こう宣言すると System.ArgumentException' の初回例外が発生しました。 とイミディエイトウィンドウにメッセージが出るんだけど 宣言の仕方どこが間違ってますか?
112 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 17:42:15 ] つ STL/CLI #include <cliext/queue> using namespace System; cliext::queue<array<String^>^ > queue_dwnload;
113 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 18:21:47 ] すまん書き足りなかった、インクルードはちゃんとしてて プログラムも正常に動作してます それでもう少しシンプルなコードで試してみたんだけど VS2008で新規作成、プロジェクト、CLRのwindowsフォームアプリケーション のテンプレートでプロジェクトを作成して #include <cliext/queue>を追加 ~Form1(){}の下あたりに cliext::queue<array<String^>^ > queue_dwnload;を追加 デバッグ実行する これだけでメッセージが出ます、キューの宣言は間違ってないみたいだけど 何が原因なんだろう?
114 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 19:06:11 ] VS2010にしてしまっているので再現できないが、 ~Form1()と同じprotectedには出来ないのかコンパイル時に警告がでる。 privateにしたらどう? private: cliext::queue<array<String^>^ > queue_dwnload;
115 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 22:52:09 ] private:付けてもだめでした
116 名前:デフォルトの名無しさん mailto:sage [2010/11/14(日) 14:34:28 ] とりあえず問題の切り分けだな。 まずコンパイルが警告なしで通るかどうか。 通るならデバッグ実行とデバッグなし実行で差があるかどうか。 別のPCでも再現するかどうか。
117 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 11:27:46 ] 使用環境:VS2008 Professional Edition プロジェクト:CLR クラスライブラリ 目的:コピーコンストラクタ、代入演算子を潰したい エラーの出ないコード。 ref class Hoge sealed { private: Hoge % operator=( Hoge const % rhd ) { return *this; } ; Hoge( Hoge const % src ) {} ; } 実装したいコード。 ref class Hoge sealed { private: Hoge % operator=( Hoge const % ) ; // error LNK2020 未解決のトークン(06000001) Hoge::op_Assign Hoge( Hoge const % ) ; // error LNK2020 未解決のトークン(06000003) Hoge::ctor } C++/CLIでメンバ関数の実装をせずに放置というのは可能でしょうか?
118 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 18:43:31 ] そもそもref classは定義しない限りコピーとか無理じゃなかったか
119 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 19:44:11 ] C#などから使わせるつもりなら演算子のオーバーロードは全部staticにしないといけないし 代入演算子やコピーコンストラクタはそもそもオーバーロードできないし constも使えないし参照渡しや参照返しもダメ(そもそもref classだから無意味) つかまずC#やるべき。.NETの常識が無さすぎ。
120 名前:117 mailto:sage [2010/12/02(木) 22:33:30 ] >>118 そうなんですか、回答ありがとうござます。 >>119 回答ありがとうございます。 msdn.microsoft.com/ja-jp/library/sy1y3y1t (VS.80).aspx このサンプルコードのコンパイルが通らなかったのですが、そもそもサンプルが間違ってるという事なのでしょうか? あと、.NETの常識を学ぶのにオススメの書籍などあれば教えていただけると幸いです。
121 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 11:24:33 ] Lock に関係ない実装は省略して書いてるだけでしょ 間違ってると言うより、そこは問題とは関係ない部分なだけ
122 名前:117 mailto:sage [2010/12/03(金) 12:41:30 ] >>121 回答ありがとうございます。 別途実装をするしか無いという事ですね。分かりました。 そうすると >>119 の回答から考えて、C#などから使わせるつもりが無いなら、 ・演算子のオーバーロードはstaticにする必要はない ・代入演算子やコピーコンストラクタはオーバーロードできる ・constも使えて参照渡しや参照返しもOK ということでしょうか?
123 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 15:36:41 ] C++/CLIではref classのメソッドにconstを付けられないから C#やVBと相互運用しないとしてもconstパラメータは事実上役に立たない。
124 名前:デフォルトの名無しさん mailto:sage [2010/12/04(土) 13:39:31 ] 趣旨がわからないね。 C++スタイルでやりたいだけなら、そもそもC++/CLI 使う必要性がないんでない?
125 名前:117 mailto:sage [2010/12/04(土) 14:33:18 ] >>123 回答ありがとうございます。 Hoge % operator=( Hoge % arg ) { 代入処理の実装 } ; これだと代入元が書き換えられそうで気持ち悪いですけど、そういう流儀なのですね。分かりました。 >>124 >>122 の質問に関しては元々あった疑問ではありません。 >>119 の解答に書かれている内容に関しての事実確認です。 趣旨に関してはスレ違いだと思いますので書きません。
126 名前:デフォルトの名無しさん mailto:sage [2010/12/04(土) 14:48:36 ] %もいらん ref classだから常にポインタ渡し
127 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 13:03:24 ] >>124 MSのサンプルだか自動生成されるコードだかで、 あんな風にrefクラス上でC++っぽいことをやっているものを見た覚えがある。 元の質問者のコードもそういうのに影響されたのではないかと思う。
128 名前:デフォルトの名無しさん mailto:age [2010/12/05(日) 14:36:18 ] private ref struct A{ UInt32 data[5]; }; これがコンパイル通らないんだけど、 array<UInt32>^ data;とかにしていちいちgcnewするしかないんですか? データ宣言するだけのためにコードなんて書きたくないので、うまい解決法お願いします。
129 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 15:20:34 ] うん、array<UInt32>^にしてコンストラクタ書くしかないんではないかなあ。
130 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 21:27:52 ] C#では構造体でstackallocが使えるからvalue classならいけるだろうと思ったけど無理なのね この手の機能でC#に負けてどうする
131 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 21:36:00 ] CStringを使うには何をインクルードすればよいの? atlstr.h、atlbase.h、atlapp.hは入れてるけどコンパイルとまる
132 名前:デフォルトの名無しさん [2010/12/06(月) 21:09:33 ] VC++2010 ExpressEditionです。 System::windows::form::timer で一秒ごとにlabel->textを更新していますが(要は時計です) 最小化から復帰するとlabel->textが更新されなくなります、何故でしょう。
133 名前:デフォルトの名無しさん mailto:sage [2010/12/07(火) 22:12:40 ] 最小化したときにとめたタイマーを元に戻すんだキバヤシ
134 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 00:35:19 ] そもそもUI用のタイマで時計を作るな MSDNにもはっきりそう書いてあるだろ
135 名前:デフォルトの名無しさん [2010/12/08(水) 00:44:46 ] >>133 故意に止めるようなことはしていないんですが、そういう仕様なんでしょうか?
136 名前:デフォルトの名無しさん [2010/12/08(水) 00:46:00 ] >>134 えぇぇぇぇぇ。時間分解能が悪いとかあの辺ですか!ヽ(´Д`;)ノアゥ... スレッドタイマークラスとかに変えます。ご教授ありがとうございます。
137 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 00:57:53 ] MS公式のガイドラインかなんかで「System.Windows.Forms.Timerで時計を作らないでください」って無かったっけ? どこだったか忘れたけど
138 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 11:59:01 ] 一番使い易いところにあるのに、一番性能悪いとかひでー話だよな 俺も最初使ってみて混乱した
139 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 14:19:36 ] 使い方も知らずに使うとか・・・
140 名前:デフォルトの名無しさん mailto:sage [2010/12/09(木) 00:12:13 ] VS2005です。 C++/CLIでラップしたネイティブのライブラリから例外が発生して、 C++/CLI側でcatchした時に、 ネイティブ側のインスタンスのデストラクタが呼ばれません。 これはバグと考えて良いのでしょうか? VC++2010 expressでは普通に呼ばれたので・・
141 名前:デフォルトの名無しさん [2010/12/09(木) 03:14:40 ] >>132 です。 あれからいろいろいじりまくっていたんだけど、どうもフォームの透過色(TransparencyKey)が特定の色の場合 この問題が発生しているようです。引き続き調べてみます。
142 名前:140 [2010/12/10(金) 18:48:44 ] 全く相手にされてないようですが、 解決したので適当に報告しときます。 とりあえず、ネイティブのライブラリオプションを /EHscから/EHaに変更することで、デストラクタが呼ばれるようになりました。 どうやらオプションの違いでABIに互換性が無くなり、 例外をハンドルできても、その後のアンワインディングを正常に実行できていなかったようです。 デフォルトのオプション設定だと上記のような状態になるので、 自分みたいに知らずに組んでる人はメモリリークし放題ですね。
143 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 22:48:33 ] C++/CLIでSystem::Actionって使えないの? event Action^ Foo; とやると エラー1error C2955: 'System::Action' : クラス ジェネリック を使用するには ジェネリック 引数リストが必要です って出てくる…
144 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 22:54:33 ] Action<T>はmscorlib.dllだがそれ以外はSystem.Core.dllだ
145 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 22:57:47 ] >>144 ありがとう… おまえそんなところにいたのか…
146 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 21:22:18 ] 聞きたいんだけどスレ住人はVC2010でC++/CLI書いてる? それともインテリセンス使うために2008書いてる? それともC++/CLI書かない?
147 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 21:30:17 ] C++/CLI書かない…けど次の案件がVS2010指定でネイティブDLL呼び出す必要があるから 書かざるを得なくなるかもしれなくてちょっと憂鬱
148 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:28:46 ] .NET用言語で一番の糞言語だからね>C++/CLI
149 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:49:37 ] >>148 C++自体が言語として糞だから仕方がない。 それと互換性保ちながらここまで実現したということを考えると、かなりすごいと思う。
150 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:50:52 ] 互換性?ねーよ。
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に入力した文字を分割して配列に割り当てる方法がわかりません
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 本当にラッパー専用言語だな
333 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 12:13:07.27 ] C++にGCを入れろと言う要望への、一つの回答。 D言語も悪いところも見えてくる。
334 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 15:06:24.73 ] ラッパーなら別にネイティブでいいんだよなぁ
335 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 17:47:56.62 ] C++/CLIがなかったら どうやってラップするの?
336 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 18:01:37.46 ] C#-->C++は簡単だけど、逆は面倒。
337 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 18:03:44.31 ] 別にスタティックライブラリだろうがC++ライブラリだろうが なんでもかんでもDLLに包んでP/Invokeでおk ObjCコンパイラ以上の荒業でラッパーコードが書けるのがC++/CLIの醍醐味だけど なんか、こう、便利とは違うんだよなあ…
338 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 18:05:53.91 ] マネージドで、ポインタを使いまくれる。
339 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 19:58:57.49 ] C#でできなくてC++/CLIでなら可能なポインタ関係の操作ってあったっけ? C#のunsafeの方が簡潔にCっぽく書けて扱いやすい気がするんだが
340 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 09:14:21.36 ] C#はMarshal派 C++のUIだけC++/CLIやC#みたいに自動で作ってくれるC++は無い物か BCBなら出来るけどさ
341 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 21:35:58.12 ] BCBでやれば万事解決
342 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 14:14:27.30 ] MSからBCB出してくんねーかな C++/CLIは無かったことにして、買収しちゃえばそれで済むのに
343 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 23:59:08.75 ] だからC++/CLIは「WinFormsが使えるC++」なんて生易しいものじゃないと何度言えば
344 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 07:08:43.64 ] Windowsは、C++でプログラミングが基本。
345 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 08:58:03.95 ] なぜC++は易しいのにC++/CLIは易しくないのか? みたいな無神経な言い回しが何度も言われていた時期があった。 聞くほうも同じくらい無神経だから何度言っても通じないことは容易に想像できる。
346 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 09:30:47.84 ] まあネイティブのC++でGUI作るよりはずっと簡単だけど C++/CLIでWinForms使うなっていうのは どうせC#わからないと使えないしC++の経験があってもC#覚えたほうが早いからC#やれってこと C++の経験があるからC++/CLIがいいだろうと思って始めた初心者が C#のTIPSサイトですぐ出てくるようなコントロールの使い方を質問してくるとそりゃC#やれと言いたくなる
347 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 09:58:07.10 ] >>344 Windowsでの基本はC++だが、 WinFormでの基本はC++じゃない件
348 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 16:10:30.57 ] せめてVB並みのインテリセンスを実装してくれ
349 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 16:29:27.88 ] 2010にインテリセンスのらないの確定か vNextも最初のバージョンは載らないらしいし
350 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 23:34:53.54 ] GUIでUI設計ができてネイティブコードその上爆速コンパイル Borland時代のDelphiはまさに神言語だったんだなぁと思う
351 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 00:31:39.48 ] C#がネイティブコード吐く言語だったとしてもコンパイルは爆速のはずだよ C++の言語仕様が糞なだけ
352 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 00:57:16.04 ] Scalaはコンパイル遅いけど糞なのか?
353 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 09:30:18.33 ] C#も多次元配列とか使わなければ速いよ
354 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 09:37:09.00 ] Cが速いのは、安全性と裏腹。
355 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 09:53:59.45 ] Cでも安全性は確保可能
356 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 17:08:23.75 ] 理屈では可能でも 現実の大部分のプログラムはそうなってないんだけど
357 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 20:01:09.19 ] そうか? それだと原発事故と飛行機事故と自動車事故と比べて騒いでる連中と同じだぞ
358 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 21:01:16.07 ] Cは標準ライブラリが安全性を確保するのが難しい作りになってるだけで、 使うライブラリによっては安全に書ける、気がする
359 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 21:35:52.26 ] セキュリティは別にして、.NETはメモリ破壊が起きないのがいい お前はもう死んでいる的なバグがずっと少ない
360 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 22:42:12.30 ] ガベコレは、理論武装とかしなくても安全性が明らかだから好感を持てるんだが、 逆に言うとガベコレ使わなくても明らかに安全な部分はCで書いていい
361 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 10:04:29.39 ] C++/CLIはやれば出来る子 計算部分はネイティブで書いて、GUIや描画部分は.NETにやらせることで 高速かつ生産性の高いプログラミングが出来る ・・・と、言う夢だったのさ
362 名前:大天使 ◆uL5esZLBSE mailto:sage [2011/07/05(火) 13:17:03.75 ] >>357 Cは安全性を捨てて速度得てんだよ バカか? Cに安全性を追加したら それは劣化C#になるから、下手に自分でかいた甘いコードで安全性をはかるよりも C#でやるべき お前はなんか、C++上で劣化C#作って喜んでそうなバカだな
363 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 15:20:27.62 ] 自演乙
364 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 15:46:40.55 ] VS2010で作っちゃったんだけど、VS2008に変換することって出来ます? インテリセンス無いから入力がめんどくさい・・・
365 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 21:56:13.11 ] 無理 一応注意しとくと2008でコンパイルした混在アセンブリは.NET4でロードできなくなるよ?
366 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 22:07:00.37 ] あとはアドイン購入か。 www.wholetomato.com/default.asp
367 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 23:11:17.61 ] 新規プロジェクトにコードだけ引っ越した方が簡単な気がするけど
368 名前:デフォルトの名無しさん mailto:sage [2011/08/18(木) 15:44:09.37 ] 俺もそう思う projファイル書き替えでなんとかなるけどね 混在はapp.config無理やりつけてやるとか
369 名前:デフォルトの名無しさん mailto:sage [2011/08/31(水) 22:00:08.56 ] プロジェクトをいちいち作るのがめんどくさい…
370 名前:デフォルトの名無しさん mailto:sage [2011/09/02(金) 22:58:08.40 ] MSBuild 用のXMLなんだから、直接修正しろよ
371 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 13:37:36.74 ] どうでもいい事だよ C++/CLI で better C なんて
372 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 11:52:55.12 ] msdn.microsoft.com/en-us/library/windows/apps/hh454076%28v=VS.85%29.aspx なんかわけのわからないことになってるぞ C++/CLI切ってネイティブのC++にC++/CLI風のCOM拡張を入れるらしい
373 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 13:18:45.29 ] 切るんじゃなくてWinRT API用の拡張。 .net framework用には今まで通りC++/CLIを使う。
374 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 14:44:53.44 ] .NETとCOMで共通のAPIを用意して、C++は完全ネイティブでCOM使うっていうのは C++/CLIに比べれば至極真っ当なやり方だと思う 最初からそうしてくれてれば良かったのに
375 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 21:24:20.48 ] >>374 それではプラットホームに依存してしまう。
376 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 21:42:24.87 ] C++/CLIってCLI拡張の部分は標準化されてるけど ネイティブコードとどう結びつけるかは実装依存でしょ CLIに依存する記述だけ言語仕様から削ればCOMとのバインディングは実装次第ってことで問題ない
377 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 03:32:40.73 ] Win32アプリケーションとして作成したプロジェクトで、 作成されたウィンドウに.net framework用のコントロールを 貼ることは可能でしようか?
378 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 06:50:32.14 ] つ CWinForm... msdn.microsoft.com/ja-jp/library/6xfx8bsa (v=VS.80).aspx
379 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 15:35:43.23 ] >>378 ありがとうございます。 MFCのCViewの派生なんですね。 CView系は使いたくないのでちょっとソースを読んでみます。
380 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 20:45:06.45 ] 別にソース読まなくても、CWinFormsControl じゃ駄目なの?
381 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 22:52:53.28 ] >>380 CWinFormsControl で大丈夫そうですね。 ご指摘ありがとうございます。
382 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 15:27:11.67 ] >>362 多分わかってるだろうけど、おかしいよ。 Cは安全性を捨ててなんていない。安全性なんて無かった。
383 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 15:19:32.05 ] もともと持ってないものは捨てられないわな
384 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 23:44:09.15 ] WebBrowserコントロールにNewWindow2イベントを実装する main.tinyjoker.net/Tech/CSharp/WebBrowser%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%CBNewWindow2%A5%A4%A5%D9%A5%F3%A5%C8%A4%F2%BC%C2%C1%F5%A4%B9%A4%EB.html これをVC2008でやりたいんですけどどう書けばいいか分かる人いますか・・・
385 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 23:51:00.77 ] C++/CLIならほとんど何も違わないが C++/CLIはC++じゃないけどそれはわかってる? そんな質問するような人がなんでC++/CLIなんか使うのか正直意味がわからない 素直にC#使うか、C++やりたいんだったらネイティブでATLやMFC使ったほうが
386 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 13:53:12.58 ] 初心者用といっても、.NETとC++はマスターしてないと。
387 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 14:51:10.32 ] >>384 は>>385 の意味がわかるまで精進しましょう
388 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 15:51:31.18 ] むしろ初心者はC++/CLI使うな
389 名前:デフォルトの名無しさん [2011/10/29(土) 09:05:13.17 ] 今までFormで自動で作る機能でストリップメニューを作ってたのですがそうすると一個づつthis->A = gcnew... this->B = gcnew... みたいな感じで作られてしまって、ABCのときもあればABCDEの時もあるようにしたいので ループみたいな感じでまとめたいのですが array<System::Windows::Forms::ToolStripMenuItem>^ strips = gcnew array<System::Windows::Forms::ToolStripMenuItem>(5); というやり方だとは教わったのですがこれをメニューアイテムに登録するときに this->StripMenuItem1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->AToolStripMenuItem,this->BToolStripMenuItem,this->CToolStripMenuItem・・・} と書いてたのですがここはどうすれば良いでしょうか?
390 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:24:47.38 ] その前にusing namespace System::Windows::Forms;を入れることを激しくおすすめするw
391 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:30:46.12 ] どういうことですか?わかりやすく説明してください
392 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:50:02.99 ] array<System::Windows::Forms::ToolStripMenuItem^>^ じゃないの っていうかC++/CLIなんかやめてC#やれ
393 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:53:37.07 ] >>392 ありがとうございます そこは直しました this->StripMenuItem1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->AToolStripMenuItem,this->BToolStripMenuItem,this->CToolStripMenuItem・・・} ここに何を入れていいのかわかりません C#もやってますがどちらにしろ初心者でわかりませんし・・・
394 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 10:15:21.39 ] 配列を作ったら次は各要素にToolStripItemのインスタンスを代入する C#の入門書買って出直してきたら
395 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 16:39:02.97 ] for i=0 < .. <i++ IntPtr ptr(hoge[i]); strips[i] = (gcnew System::Windows::Forms::ToolStripMenuItem()); strips[i]->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(ptr);} hoge[i]はhoge[5][20]のWCHARです 先頭の一文字しかTextに入っていません。どうすれば良いでしょうか?
396 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 16:58:16.15 ] > Marshal.PtrToStringAnsi メソッド > アンマネージ ANSI 文字列から最初の null 文字に遭遇するまでのすべての文字をマネージ String にコピーし、 > 各 ANSI 文字を Unicode に拡張します。 何故、WCHAR*を入れられると思ったのだろうか msdn.microsoft.com/ja-jp/library/bb384865.aspx
397 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 17:13:28.22 ] >>396 >アンマネージ ANSI 文字列から最初の null 文字に遭遇するまでのすべての文字をマネージ String にコピーし、 > 各 ANSI 文字を Unicode に拡張します。 どの部分がcharって意味なんですか? ちなみにsize_t wLen = 0;errno_t err = 0;/*ロケール指定*/setlocale(LC_ALL,"japanese");/*変換*/err = wcstombs_s(&wLen, wStrC, 20, charmoji, _TRUNCATE);で直したらできました
398 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 18:45:00.94 ] array<System::Windows::Forms::ToolStripMenuItem^>^ strips = gcnew array<System::Windows::Forms::StripMenuItem^>(5); のstripsをフォームいじっても消えないところでグローバル宣言したいのですがどうすれば良いでしょうか?
399 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 19:27:05.70 ] >>397 ANSI 文字列って書いてるんだから違うものを入れるなよ しかも、文字列のマーシャリングとか>>397 のリンク先を見れば一発で解決するような超FAQだから、 そんな無駄なコードなんか貼らなくていいよ
400 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:13:45.13 ] >>398 クラス直下に書いとけば そんなレベルで試行錯誤してても時間の無駄だよ 悪いことは言わないからちゃんと1から言語を勉強してきたほうがいい(C#かCLIじゃない方のC++を)
401 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:22:47.79 ] arrayの内1つを消して間を詰めるにはどうしたら良いですか?
402 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:25:17.38 ] 無理。新しい配列を作ってコピーする。
403 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:32:43.14 ] arrayって使わない方が良いんですか? vectorとかの方が良いんですか?
404 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:35:25.75 ] .NETが絡むところでvectorは使うな 動的に要素数を変えたいならSystem::Collection::Generic::List<T>を使う もういいからC#やれ
405 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:36:42.68 ] じゃあ最後にC++/CLIのメリットを教えてください
406 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:38:40.01 ] マゾ御用達
407 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:53:12.14 ] キモかわいい array<Hoge^>^%はC#だとref Hoge[]で味気ない
408 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 21:28:13.45 ] for(int i=1;i<5;i++){this->textBox1->Text += (i + ". \n");} 改行しません。どうしてでしょうか?
409 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 21:39:23.47 ] \r\nと書かないといけないのですね ありがとうございました
410 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 01:30:07.13 ] WCHAR *g; *g= this->textBox1->Text->ToCharArray()[0] ; コンパイルは通るし画面のテキストボックスにも文字はちゃんと表示されてるのに オブジェクト参照がオブジェクト インスタンスに設定されていません とエラーが出て止まります。どうすれば良いですか?
411 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 02:45:15.47 ] ぬるぽ
412 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 02:53:26.62 ] ちょwwぬるぽじゃなくて教えれwww
413 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 06:25:43.59 ] ここまであからさまなぬるぽはないわ
414 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 06:27:02.15 ] 逝ってよし
415 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 08:46:35.87 ] まぁ、pin_ptr が何のためにあるのか、という話だな
416 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 23:46:48.11 ] C++/CLIのプロジェクトに C#のソースも追加出来ますが(Prof以上のみ?)、 C++/CLIからそのC#のクラスを使えますか? C#からC++/CLIのクラスは使えるようですが・・・
417 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:03:00.11 ] C#のソースは知らんが、C++/CLIから.netのクラスやら機能を使うのは.netの機能使うのと同じ
418 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:03:25.92 ] プロジェクトに追加するだけなら自由だが。 混ぜてコンパイルは無理。 dllを参照して使用するのは相互に可能。
419 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:35:20.55 ] やっぱ使えませんか 大人しくプロジェクト分けるしかないのですね・・・
420 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 15:39:11.10 ] アプリ起動中にpictureBox内に矩形を表示させておきたいのですが どこにコードを書けばいいですか? pictureBox_Paint内だと起動直後の一瞬しか表示されません
421 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 15:50:26.29 ] 大方CreateGraphicsとか使ってるんじゃね
422 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 16:39:49.74 ] その通りでした。ご指摘ありがとうございました
423 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 16:12:12.50 ] インテリセンスマダー?
424 名前:デフォルトの名無しさん [2011/11/10(木) 07:34:24.84 ] 質問です。 ネイティブ(アンマネージド)なC++の静的ライブラリを C++/CLIでリンクして使うと変な所で死んだりするんだけど、 こういう事しちゃだめなのでしょうか? 一旦ネイティブなDLLを作って、そこを介して呼べば死なないのですが・・・。 そのライブラリは実装を隠蔽するため クラスのインタフェース部分のみ公開して、 インスタンスの生成と開放を関数化してあるのですが、 つまりはnew/deleteがライブラリ内で実行され、 ライブラリ内でnewした結果を返し、マネージドコード内で保持し、 そのポインタをライブラリに渡してdeleteしてもらう形になっています。 よく分からないのは、わざとnewをせずポインタをNULLで初期化したままにしておき、 「NULLでなければ開放関数を呼ぶ」というコードを書いただけでも、 そこで死んでしまうのです。(NULLなので開放関数は呼ばれない!) vectorヘッダをインクルードするかしないかで、死んだり死ななかったりと、 挙動がおかしすぎて正直よく分からない状況です。
425 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 16:05:38.55 ] ファイナライザが別スレッドから呼ばれるからとかじゃない
426 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 18:54:13.34 ] using使ってるのでそこは大丈夫だと思います
427 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 23:05:46.09 ] (gcnew Form1)->Show(); で作成されたフォームに 元のフォームにある文字列変数を渡す方法があったら教えてください
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>% はできないので、配列 + オフセットの方が便利なのはその通りです。
487 名前:デフォルトの名無しさん [2012/05/27(日) 20:25:49.04 ] 引数としてstring型の配列を用いたいのですが・・・ 自分C#しかやったことないので・・・
488 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 20:28:19.00 ] void foo(cli::array<System::String^> ^bar);
489 名前:デフォルトの名無しさん [2012/05/27(日) 20:33:46.88 ] Thank you sir.
490 名前:デフォルトの名無しさん [2012/05/31(木) 15:51:08.78 ] cli::array<System::String^> ^hoge を char* hogehoge[] に変換したいのですが・・・
491 名前:デフォルトの名無しさん mailto:sage [2012/05/31(木) 16:43:56.11 ] >>490 ideone.com/XGbqa
492 名前:491 mailto:sage [2012/05/31(木) 17:00:23.87 ] すまん、コンストラクタが例外安全でなかったので修正した ideone.com/xbcbh
493 名前:デフォルトの名無しさん [2012/05/31(木) 17:15:25.25 ] 全然わかんね
494 名前:デフォルトの名無しさん mailto:sage [2012/05/31(木) 17:26:57.22 ] cli::array<System::String^> ^hoge = ...; char_pp p(hoge); char** hogehoge = p.get(); ってことなんだが char** は char* xxx[] を引数に取る関数にそのまま渡していい
495 名前:デフォルトの名無しさん [2012/05/31(木) 18:36:01.89 ] Hmm...
496 名前:デフォルトの名無しさん mailto:sage [2012/05/31(木) 18:57:30.99 ] 補足しておくと ・PtrToStringCharsで内部ポインタを取得 ・System::Stringはunicodeなのでwcstombs_sでマルチバイト文字列に変換 ・std::auto_ptr, std::vector, char_ppはRAIIイディオムにより例外安全にするため ・try{}catch(...){throw;}もchar_ppコンストラクタを例外安全にするため 用語はググってくれ もしC++初心者で.NETからよそのライブラリ使いたいとかなら C#からP/Invokeした方が多分楽
497 名前:デフォルトの名無しさん mailto:sage [2012/05/31(木) 19:02:53.62 ] P/Invokeですか・・・
498 名前:デフォルトの名無しさん mailto:sage [2012/06/01(金) 00:26:18.04 ] そんなコード書かれたら、俺なら普通に書き直しさせるわ 文字列のマーシャリングで標準のマーシャリング以外を使うなよ marshal_context c; for (...) native_str[i] = c.marshal_as<char*>(managed_str[i]);
499 名前:デフォルトの名無しさん mailto:sage [2012/06/01(金) 03:21:17.29 ] それコンパイル通るの?
500 名前:デフォルトの名無しさん mailto:sage [2012/06/01(金) 15:18:44.76 ] MFC 使うんだったら、CString に直接放り込めばいいだろうに CString strBuff(strManaged);
501 名前:sage [2012/06/08(金) 17:29:51.46 ] VC++2008のC++/CLIでUSBカメラが抜かれたことを検知したいのですが,どなたかわかりませんか? USBメモリーなら virtual void WndProc(System::Windows::Forms::Message% m) override { if(m.Msg == WM_DEVICECHANGE) { switch((int)(m.WParam)) { case DBT_DEVICEREMOVECOMPLETE: MessageBox::Show("out"); break; case DBT_DEVICEARRIVAL: MessageBox::Show("in"); break; } } Form::WndProc(m); } で判断できたんですが,USBカメラだとm.Wparamが変化しません...
502 名前:デフォルトの名無しさん [2012/06/09(土) 12:49:43.11 ] c++を使い始めたものなんですけど こっちはちゃんとなるんですけど www.dotup.org/uploda/www.dotup.org3073322.jpg includeを使うと www.dotup.org/uploda/www.dotup.org3073352.jpg こんな感じになっちゃって・・・(´;ω;`) だれか解決して下さいませんか?
503 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 12:58:27.44 ] 苦Cか
504 名前:デフォルトの名無しさん [2012/06/09(土) 13:00:34.24 ] >>503 正解 あれはとてもためになります ところで 対処の方法は?
505 名前:デフォルトの名無しさん [2012/06/09(土) 13:20:04.01 ] まずスレタイを読みます
506 名前:デフォルトの名無しさん [2012/06/09(土) 13:21:59.00 ] >>505 読みました さようなら
507 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 13:40:18.44 ] わろた
508 名前:デフォルトの名無しさん [2012/06/19(火) 22:37:50.62 ] DOSで趣味でプログラム組んでた程度で、APIめんどくせ、MFCうぜえってレベルなんだが 久しぶりにちょっとしたゲームでも作ろうとして VCに無料版があるのか!と飛びつき 無料版でフォームの統合環境まであるんか、今はMFCにかわってCLRなんかと早とちりし ネット漁ればサンプルやら何やらゴロゴロしてるかと思えば… 何じゃこりゃ
509 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 23:16:03.51 ] CLRってなんだよ。CLIはMicrosoftにも見捨てられかけてるのでね…泣けてくる。 どうせ.NET使うならもうC#で全部やっちまえよって感じか?
510 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:01:15.51 ] CLIは規格の名前、それのMSによる実装がCLR CLRに大量のライブラリ群を加えたやつが.NET Framework CLIに対応する構文を追加したC++だからC++/CLI >どうせ.NET使うならもうC#で全部やっちまえよって感じか? その通り。過去の資産を使わないといけないというような、必要に迫られて仕方なく使う物だよ。
511 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:14:40.12 ] ところでVC++のC++/CLIってMS CLRじゃなくて純粋なCLIで動くの? 一応CLIではアセンブリはネイティブイメージを持てるという決まりだった覚えがあるけど 細かい相互運用のことは決まってなさそう
512 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 03:37:32.95 ] C++/CLIをMonoで動かそうとするとCRT使えない&/clr:pureだったよね。今は変わったのかな?
513 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 07:32:37.59 ] >>508 そういう用途だったら、C#おすすめだけどね。 プロトタイピングに最適!
514 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 11:20:48.23 ] /clr:safe だね。 using namespace System; int main(array<String^>^ args) { Console::WriteLine("Hello World !"); } cl /clr:safe test.cpp mono test.exe でいける。
515 名前:デフォルトの名無しさん mailto:sage [2012/06/24(日) 02:05:59.36 ] www.atoker.com/blog/2012/04/12/llvm-europe-2012-cli-compiler/ ClangベースにC++/CLIコンパイラ作ったという話。 (1)と(2)とあるけど、どちらもVisual C++の吐く 混在アセンブリとは違う仕組みっぽい感じがする。
516 名前:デフォルトの名無しさん mailto:sage [2012/06/24(日) 20:35:21.91 ] VC++のclrで,ref classはなぜref classからしか継承できないんでしょうか? 仕組み的に継承先でgcとか実装されるなら別にvalue classからとかでも継承できていいと思うんですけど……
517 名前:デフォルトの名無しさん mailto:sage [2012/06/24(日) 22:14:12.48 ] というか普通のクラスをpublic refで継承したいのおおおお
518 名前:デフォルトの名無しさん mailto:sage [2012/06/25(月) 11:36:44.70 ] 継承出来ても仕組み上ハンドル変数にしか入れられないから意味なくね
519 名前:デフォルトの名無しさん mailto:sage [2012/06/25(月) 15:36:06.92 ] 構造体がなんかインターフェイスを実装してる場合には意味ないこともないが CLIを拡張するのに見合った利益があるかどうか考えると当然切り捨てだろうな あくまでC#とVBが主役なんだからC#やVBから使えないクラス作っても意味ない
520 名前:デフォルトの名無しさん mailto:sage [2012/06/25(月) 18:42:31.48 ] 混合型ェ・・・
521 名前:デフォルトの名無しさん mailto:sage [2012/06/25(月) 22:06:41.59 ] 混合型こそ仕組み的には特にできない理由がなくて比較的大きな利益のあるものだよな CLIやCLRを弄る必要もなく、コンパイラだけで対応できるはず 永遠に将来的に対応予定だが
522 名前:デフォルトの名無しさん mailto:sage [2012/06/26(火) 10:12:49.68 ] いや仕組み的に無理だから マネージド領域のポインタはfixedなしに取得してはいけない 実装部分でそれを止める(無いことを保証する)には宣言部分で付加情報が必要 それがrefキーワード ヒープ領域ならポインタを取得するのは問題ない だからrefクラスのメンバにポインタ型なら定義可能 コンストラクタでnewしてCLIデストラクタ(IDisposable)でdeleteすること
523 名前:デフォルトの名無しさん mailto:sage [2012/06/26(火) 10:13:55.17 ] 例 template <typename T> ref class ref_auto_ptr{ T* p; public: ref_auto_ptr(T* ap):p(ap){} ~ref_auto_ptr(){delete p;} T* get(){return p;} }; struct val_class{ val_class(){Console::WriteLine(L"new val_class");} ~val_class(){Console::WriteLine(L"del val_class");} }; ref class ref_class{ public: ref_class():p(new val_class()){} ref_auto_ptr<val_class> p; }; int main(array<System::String ^> ^args){ ref_class c; Console::WriteLine(L"a"); return 0; } ----------------- new val_class a del val_class
524 名前:デフォルトの名無しさん mailto:sage [2012/06/26(火) 12:26:48.81 ] 仕組み的に無理って C++/CLI のもともとの目的は混合型を実現することだったんじゃなかったか?
525 名前:デフォルトの名無しさん mailto:sage [2012/06/26(火) 16:07:00.24 ] Some Notes about Mixed Types blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx
526 名前:デフォルトの名無しさん mailto:sage [2012/06/26(火) 22:12:26.16 ] PODなネイティブ構造体をマネージ型に置いたり、マネージハンドルをメンバに持たない マネージ構造体をネイティブ型に置いたりするのは別に問題ないが(ミスを誘発しやすいという懸念はあるが) もっと一般的に混合型を扱えるようにする構想があったからとりあえず全部禁止しといたってことか で結局はC++/CLIそのものが見捨てられて計画倒れになり、理不尽な制限として残ってしまったと
527 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 03:22:10.94 ] ちょっとした配列をメンバに持ちたいときにmallocしたりgcnewしたりしないといけないのは なんとかならんかったんかなぁ、と思う。
528 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 08:24:51.05 ] >>525 の Point* G(R^ r) { pin_ptr<Point> pinp = &r.p; return pinp; } これってGCの問題というよりはC++でもよくあるミスの一種だよね ローカル変数のポインタを残すなってのと同類
529 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 10:51:13.99 ] 初心者みたいな質問ですがすみません。 今、マネージコードからネイティブなコードを呼び出す ということがやりたいのですが 例えば、native_program.hを #pragma unmanaged int func(int num){ return num*2; } のように書き、Form.hで #include "native_program.h" (中略) int num2 = func(50); (後略) のように呼び出しても、マネージコードでは呼び出せませんのようなエラーが出て上手くいきません。 1つのプロジェクト内で、ネイティブコードも書きながら、#pragma unmanagedを使って コンパイルするというのは無理なのでしょうか? www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_02.html ここにあるようにdll化して呼び出すということをしないとダメなのでしょうか。 これだとデバッグが大変なので、1つのプロジェクト内やりたいのですが・・・・ よろしくお願いします。
530 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 10:57:39.47 ] include ってそこに書いたのと同じ意味になるんだがそれはわかってる?
531 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 13:42:46.79 ] >>530 小一時間考え、 #include "native_program.h" の下に #pragma unmanaged を入れたら通りました・・・お騒がせしました ところで、func()は実際はクラスの中に入ってるのですが、 呼び出し側では、 Classname* classname; classname->func(); のようにすればOKなのでしょうか。この2行はマネージコードの中に入ってるけど 特にnewとかしなくても上の一行だけでクラスのオブジェクト作られてるのかなと・・・ というか、このように書いたら動いたのでOKなのかなと思ってるのですが。
532 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 13:43:46.48 ] 失礼、#pragma managedです。。。 書き間違いました^^;
533 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 14:15:48.48 ] オブジェクトは無いだろう。 thisポインタがNULLのまま
534 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 14:23:15.98 ] オブジェクトはないけど動いている・・・ ということは、実行ファイルを直接読んでるということか・・・ よくわからないし動いてるので気にしないことにします^^; 失礼しましたw
535 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 14:24:02.48 ] >>531 Classname classname; classname.func(); ならOK
536 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 14:50:42.50 ] まあ素直にstaticつけようぜ
537 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:05:30.83 ] なんで動いてるか気持ち悪かったのでやっぱりnewとdelete追加しときましたw >>535 それだとコンパイルする人がエラー出しますね >>536 やっぱ暗黙的に静的インスタンス?みたいなの作られてて、それのポインタになるんですかね 実体がなかったら動くわけないし。 デバッガでみたらポインタは未定義の値みたいになってましたけど
538 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:12:22.35 ] 仮想関数じゃねーんだから、実体があるとかどうとか関係無い。 単に関数呼んでるだけだ、未定義のthisポインタでな。
539 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:24:21.57 ] >>537 >実体がなかったら動くわけないし ところがCやC++では動く。 速度重視のため、安全確保のための自動チェックなどは行われない。 そしてメンバ変数に代入すると何処とも知れないメモリアドレスを書き換えて 所謂セキュリティホールになったりする。 メモリアクセス違反で強制終了するのはまだ良い方。
540 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:30:07.51 ] >>539 いあいあ、実体というか、どこかに機械語のコードがなかったら動くわけないですよね? その場所がわからないとうか、管理されてないというかんじなのかな? OSが管理してて、そのOSによるということなのかなあ
541 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:35:31.60 ] しったかしてるから初心者みたいな勘違いしたままなんだよ
542 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:36:54.37 ] >>540 まず「ヒープ」「スタック」「コードセグメント」あたりの 基礎から勉強すべき
543 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 15:44:18.84 ] C++/CLIってC++と.NET両方の知識がある人向けだから そうでない人はC#でP/Invokeを使った方がいいと思う。
544 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 01:46:27.01 ] 今更だけど、pragma managed も push pop できたと思うよ。
545 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 09:51:50.05 ] まあヘッダに入れてるしC++勉強始めて3日くらいの知識でC++/CLIとごっちゃで勉強すると 後で困ると思うがなあ
546 名前:デフォルトの名無しさん mailto:sage [2012/07/03(火) 11:14:40.00 ] VisualC++の入門書を買って来たらC++/CLIの本だったのは良い思い出・・・
547 名前:デフォルトの名無しさん mailto:sage [2012/07/03(火) 14:15:43.34 ] 「シー教えてくれ」と言われ見たらC#
548 名前:デフォルトの名無しさん mailto:sage [2012/07/04(水) 11:10:26.99 ] そのときの「シー」は半音上がってたんだろうw
549 名前:デフォルトの名無しさん [2012/07/08(日) 14:06:13.60 ] >>548 うまいw
550 名前:デフォルトの名無しさん mailto:sage [2012/07/13(金) 12:10:27.73 ] C++/CLI で暗黙のバッキングストア使うとき、get/setで異なるスコープにすることはできますか? C# であれば public Hoge { get; protected set; } のような感じで。 ちなみに今使っているのはVS2008です。
551 名前:デフォルトの名無しさん mailto:sage [2012/07/13(金) 21:51:43.58 ] 出来るよ。 ref class Clazz { property int XXX { private: void set(int iA); public: int get(); } };
552 名前:デフォルトの名無しさん mailto:sage [2012/07/13(金) 22:09:27.40 ] >>551 ありがとー。 本体を書かなければ自動生成されるんですね。いわゆるWeekシンボルってやつかな。 >>550 × public Hoge { get; protected set; } ○ public int Hoge { get; protected set; }
553 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 19:16:48.08 ] XmlTextReaderでxmlファイルを読み込むとき,ファイルがあるかないかの判別はどうすればいいですか?
554 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 19:22:48.77 ] 例外見ればいいだろ
555 名前:553 mailto:sage [2012/07/19(木) 19:31:55.14 ] msdnにあるFileNotFoundExceptionを使うのでしょうか? 使い方がいまいちわかりません・・・ 恐縮ですができればサンプルコードを書いていただけませんか? XmlTextReader^ reader = gcnew XmlTextReader( "sample.xml" );
556 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 21:32:34.53 ] XmlTextReaderのコンストラクタを直接触るのは非推奨 try { XmlReader^ reader = XmlReader.Create( "sample.xml" ); } catch (FileNotFoundException^ ex) { Console::WriteLine("ファイルが見つかりません。"); } C++/CLIは君みたいな人が足を踏み入れるようなもんじゃないし 頑張ったところで特にメリットもない 今すぐC#かネイティブのC++へ移行することを強くお勧めする
557 名前:556 mailto:sage [2012/07/19(木) 21:37:22.99 ] C#とごっちゃになってた XmlReader::Createの間違い
558 名前:553 mailto:sage [2012/07/19(木) 22:01:25.04 ] >>556-557 ご回答ありがとうございます 助かりました 基礎ができていないのは痛感しております・・・ もしおすすめの参考書があれば教えていただけると幸いです・・・
559 名前:デフォルトの名無しさん mailto:sage [2012/07/19(木) 22:11:53.24 ] 悪いことは言わん どうしてもC++/CLIを使わないといけないのなら、まずはC#を覚えるのが近道だ C#なら入門者向けの書籍やサイトなどもいくらでもあるし、 C++/CLIの.NETの部分はC#もどきの劣化版にすぎない。
560 名前:553 mailto:sage [2012/07/20(金) 00:50:32.54 ] >>559 なるほど・・・ しかし今作っているプログラムを作り直す時間がありませんので ひと段落してからC#の勉強をしたいと思います・・・ ありがとうございました.
561 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 10:49:26.48 ] なぁ、実際C++/CLIの利点て具体的にどうなの? C++で作ったライブラリもユニコード使用でないとオーバーヘッドかかるし .NET側にC++クラスのオブジェクトを入れるとポインタ使用になるし。 まぁ、パソコンも進化続けるから、アプリの重さも気にはなくなるだろうけど。
562 名前:デフォルトの名無しさん mailto:sage [2012/07/20(金) 11:24:54.04 ] ホスト:アンマネージ、プラグイン:.NETの場合は、C++/CLIなしでやろうとすると COMを経由してCLRをホストしたりとかクソ面倒臭い .NETからC++のクラスを使いたい場合、C++/CLIではなくDllImportを使うとなると いったんC向けのフラットなインターフェイスにラップしてやらないといけなくてクソ面倒臭い どっちにしろC#とアンマネージC++を両方使う場合にのみ役に立つ
563 名前:デフォルトの名無しさん mailto:sage [2012/08/02(木) 20:07:41.60 ] 質問させて下さい。 visual studio 2005でC++/CLIを用いて開発を行なっています。 ref struct AA { public: int a1; } refクラスの上記のような構造体を定義してそのオブジェクトを2つ作り、 AA a, aa; a = aa; (例なので初期化せずに代入しています) とすると「error C2582; 'operator '=' 関数を 'AA' で使用できません」となってしまいます。 実際にはrefクラスの構造体を引数として渡したかったのですがC2664になってしまいビルドが通りませんでした。 そこで一番単純な構造体の代入コードを記述したところ、上記のようなエラーとなりあました。 いろいろ調べてみると、refクラスはコピーインスタンスとコピー代入演算子をデフォルトで自動生成しない ということが原因かと考えたのですが対策が思いつきません。 refクラスの構造体の代入とコピーの方法をご教授いただければ幸いです。よろしくお願い致します。
564 名前:デフォルトの名無しさん mailto:sage [2012/08/02(木) 20:16:58.19 ] で、値をコピーしたいの? 参照だけで良いの? value struct AA じゃ駄目? ^は知ってる?
565 名前:563 mailto:sage [2012/08/04(土) 11:12:00.62 ] >>564 レスありがとうございます。 私の勉強不足のため、クラスライブラリ側の宣言はref structで宣言しないとダメだと思い込んでいました。 しかも、クラスライブラリ以外のプロジェクトでも同様の結果になるため、勝手に環境の説明を省いてしまいました。 申し訳ありません。 ご指摘の通り、value structにすることで解決できました。ありがとうございました。
566 名前:デフォルトの名無しさん mailto:sage [2012/08/07(火) 23:03:24.56 ] PathCombainのstd::string版ってないですかね?
567 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 09:35:42.88 ] この本って古本で定価の倍でも買う価値あります? 実践C++/CLI 極めるための基礎と実用テクニック www.amazon.co.jp/dp/4797336277/ 最近、DirectXをWPFから呼び出す必要が出てきて…… でも、VS2012と.NET4.0が出たときに 新しい本がいろいろ出版されるような気もしますよね……
568 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 12:10:48.40 ] 2012は4.5だ
569 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 18:33:32.45 ] >>567 SlimDXを使うか、読めば足りるんじゃないか。
570 名前:デフォルトの名無しさん mailto:sage [2012/08/10(金) 10:02:39.92 ] 使いたいDirectXの機能によっても代わるよなぁ
571 名前:デフォルトの名無しさん mailto:sage [2012/08/10(金) 13:32:29.83 ] > マイクロソフトから、お客様のアプリケーションがたくさんの人々の目に触れ、 > 試用および購入されるのをサポートする、新しい特典をお知らせいたします。 > MSDN サブスクライバーであるお客様は、1 回のご購入で 12 か月有効な > Windows ストアおよび Windows Phone の開発者アカウントを取得すること > ができます。 AzureはVLで買っても契約期間分使えるのに(厳密にいうと少し違うが)、 これはVL(2or3年)で買ってると悲しいな。
572 名前:デフォルトの名無しさん mailto:sage [2012/08/10(金) 13:34:07.44 ] テラ誤爆…サーセン
573 名前:デフォルトの名無しさん mailto:sage [2012/08/10(金) 14:19:24.98 ] toro.2ch.net/test/read.cgi/tech/1323588154/672
574 名前:デフォルトの名無しさん mailto:sage [2012/08/11(土) 01:18:09.35 ] (;´д`)アアン
575 名前:すとら [2012/08/14(火) 03:35:57.72 ] VS2010でフォームアプリの勉強をしています。 unmanagedクラスで別スレッドにて不定期で呼ばれる関数から、 managedなフォームの内容を変更したいと考えています。 下記のようにコーディングしましたが、stackoverflow(InvokeRequiredがずっとtrueのため) で動きません。。どなたか適切な方法を教えていただけないですか? 1.managedなformメソッドとしてform編集メソッド作成 2.スレッドセーフにするためInvokeでラップ 参考:blogs.yahoo.co.jp/fireis_myblood/25643271.html 3.delegate->Marshal::GetFunctionPointerForDelegate()でポインタ化 4.unmanagedの不定期呼び出され関数に2の関数ポインタを設定 5.実行
576 名前:デフォルトの名無しさん mailto:sage [2012/08/14(火) 04:28:26.47 ] Marshal::GetFunctionPointerForDelegate の返り値を CreateThread の第四引数に渡して別スレッドから呼んでみたけど、 別スレッドからの呼び出しでは InvokeRequired は true になって、そこで Invoke した先では false になったよ。
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 なるほど。ありがとうございました。