くだすれC++/CLI(初心者用)part2 [sc](★0)
-
- 1
- ./1256645713/662
- 2010/03/15(月) 09:41:19
-
おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!
このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。
前スレッドはこちら
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l1
dat落ち姉妹スレ
C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/l1
http://pc11.2ch.net/test/read.cgi/tech/1142147319/l1
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l1
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l1
-
- 922
- 2015/09/16(水) 11:35:11.25
-
>921
ttps://gist.github.com/anonymous/db1149cb0a1afbd1f6d8
書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
auto x = gcnew CSV(line1);
ary_int[0] = x->read_int(0);
ary_double[0] = x->read_double(1);
-
- 923
- 2015/09/16(水) 21:00:32.05
-
>>922
おお、ありがとうございます。
template<typename ... Ts>でTsはバラバラでもいけるんですね。知りませんでした。
あと、再帰で一つずつ剥がすのも思いついていませんでした。ググルと定番のようですがorz
> 書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
ちなみにその記述は今の状態です。
ただ、これだと抽象度が低いため記述量が増え、ちょっと保守性に問題を生じ始めています。
結局のところ、同じフォーマットの行を大量に処理して配列に突っ込むだけなので、
最終的には「ファイル名」「フォーマット」「対象配列」でよく、最上位からは(型情報ありなら)
parse_csv(filename, &ary0, &ary1, ...);
の1行にしたいのです。その下のファイル→行のところでコメント等をはがし、
delegateでparse_lineを呼ぶ算段でしたが、ポインタが渡せずに困っていました。
大変助かりました。ありがとうございました。
と思ったのですが、parameter pack はC++11の機能で、VS2013以降からのようです、、、
VS2015でそちらのコードが動作するのを確認しました。
自分が使っているのはVC++2008なので、この機会に移行を考えますorz
当面はせいぜい10個なのでunpackしたものを自分で書きますが、、、
-
- 924
- 2015/09/16(水) 21:06:19.21
-
すいません、やや話が前後しているので念のため一部訂正します。
元々 delegate から parse_line を呼ぶつもりでしたが、
最終的には可能なら parse_csv に纏めようとしています。
ただ parameter pack が使えないとやっぱキツいですね、、、
-
- 925
- 2015/09/16(水) 22:14:50.26
-
行によってフォーマットが違わない(ファイルによっては違うのかな)のなら、
行をパースした結果の型を定義しちゃったほうが保守性は上がると思うけど、縦方向の配列が必要なんだろうなぁ。
-
- 926
- 2015/09/16(水) 22:41:51.71
-
>>925
はい、ファイルによってフォーマットは違い、行では変わりません。
演算ソースを読み込むのに使うので、速度は遅くても構いません。
ただ一部、各行の先頭数値によって行のフォーマットを変えている部分があるため、
元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
ただこれはソースファイルが増えるのが面倒なので一部にパッチを当てたからであり、
きちんと修正すれば parse_file に一本化できるので、この方向で検討中です。
実は縦方向の配列は不要で、各行での構造体化も検討中です。
-
- 927
- 2015/09/16(水) 22:55:17.14
-
すいません、また細かいところで間違えました。一応念のため訂正しておきます。
× 元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
○ 元々は上位で parse_file を呼び、対象オブジェクトのメンバ関数を delegate で渡し、
メンバ関数内で先頭数値を見てフォーマットを区別し、そこから parse_line を呼ぶつもりでした。(現時点で動作中)
今は上位で メンバ関数 Hoge.init(filename) を呼び、init内で全部済ませる方向です。
これまで全くオブジェクト指向をしておらず、それでも大して問題なかったのですが、
いい加減無理になってきたので、今更ながら粗結合化をやろうかというところです。
-
- 928
- 2016/02/15(月) 00:11:59.92
-
「System.Collections.Generic.List<T>型」を「LPARAM型」に変換する方法、
またその逆の変換をする方法、を教えて下さい。
List<T>型をLPARAM型に変換する必要があり、
その後で、List<T>型をLPARAM型から再取得する必要があるのです。
-
- 929
- 2016/02/15(月) 01:15:53.23
-
「その後で」がスコープを抜けた後を意味するなら、そのような方法はありません。
-
- 930
- 2016/02/15(月) 07:40:32.53
-
marshal_as を実装すればいいと思うよ。
LPARAM って実体は void** じゃなかったっけ
-
- 931
- 2016/02/16(火) 07:41:35.26
-
>>930
言語はC++ cli です。
msclr::interop::marshal_context mct;
LPARAM lParam = mct.marshal_as<LPARAM>(this->child_window_list);
↑で実装すると↓のコンパイルエラーとなります。
error C4996: 'msclr::interop::error_reporting_helper
<_To_Type,_From_Type>::marshal_as':
This conversion is not supported by the library or the header file needed for this conversion is not included. Please refer to the documentation on 'How to: Extend the Marshaling Library' for adding your own marshaling method.
またList<T>型をLPARAM型に再変換する方法が分かりません。
-
- 932
- 2016/02/16(火) 09:54:31.98
-
経緯を見ずに
子ウィンドウリストの扱いとして妥当とは思えないが
-
- 933
- 2016/02/16(火) 15:12:48.61
-
LPARAMの使い道がEnumWindowsの第二引数とかだったらやりようがあるけど、そういうコードではない?
-
- 934
- 2016/02/17(水) 07:42:51.53
-
解決しました。
c++の世界で一時変数を設けて、ポインタを渡し、reinterpret_castで復元する、という方法です。
-
- 935
- 2016/02/18(木) 02:54:21.18
-
(たぶん解決してないなー、と皆が思ってる)
-
- 936
- 2016/02/20(土) 19:06:01.50
-
質問です。
+= で追加したフォームのイベント順を入れ替えたいのですが、やり方はありますか?
条件
1. デザイナは使いたい(既に大量に使っている)
2. 格好悪い書き方で全く問題ないが、全体的に書き直すのはNG
状況
numericUpDown->Changed 等に対してデザイナ上から再描画関数を割り当てています。(A)
(波形を表示する時のボリュームのような使い方です)
デザイナではフォームはデフォでは static でないため、
内部の別クラスからは numericUpDown->Value 等にはアクセスできません。
(自分でstaticと書いてコンパイルを通すことは出来ますが、デザイナで変更するたびに戻されます)
そこでイベントに別関数も割り当て、そこで内部 static struct に Value 等を書かせ、(B)
別クラスからはこの static struct を参照しています。
このとき、AとBの経路が完全に分離しているうちはよかったのですが、
統合していくうちにA内部から別クラスを呼ぶことが発生し、 static struct が未更新なのでバグっています。
イベントは追加順に呼ばれるようです。
デザイナで指定したイベント関数はフォーム生成時に指定される為、必ず A->B の順で呼ばれることになります。
これを B->A の順に入れ替えたいのですが、方法はありますか?
-
- 937
- 2016/02/20(土) 19:06:30.87
-
プログラムイメージ
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += 再描画関数; // (A)
someForm->Changed += struct更新関数; // (B)
static ref struct FormData {
Decimal someForm_value;
} formData;
function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
formDataを使う別クラスを使用 // formDataは未更新なのでバグる
}
やってみたこと
numericUpDown->Changed = Delegate::Combine(struct更新関数, 再描画関数); // 上書き再設定しようとしたが = は使えない
どうやら +=(add) と -=(remove) しかないので、(中身を参照できない)
一つずつ array<Delegate^> に吸い出して += で希望順にちまちま再設定も出来そうにありません。
全部の(A)の頭に(B)を追加してイベント経路を一本化すればいいのは分かりますが、
これは大量に書き換えが必要となります。
今現在(B)は後付で全てのフォームを列挙して追加しています。
この部分だけの変更に留められるのならそうしたいのです。
リフレクションも試しましたが、以下でeventInfoは取れますがその先に進めません。
System::Reflection::EventInfo^ eventInfo = (NumericUpDown::typeid)->GetEvent("ValueChanged");
以上、よろしくお願い致します。
-
- 938
- 2016/02/21(日) 05:32:00.14
-
> デザイナではフォームはデフォでは static でないため、
> 内部の別クラスからは numericUpDown->Value 等にはアクセスできません。
ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。
FormDataはstaticにせずForm1のメンバにして、その中身が変化したときのイベント
(ここに再描画関数を += して、EventArgsでパラメータを渡す)を足すのが良いのでは。
-
- 939
- 2016/02/21(日) 12:45:43.68
-
>>938
回答ありがとうございます。
それでも解決しますが、それは全面改訂になります。
既に(B)を全ての(A)の頭に入れるという解決策はあり、それの方がデグレードの危険が少ないです。
ただ、リフレクション等で(B)と(A)の順を入れ替えられると、数行の変更で済み、デグレードは発生しません。
だからそれを探しています。
Form1と別クラスCを追加して再度説明します。
全てはForm1の内部クラスです。継承はしていません。
-
- 940
- 2016/02/21(日) 12:46:15.32
-
【今】
ref class Form1{
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += 再描画関数; // (A)
someForm->Changed += struct更新関数; // (B)
static ref struct FormData {
Decimal someForm_value;
} formData;
function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
// struct更新関数() // (B)を += せずにここに入れれば解決する、ただし変更箇所多数
formDataを使う別クラスCを使用 // formDataは未更新なのでバグる
}
ref class 他のクラスC {
描画用データ作成 // ここで someForm->Value を使いたいが直接には出来ないので仕方なく static formData を確認
}
};
問題点:
クラスCから someForm->Value が取れないので static struct FormData で誤魔化す。
ただしこれだとイベント順が「描画(A)」→「データ更新(B)」となり、描画内容が1イベント分ずれる。
このため、(B)と(A)の処理順を入れ替えたいが、方法が見あたらない。
-
- 941
- 2016/02/21(日) 12:46:44.50
-
【>>938の提案】
ref class Form1{
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += struct更新関数; // (B)
ref struct FormData { // static ではない
Decimal someForm_value;
} formData;
formData->someForm_value->Changed += 再描画関数; // (A) // 自作クラスFormDataにChangedイベント追加
function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
formDataを使う別クラスCを使用 // formDataは常に更新済み、formDataを呼び出し時に渡す
}
ref class 他のクラスC {
描画用データ作成 // formData を参照
}
};
問題点:
イベント処理順は「データ更新」→「描画」と正しく固定される。
ただし全面改訂になる。
-
- 942
- 2016/02/21(日) 12:47:27.88
-
> ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。
結果: 描画に使われるデータが1イベント分ずれる
原因: イベント順が「描画」→「データ更新」だから
何か間違いはありますか?
データ構造としては本来は class Form1 : FormData となるべきため、
static で使うことも問題ないと思います。
既に記述されて動いているプログラムがあり、それを変更しようとしています。
データ更新→描画にプログラム上で固定するのはスクラッチからなら当然ですが、その場合にも結局
「どのデータが更新されたか→どの部分を再描画する必要があるか」を記述する必要があります。
この部分は今既にデザイナ上にあり、動いているので、それをそのまま利用する方法を探しています。
-
- 943
- 2016/02/21(日) 20:54:36.76
-
結果:アクセスできない
×原因:staticじゃないから
○原因:設計が悪いから
http://www.c-sharpcorner.com/uploadfile/b81385/how-to-change-order-of-event-handlers-execution-at-run-time/
リファクタ無理だというならここにあるC#のコードをC++/CLIに移植すればよいのでは。
-
- 944
- 2016/02/22(月) 00:23:23.86
-
リンク先のコードでイベント順を入れ替えることが出来ました。
ありがとうございました。
プログラム構造については色々意見はあるとは思いますが、
最初から固まっている仕様に対して一度作って終わりなら誰も苦労しませんよ。
複数有る解決策のうち、今現在見える範囲での最適解をその都度選んでいくしかありません。
A. イベント順を入れ替えても
B. 各イベントハンドラの頭にデータ更新を挿入しても
C. 他クラスに対していちいちForm1オブジェクトを渡してstaticではなくしても
制御フローは同じです。(切り出し面が異なるだけ)
今後FormDataクラスや「他のクラスC」はForm1外でも使う可能性があるのと、
デグレードに対するデバッグの困難さを考えて、今回はAを選んでいるだけです。
まあいずれにしても、解決しました。
ありがとうございました。
なおリンク先、最後に小言が書いてありますが、完全に同意ですよ。
本来はイベントテーブルを参照できるメソッドが有ればいいだけです。
-
- 945
- 2016/02/23(火) 04:03:35.79
-
本来はまともな設計をすればいいだけだよ
+= した順番に呼ばれるのもたまたまそういう実装になってるだけでしょ
-
- 946
- 2016/02/29(月) 00:09:05.42
-
イベントの実行順はaddされた順だと仕様化されてる
-
- 947
- 2016/04/25(月) 16:38:42.40
-
質問失礼します。
'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' を読み込みました。Cannot find or open the PDB file
'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' をアンロード
このアンロードはどうやって止めるのでしょうか?
実行した際に、dll内のメソッドを参照できないようで、以下のエラーとなります。
ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン
ブリ 'hoge.dll'、またはその依存関係の 1 つが読み込めませんでした。
指定されたモジュールが見つかりません。
場所 hoge.hogeclass..ctor()
場所 main(Int32 argc, SByte** argv)
場所 _mainCRTStartup()
コンパイルはできています。
よろしくお願いします。
(なんか急にできなくなった気がします。前は、問題無だったはずなのになぁ)
追記
他にも、以下のような、謎のメッセージも出ています。
'abc.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'abc.exe': 'ImageAtBase0x10000000' をアンロード
よろしくおねがいします。
-
- 948
- 2016/04/26(火) 04:22:33.77
-
「cannot find or open the pdb file c++」で検索!
-
- 949
- 2016/04/26(火) 10:52:45.55
-
アンロードは気にするな
dllの場所をあちこちコピーして試してみ
-
- 950
- 948
- 2016/04/27(水) 15:26:32.30
-
思い出しました。
ildasm,ilasmをつかって、その該当のdllのPCBを作りました。
(dllの中まで、デバッガで追いかけるためです)
あたらしくコンパイルしたDLLへ、前のPCBがなかったものから、リンクを張り替えました。
そしたらエラーが出るようになった気がします。
(あくまで、気がするだけです。なんら、確かな関連はわかりません)
しかし、現在は、以前のオリジナルのDLLをリンクしています。
その状態でエラーが出ています。
>>949
回答ありがとうございます。
/LIBPATH の場所
exeと同じフォルダ
program filesフォルダのvisualSTUDIOフォルダ
それらに置き直しました。が、駄目でした。
-
- 951
- 2016/04/27(水) 16:32:56.37
-
xyz.dllが依存している何かのDLLが見つからないんじゃないの
dependency walkerとかcygwinのlddとかで確認してみたら
-
- 952
- 2016/04/27(水) 17:53:59.20
-
参照設定に入れてるんじゃないの?
一旦外して参照設定しなおしてみては
-
- 953
- 948
- 2016/04/27(水) 18:59:04.66
-
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\newxyz.exe' を読み込みました。シンボルが読み込まれました。
'newxyz.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
-----------------------------------------省略
'newxyz.exe': 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Culture.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
'newxyz.exe': 'C:\WINDOWS\assembly\NativeImages_v4.0.30319_32\mscorlib\cece9d0256e18427b64587ba690605d4\mscorlib.ni.dll' を読み込みました。シンボル ファイルにネイティブ シンボルがありません。
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll が読み込まれました。シンボルが読み込まれました。
ー---------------省略
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll が読み込まれました。シンボルが読み込まれました。
'newxyz.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'newxyz.exe': 'ImageAtBase0x10000000' をアンロード
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\xyz.dll' が読み込まれました
'newxyz.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'newxyz.exe': 'ImageAtBase0x10000000' をアンロード
----------------続きがあります
----------------続きがあります
-
- 954
- 948
- 2016/04/27(水) 19:01:17.20
-
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\netClient.dll' を読み込みました。Cannot find or open the PDB file
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\netClient.dll' をアンロード
newxyz.exe の 0x7c812aeb (kernel32.dll) で初回の例外が発生しました: Microsoft C++ の例外: EEFileLoadException (メモリの場所 0x0012d0e8)。
----------省略
'System.IO.FileNotFoundException' の初回例外が newxyz.exe で発生しました。
'newxyz.exe': 'C:\WINDOWS\system32\version.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
'System.IO.FileNotFoundException' のハンドルされていない例外が newxyz.exe で発生しました。
追加情報: ファイルまたはアセンブリ 'netClient.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたモジュールが見つかりません。
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました
スレッド 'メイン スレッド' (0xe48) はコード 0 (0x0) で終了しました。
スレッド 'Thread::intermediateThreadProc' (0xec8) はコード 0 (0x0) で終了しました。
スレッド 'HelperCanary::ThreadProc' (0xec4) はコード 0 (0x0) で終了しました。
プログラム '[3652] newxyz.exe: ネイティブ' はコード 0 (0x0) で終了しました。
プログラム '[3652] newxyz.exe: マネージ (v4.0.30319)' はコード 0 (0x0) で終了しました。
-
- 956
- 2016/05/01(日) 16:47:47.97
-
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
1w
-
- 957
- 2016/10/22(土) 11:55:32.76
-
大分人が居ないみたいだけど、質問させてください
archlinux(x86_64)+gtkmm3(3.22.0)+epoxy(1.3.1)+glsl上のOpenGLで隠面消去をしたいのですが
glEnable(GL_DEPTH_TEST)しても上手く行きません。fragment shaderの部分で書くのでしょうか?
もしサンプルなど有りましたらURLを教えて頂ければ幸いです。
OpenGL、GLSL周りの情報は何処を見て何処を出せば良いのか分からず不明ですが宜しくお願いします
少し問題の発端を・・・
以前はgtkmm3+glewで某ホームページで点にテクスチャを貼って大きさを変える方法を利用してました
(1) gtkのアップデート → context周りが上手く機能せず
(2) GLAreaクラス使用する → オプションとか無効なものが発生、描画命令が上手く動かない
(3) GLSLを使うようにする → アルファテストは何とか解決、隠面消去が実装方法が分からず
※オンボード(core i7 4771)のグラフィックを使っているせいかGLSLのバージョンも1.3以上にできないみたいです
-
- 958
- 2016/10/22(土) 12:52:21.05
-
おおいたじん
-
- 959
- 2016/10/23(日) 21:52:15.85
-
わかったぁぁぁぁ!!!
glEnable( GL_DEPTH_TEST );
ではなく
set_has_depth_buffer();
でデプスバッファを有効にするみたいだ
こんな所まで変える必要はないだろうに・・・
-
- 960
- 2016/10/23(日) 23:42:58.00
-
すれ違いな事を分かれよw
-
- 961
- 2016/10/24(月) 00:49:08.07
-
いや誘導されてきたしw
普通のくだすれ落ちてるし
スレ立てるまでもないスレの方が良かったのかな?
-
- 962
- 2016/10/24(月) 08:15:21.68
-
「くだすれ行け」って言われてこのスレに誘導されたと思ったんなら頭悪すぎるわ。
-
- 963
- 2016/10/24(月) 10:37:31.81
-
>>962
ほんそれ
-
- 964
- 2016/10/24(月) 12:49:59.59
-
まあ /CLI の文字はわからない人には見えないからな
-
- 965
- 2016/10/24(月) 15:51:40.64
-
くだすれC++だったとしてもスレ違い
-
- 966
- 2016/11/03(木) 11:44:11.90
-
C#で言うオブジェクト初期化子に相当する機能ってC++/CLIに用意されているんですかね?
getアクセッサしかないプロパティをコンストラクト時に初期化して使うようになっている
ライブラリがあったんですけど、もしかしてそういうクラスはC++/CLIから使えない?
-
- 967
- 2016/11/03(木) 16:15:49.29
-
{ hoge : 774, fuga : 37564 } { .hoge = 774, .fuga = 37564 } みたいなやつ?
俺も2015で以前に探したけど見つからなかったな
どうなんだろうね、あるのかな
-
- 968
- 2016/11/03(木) 16:49:50.16
-
それです。
VBには追加されているみたいだけど、C++/CLIは見捨てられているなぁ。
-
- 969
- 2016/11/03(木) 17:54:07.51
-
VSの作りからして、それはないんじゃないかな
MFCでリボンじゃない方のドッキングのプロジェクト作るとわかるけど、
あれがものの見事にVSのドッキングだからね
かつデザイナは当然ユーザが生成する(した)フォームは(特にユーザコンポーネント)
.NETでビルドされたものをデザインタイム用に直接呼び出してる
(デザイナでエラーが出るだのインテリセンスが良く落ちるだの言ってるのは
VSの作りを”なんとなく”ですら理解できてない証拠)
MSとしてはVSで次のVSを作ったりする為にもC++/CLI作りこみたいけど
非常に言語体系が複雑かつ莫大な工数が必要で追いついてないんじゃないかなと妄想
既に市場のソフトウェアの価格破壊はとっくに完了
後はストアかUbuntuOnLinuxでサーバ市場か開発シェアで食い込むしかなさそうだし
-
- 970
- 2016/11/08(火) 19:00:23.92
-
亀レスだが何となく妄想が閃いた
MS主導とはいえ、C++/CLIってなんかの国際的な規格みたいなので規定された
れっきとした規格だからおいそれと追加できないんだ
んで、C#もC++も構造体(クラス)の初期化子持ってるから昔みたいな適当に
「MS独自の拡張でーす」とかやっちまうと収拾つかなくなりそう
とはいえ { 0, ,1 2 } は後からメンバ追加したとき修正忘れとかトラブルの元だし
構造体宣言→ZeroMemory→b=1; c=2;はエイリアス切らないとconst修飾できねーし
(エイリアスはヒューマンエラーの元、constじゃないと最適化掛からないケースあり)
さっさと対応して欲しいとこではある
-
- 971
- 2016/11/08(火) 22:29:24.78
-
混在アセンブリが作れるのはC++/CLIだけだし非常にもったいないと思うんだが、
MS自身も既にグルー用途以外での新規採用を推奨してなかったんじゃないかな。
もうちょっと力入れてくれてたらMFCなんか捨てられたのに。
-
- 972
- 2016/11/08(火) 22:58:35.07
-
ttps://support.microsoft.com/ja-jp/kb/3001686
これかな
そのわりにはVSには使ってんだよな
MFCしながらマネージコードをデザインタイムで呼び出してフォーム表示しなきゃならんから
仕方ないのかも知れんけど
このページを共有する
おすすめワード