くだすれC++/CLI(初心者用)part2

レス数が1000を超えています。これ以上書き込みはできません。
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
918912
垢版 |
2015/05/29(金) 21:54:54.52ID:ky+HtZPS
912です。>>917さんの意見も含め、別の観点からもみてみたところ
・・・非常にお恥ずかしいオチになったのですが、解決しました。

問題はコードではなく、BindParameter時のCHAR検索する箇所(SQL_CHAR)が
DB側でいつの間にかvarcharになっていたのが原因でした。合わせてやると簡単に使えるように…
みなさん、お騒がせして申し訳ありません。
919912
垢版 |
2015/05/29(金) 22:03:04.73ID:ky+HtZPS
>>918
×CHAR検索する箇所(SQL_CHAR)がDB側でいつの間にかvarcharになっていた
○CHAR検索(SQL_CHAR)としていたのに、対象のDB側の項目の型がvarcharになっていた
2015/09/15(火) 21:43:10.94ID:sv5Bl9TI
質問です。

上手いことsscanfを.NETで実装する方法ってありますか?
ポインタが上手く渡せず困っています。

なお、正式に習ったわけではなく、見よう見まねでやっているため、
単純なところで勘違いがあるかもしれませんが、その時も指摘して頂けたら助かります。
2015/09/15(火) 21:43:39.42ID:sv5Bl9TI
【これまでの経緯】
プログラムが間延びしてきたため、
これまで個別にちまちま書いていたファイル読み出し部分をsscanfで纏めて整理しようとしています。
ググッたところ、.NETにはsscanfそのものはなく、どうやら皆さん苦労しているようでした。
http://stackoverflow.com/questions/4223917/c-sharp-equivalent-of-c-sscanf
http://stackoverflow.com/questions/492262/is-there-an-equivalent-to-sscanf-in-net
http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net
ただ自分の場合はcsvの読み出しで順番と対象だけ指定できればいいので、
以下のように組んでみました。(ただしまだ動かしていないので動かないかもしれません)

private: int sscanf_csv(String^ str, String^ format, array<void**>^ pointers){
array<String^>^ strs = str->Split(',');
array<String^>^ fmts = format->Split(',');
int i=0;
while (i<strs->Length && i<fmts->Length) {
if (fmts[i]=="int") {
if (!Int32::TryParse(strs[i],(int%)pointers[i])) break;
} else if (fmts[i]=="double") {
if (!Double::TryParse(strs[i],(double%)pointers[i])) break;
} else if (fmts[i]=="float") {
if (!Single::TryParse(strs[i],(float%)pointers[i])) break;
} else if (fmts[i]=="string") {
*(interior_ptr<String^>)pointers[i] = strs[i];
}
i++;
}
return i;
}

Stringのところは怪しいですが、intとdoubleとfloatはネイティブなら問題ないと思っています。
2015/09/15(火) 21:44:06.10ID:sv5Bl9TI
【問題点】
・マネージドのクラスではメンバにネイティブ配列が使えないため、
書き込み対象にどうしてもマネージド配列の要素を指定することが必要となりますが、
interior_ptrをvoid**にキャストできません。
仕様上、interior_ptr → pin_ptr → int → void** にはキャストできる(っぽい)のですが、
 ・interior_ptrは配列に出来ない(array<interior_ptr<int>> も interior_ptr<int> hoge[] もエラー)
 ・pin_ptrも同様に配列に出来ない。さらにローカル変数として宣言しないと駄目っぽい。
ため、これらを回避するためにはベタにコードする必要があり、余計に見にくくなります。
・そもそも void** にしているのは可変長引数がいまいちだったからなのですが、
上記のように interior_ptr が配列に取れないから多分可変長も無理です。
・自分の場合は1行につきせいぜい10個程度の代入なので最悪べた書きでラップしてもいいのですが、
interior_ptr<Type>は型指定があり、型の順番は変更したいのでこれも厳しいです。

【出来ればいいなと思っている記述】
array<int> ary_int = gcnew array<int>(10);
array<double> ary_double = gcnew array<double>(10);
sscanf_csv(line0, "int,double", gcnew array<void**>(2){&ary_int[0], &ary_double[0]});
sscanf_csv(line1, "double,int", gcnew array<void**>(2){&ary_double[1], &ary_int[1]});

という感じです。良い案があればお願い致します。
2015/09/16(水) 11:35:11.25ID:L4xvtXb4
>922
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);
2015/09/16(水) 21:00:32.05ID:sRYuFuHf
>>923
おお、ありがとうございます。
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したものを自分で書きますが、、、
2015/09/16(水) 21:06:19.21ID:sRYuFuHf
すいません、やや話が前後しているので念のため一部訂正します。

元々 delegate から parse_line を呼ぶつもりでしたが、
最終的には可能なら parse_csv に纏めようとしています。
ただ parameter pack が使えないとやっぱキツいですね、、、
2015/09/16(水) 22:14:50.26ID:L4xvtXb4
行によってフォーマットが違わない(ファイルによっては違うのかな)のなら、
行をパースした結果の型を定義しちゃったほうが保守性は上がると思うけど、縦方向の配列が必要なんだろうなぁ。
2015/09/16(水) 22:41:51.71ID:sRYuFuHf
>>926
はい、ファイルによってフォーマットは違い、行では変わりません。
演算ソースを読み込むのに使うので、速度は遅くても構いません。

ただ一部、各行の先頭数値によって行のフォーマットを変えている部分があるため、
元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
ただこれはソースファイルが増えるのが面倒なので一部にパッチを当てたからであり、
きちんと修正すれば parse_file に一本化できるので、この方向で検討中です。

実は縦方向の配列は不要で、各行での構造体化も検討中です。
2015/09/16(水) 22:55:17.14ID:sRYuFuHf
すいません、また細かいところで間違えました。一応念のため訂正しておきます。

× 元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
○ 元々は上位で parse_file を呼び、対象オブジェクトのメンバ関数を delegate で渡し、
 メンバ関数内で先頭数値を見てフォーマットを区別し、そこから parse_line を呼ぶつもりでした。(現時点で動作中)

今は上位で メンバ関数 Hoge.init(filename) を呼び、init内で全部済ませる方向です。

これまで全くオブジェクト指向をしておらず、それでも大して問題なかったのですが、
いい加減無理になってきたので、今更ながら粗結合化をやろうかというところです。
929デフォルトの名無しさん
垢版 |
2016/02/15(月) 00:11:59.92ID:BuMWAFI4
「System.Collections.Generic.List<T>型」を「LPARAM型」に変換する方法、
またその逆の変換をする方法、を教えて下さい。

List<T>型をLPARAM型に変換する必要があり、
その後で、List<T>型をLPARAM型から再取得する必要があるのです。
2016/02/15(月) 01:15:53.23ID:Rn1JhND3
「その後で」がスコープを抜けた後を意味するなら、そのような方法はありません。
2016/02/15(月) 07:40:32.53ID:7IG9/wk9
marshal_as を実装すればいいと思うよ。
LPARAM って実体は void** じゃなかったっけ
932デフォルトの名無しさん
垢版 |
2016/02/16(火) 07:41:35.26ID:uJkK1HCP
>>931
言語は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型に再変換する方法が分かりません。
2016/02/16(火) 09:54:31.98ID:jv0CDqht
経緯を見ずに
子ウィンドウリストの扱いとして妥当とは思えないが
2016/02/16(火) 15:12:48.61ID:l0bB/6+q
LPARAMの使い道がEnumWindowsの第二引数とかだったらやりようがあるけど、そういうコードではない?
935デフォルトの名無しさん
垢版 |
2016/02/17(水) 07:42:51.53ID:6vFi9dMa
解決しました。
c++の世界で一時変数を設けて、ポインタを渡し、reinterpret_castで復元する、という方法です。
2016/02/18(木) 02:54:21.18ID:/SXXA+KN
(たぶん解決してないなー、と皆が思ってる)
2016/02/20(土) 19:06:01.50ID:HOPxSzsv
質問です。
+= で追加したフォームのイベント順を入れ替えたいのですが、やり方はありますか?

条件
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 の順に入れ替えたいのですが、方法はありますか?
2016/02/20(土) 19:06:30.87ID:HOPxSzsv
プログラムイメージ
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");

以上、よろしくお願い致します。
2016/02/21(日) 05:32:00.14ID:SNLM1Bng
> デザイナではフォームはデフォでは static でないため、
> 内部の別クラスからは numericUpDown->Value 等にはアクセスできません。

ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。

FormDataはstaticにせずForm1のメンバにして、その中身が変化したときのイベント
(ここに再描画関数を += して、EventArgsでパラメータを渡す)を足すのが良いのでは。
2016/02/21(日) 12:45:43.68ID:Ur7lNYiz
>>939
回答ありがとうございます。

それでも解決しますが、それは全面改訂になります。
既に(B)を全ての(A)の頭に入れるという解決策はあり、それの方がデグレードの危険が少ないです。
ただ、リフレクション等で(B)と(A)の順を入れ替えられると、数行の変更で済み、デグレードは発生しません。
だからそれを探しています。

Form1と別クラスCを追加して再度説明します。
全てはForm1の内部クラスです。継承はしていません。
2016/02/21(日) 12:46:15.32ID:Ur7lNYiz
【今】
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)の処理順を入れ替えたいが、方法が見あたらない。
2016/02/21(日) 12:46:44.50ID:Ur7lNYiz
>>939の提案】
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 を参照
}
};

問題点:
イベント処理順は「データ更新」→「描画」と正しく固定される。
ただし全面改訂になる。
2016/02/21(日) 12:47:27.88ID:Ur7lNYiz
> ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。
結果: 描画に使われるデータが1イベント分ずれる
原因: イベント順が「描画」→「データ更新」だから
何か間違いはありますか?

データ構造としては本来は class Form1 : FormData となるべきため、
static で使うことも問題ないと思います。
既に記述されて動いているプログラムがあり、それを変更しようとしています。
データ更新→描画にプログラム上で固定するのはスクラッチからなら当然ですが、その場合にも結局
「どのデータが更新されたか→どの部分を再描画する必要があるか」を記述する必要があります。
この部分は今既にデザイナ上にあり、動いているので、それをそのまま利用する方法を探しています。
2016/02/21(日) 20:54:36.76ID:SNLM1Bng
結果:アクセスできない
×原因:staticじゃないから
○原因:設計が悪いから

http://www.c-sharpcorner.com/uploadfile/b81385/how-to-change-order-of-event-handlers-execution-at-run-time/

リファクタ無理だというならここにあるC#のコードをC++/CLIに移植すればよいのでは。
2016/02/22(月) 00:23:23.86ID:GxEKSJ9o
リンク先のコードでイベント順を入れ替えることが出来ました。
ありがとうございました。

プログラム構造については色々意見はあるとは思いますが、
最初から固まっている仕様に対して一度作って終わりなら誰も苦労しませんよ。
複数有る解決策のうち、今現在見える範囲での最適解をその都度選んでいくしかありません。

A. イベント順を入れ替えても
B. 各イベントハンドラの頭にデータ更新を挿入しても
C. 他クラスに対していちいちForm1オブジェクトを渡してstaticではなくしても

制御フローは同じです。(切り出し面が異なるだけ)
今後FormDataクラスや「他のクラスC」はForm1外でも使う可能性があるのと、
デグレードに対するデバッグの困難さを考えて、今回はAを選んでいるだけです。

まあいずれにしても、解決しました。
ありがとうございました。

なおリンク先、最後に小言が書いてありますが、完全に同意ですよ。
本来はイベントテーブルを参照できるメソッドが有ればいいだけです。
2016/02/23(火) 04:03:35.79ID:zeSeypn1
本来はまともな設計をすればいいだけだよ
+= した順番に呼ばれるのもたまたまそういう実装になってるだけでしょ
2016/02/29(月) 00:09:05.42ID:MKA4zt/L
イベントの実行順はaddされた順だと仕様化されてる
948デフォルトの名無しさん
垢版 |
2016/04/25(月) 16:38:42.40ID:FkG7uZgr
質問失礼します。

'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' をアンロード

よろしくおねがいします。
2016/04/26(火) 04:22:33.77ID:GzSuYmQg
「cannot find or open the pdb file c++」で検索!
2016/04/26(火) 10:52:45.55ID:wKiIgsat
アンロードは気にするな
dllの場所をあちこちコピーして試してみ
951948
垢版 |
2016/04/27(水) 15:26:32.30ID:pZs1yVgK
思い出しました。

ildasm,ilasmをつかって、その該当のdllのPCBを作りました。
(dllの中まで、デバッガで追いかけるためです)
あたらしくコンパイルしたDLLへ、前のPCBがなかったものから、リンクを張り替えました。

そしたらエラーが出るようになった気がします。
(あくまで、気がするだけです。なんら、確かな関連はわかりません)

しかし、現在は、以前のオリジナルのDLLをリンクしています。
その状態でエラーが出ています。

>>950
回答ありがとうございます。

/LIBPATH の場所
exeと同じフォルダ
program filesフォルダのvisualSTUDIOフォルダ

それらに置き直しました。が、駄目でした。
2016/04/27(水) 16:32:56.37ID:P7l59W4J
xyz.dllが依存している何かのDLLが見つからないんじゃないの
dependency walkerとかcygwinのlddとかで確認してみたら
2016/04/27(水) 17:53:59.20ID:VZ0i7jHG
参照設定に入れてるんじゃないの?
一旦外して参照設定しなおしてみては
954948
垢版 |
2016/04/27(水) 18:59:04.66ID:1t3mn4AU
'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' をアンロード
----------------続きがあります
----------------続きがあります
955948
垢版 |
2016/04/27(水) 19:01:17.20ID:1t3mn4AU
'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) で終了しました。
956948
垢版 |
2016/04/27(水) 19:13:09.09ID:1t3mn4AU
>>952
>>953
みなさん、ありがとうございます。

952さんのおっしゃる方法でいけました。

dependency walkerで、不足していたDLLが発見できました。

VSで、もし不足DLLがあるなら、教えてくれるはずだ」という、
思い込みが駄目でした。

3日*5時間=15時間

ぐぐたり、最インストして、時間をつぶしました。

(エラーコードを貼り付けたけど、無駄になっちゃた)
957デフォルトの名無しさん
垢版 |
2016/05/01(日) 16:47:47.97ID:tKi6j9CT
匿名通信(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
2016/10/22(土) 11:55:32.76ID:ksoZ+Sju
大分人が居ないみたいだけど、質問させてください

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以上にできないみたいです
2016/10/22(土) 12:52:21.05ID:O48rD9qT
おおいたじん
2016/10/23(日) 21:52:15.85ID:15UOA6Kp
わかったぁぁぁぁ!!!

glEnable( GL_DEPTH_TEST );
ではなく
set_has_depth_buffer();
でデプスバッファを有効にするみたいだ
こんな所まで変える必要はないだろうに・・・
2016/10/23(日) 23:42:58.00ID:dKDci2rB
すれ違いな事を分かれよw
2016/10/24(月) 00:49:08.07ID:B3VSjKub
いや誘導されてきたしw
普通のくだすれ落ちてるし
スレ立てるまでもないスレの方が良かったのかな?
2016/10/24(月) 08:15:21.68ID:q3Pt9cuW
「くだすれ行け」って言われてこのスレに誘導されたと思ったんなら頭悪すぎるわ。
2016/10/24(月) 10:37:31.81ID:9xygNeDa
>>963
ほんそれ
2016/10/24(月) 12:49:59.59ID:e0+jKQlJ
まあ /CLI の文字はわからない人には見えないからな
2016/10/24(月) 15:51:40.64ID:9xygNeDa
くだすれC++だったとしてもスレ違い
967デフォルトの名無しさん
垢版 |
2016/11/03(木) 11:44:11.90ID:s4829peE
C#で言うオブジェクト初期化子に相当する機能ってC++/CLIに用意されているんですかね?

getアクセッサしかないプロパティをコンストラクト時に初期化して使うようになっている
ライブラリがあったんですけど、もしかしてそういうクラスはC++/CLIから使えない?
2016/11/03(木) 16:15:49.29ID:997Gjnyn
{ hoge : 774, fuga : 37564 } { .hoge = 774, .fuga = 37564 } みたいなやつ?
俺も2015で以前に探したけど見つからなかったな

どうなんだろうね、あるのかな
2016/11/03(木) 16:49:50.16ID:s4829peE
それです。
VBには追加されているみたいだけど、C++/CLIは見捨てられているなぁ。
2016/11/03(木) 17:54:07.51ID:997Gjnyn
VSの作りからして、それはないんじゃないかな
MFCでリボンじゃない方のドッキングのプロジェクト作るとわかるけど、
あれがものの見事にVSのドッキングだからね
かつデザイナは当然ユーザが生成する(した)フォームは(特にユーザコンポーネント)
.NETでビルドされたものをデザインタイム用に直接呼び出してる
(デザイナでエラーが出るだのインテリセンスが良く落ちるだの言ってるのは
VSの作りを”なんとなく”ですら理解できてない証拠)

MSとしてはVSで次のVSを作ったりする為にもC++/CLI作りこみたいけど
非常に言語体系が複雑かつ莫大な工数が必要で追いついてないんじゃないかなと妄想
既に市場のソフトウェアの価格破壊はとっくに完了
後はストアかUbuntuOnLinuxでサーバ市場か開発シェアで食い込むしかなさそうだし
2016/11/08(火) 19:00:23.92ID:poFN3OHs
亀レスだが何となく妄想が閃いた

MS主導とはいえ、C++/CLIってなんかの国際的な規格みたいなので規定された
れっきとした規格だからおいそれと追加できないんだ
んで、C#もC++も構造体(クラス)の初期化子持ってるから昔みたいな適当に
「MS独自の拡張でーす」とかやっちまうと収拾つかなくなりそう

とはいえ { 0, ,1 2 } は後からメンバ追加したとき修正忘れとかトラブルの元だし
構造体宣言→ZeroMemory→b=1; c=2;はエイリアス切らないとconst修飾できねーし
(エイリアスはヒューマンエラーの元、constじゃないと最適化掛からないケースあり)
さっさと対応して欲しいとこではある
2016/11/08(火) 22:29:24.78ID:ygc/1hMy
混在アセンブリが作れるのはC++/CLIだけだし非常にもったいないと思うんだが、
MS自身も既にグルー用途以外での新規採用を推奨してなかったんじゃないかな。
もうちょっと力入れてくれてたらMFCなんか捨てられたのに。
2016/11/08(火) 22:58:35.07ID:poFN3OHs
ttps://support.microsoft.com/ja-jp/kb/3001686
これかな

そのわりにはVSには使ってんだよな
MFCしながらマネージコードをデザインタイムで呼び出してフォーム表示しなきゃならんから
仕方ないのかも知れんけど
2016/11/09(水) 11:18:35.06ID:YhV0EIhT
さりげなくVS2015でMFC進化してたし、MFCのダイアログでスプリッタとか
(無理やり空のCFrameWnd貼り付けるとタブ移動できない)
ステータスバーとか(.NETみたいにツールバーもどきとしても使える)
.NETでしか使えないコントロールが軒並みMFCにきてくれたりするだけでもいいんだけど
これから先C++/CLIのサポートどうなるんだろ
多少見てくれやUIが前時代的でもMFCの方が安定かなぁ
2016/11/21(月) 13:25:25.73ID:YpzsObn3
MSはCLI推奨せずにC#やVB推奨してっけど、将来のOffice系何で作るんだろな
難読化してもその内ソースのオプティマイザ出てきてイタチごっこになりかねんし暫くはMFCかね
2017/01/15(日) 21:23:48.23ID:rvU554U6
C++/WinRT なんてものまで出てきて、C++/CX も先が短そう
WTL の再来っぽくていい感じだけど
2017/01/15(日) 22:42:58.04ID:NxAjVWZ/
どれか一本に絞ってくれんと安心して規模がでかいモノに使えんのだよな
2017/01/16(月) 17:58:46.48ID:YH2Bx58z
うむ
2017/01/26(木) 18:08:08.58ID:o7A7h/DB
コロコロ変えて無駄な需要を作り出すのもM$の仕事
2017/01/30(月) 00:52:58.91ID:WdnkMvUJ
C++/WinRT をちょっと使ってみたけど、これいいね
標準C++で WinRT の COM 定義をインクルードして普通に使えるのはいい
癖さえつかめば、あとはWinRTのお作法だけってかんじだわ
981デフォルトの名無しさん
垢版 |
2017/01/31(火) 15:17:17.52ID:KYCEEpNK
une
2017/02/01(水) 02:50:30.54ID:L9Dup9x5
UWPとか限定せずに、C++/CLIのまま突っ走って欲しかったんだがなぁ
2017/04/28(金) 09:31:56.32ID:O7EFHLbG
フォームアプリ用のプロジェクトのテンプレどっか落ちて無い?
毎回手動で設定するの面倒臭い。
984デフォルトの名無しさん
垢版 |
2017/05/20(土) 14:40:24.30ID:EW+Ld+8h
アンマネージ側でvector<>に格納されたデータをマネージ側に返すには
gcnewで別にメモリ確保してコピーしてから返す方法になるんですか?
(一時的に倍メモリ使うのが気になります)
2017/05/20(土) 15:14:59.81ID:elFKlvRa
俺はあまり詳しくないけど、「返す」ってのが普通は要らないと思う。
マネージドからアンマネージドは直叩き出来るし、普通はそうする気が。
切り替えのオーバーヘッドがーみたいな記述もどこかにあったけど、
俺がやっている限りでは無駄命令は出ずに直叩きしてた。

逆にアンマネージドからマネージドも一応は直叩き出来るけど、
pin_ptrにしなければいけないし、可変長は多分無理。
STL/CLRにもvectorはあるけど、こちらだとアンマネージド側のソース変更が必要になる。
(*を^に変更)
だから一番楽なのは上記の「マネージドからアンマネージドを直叩き」だと思う。

なおコピーするのならそりゃ一時的には倍メモリ使うしかないでしょ。
2017/05/21(日) 00:02:49.54ID:B5VLs+I5
collection_adapterの出番だ!って思ったら逆方向だったでござる
987デフォルトの名無しさん
垢版 |
2017/08/11(金) 18:57:30.61ID:F7GkAIq5
visual c++ express edition
(2010)で、
numericUpDown1 に、小数を入力(DecimalPlaces は、 1)できるようにしています。

コードから、

float suu;
(numericUpDown1 -> Value) =
 (float)suu;

が、エラー出ます。

suu と、numericUpDown1 を、整数にしておけば、エラー出ません。

小数で、入力するには、どうすればよいのですか?

m(__)m
2017/08/11(金) 22:49:03.05ID:zXcmyaa1
エラーメッセージに書いてあるだろ。
2017/08/14(月) 12:55:13.92ID:xjAbC9qa
カッコとかキャストとかわけわからずにやってんのか
System::Decimalにキャストしてみて
2017/08/16(水) 04:12:40.72ID:UcOsqcC8
Cスタイルキャストが許されるのは小学生まで
2017/08/18(金) 19:41:28.19ID:UHl99sa0
C++ って初期値を0にするって仕様化されていたっけ?
2017/08/18(金) 19:50:42.62ID:G07FViaN
int a {};とすれば0初期化される仕様だったような?
2017/08/18(金) 21:19:51.90ID:UHl99sa0
2010 だと、0x は使えないんじゃ?

まぁ、MSDN のコードを見れば解決する話だけど
ttps://msdn.microsoft.com/ja-jp/library/system.windows.forms.numericupdown.decimalplaces(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-2
2017/08/19(土) 15:20:13.68ID:vQyZjPpv
>>991
++は0にするんじゃなかったかな
コンパイルオプションでも変えられそうだけど
995アムドクラス 124.214.38.29
垢版 |
2017/09/12(火) 15:04:42.24ID:qh4uFSxq
>>803
言葉遊びじゃなく君が人の書き込を妄想で勘違いしてドヤ顔で噛み付いてきた挙句論点の違う馬鹿な屁理屈こねたってのが現実だよね?
それで負け惜しみか知らんが「こ、言葉あそびしたいだけだな(震え声」って言われてもね?

違うというなら
「多コア最適化が進めば必然的にryzanにも恩恵がある」
っていう書き込みのどこが思い込みなのかはっきり言えばいいじゃない
論点ズラす馬鹿な屁理屈こねたり負け惜しみ言ってないでさ?

>>809
また屁理屈ですか?
差が埋まるとか埋まらないとかの言い訳はいいからさ?
恩恵あるんだよね?じゃあそれは思い込みじゃないよね?
なんで君は思い込みどうこうとか言い出して噛み付いてきたの?

>何を言われても理解できない子なんだなあ

完全にブーメランで君の額に刺さってるよね
それでもまだ苦しい言い訳や屁理屈や負け惜しみ書き込むの?真性?
996アムドクラス 110.132.254.159
垢版 |
2017/09/12(火) 15:05:18.98ID:qh4uFSxq
それはお前の思い込みだ!!って思い込みで叩く
まさにアスペの症状そのままです
そして大概アスペ本人は自分が間違ってると認識すらないから
自分の非を認められず延々に論点ズラしや屁理屈こねてだから相手が間違ってると言い続ける
こういうのは相手にしないのが吉

>8700Kで走らせれば確実に2コア余るわけで[

おいおい
ゲームは今4コアメインだからって6コアCPUを使ったら2コア余るなんて馬鹿な事ほざく奴が
なんで自作板にいるんだ?まじで?釣りじゃなく本気で言ってんの?
本気なら真性じゃん
997アムドクラス 110.132.254.159
垢版 |
2017/09/12(火) 15:05:41.96ID:qh4uFSxq
>>815
>そうだねそれと同時にryzenの時代になっていくって事だよね
                ↓
>多コア最適化が進めば必然的にryzanにも恩恵があるという

これのどこに矛盾があるの?
「マルチ最適化が進めば必然的にryzenに恩恵がある=ryzen(もっと分かりやすくいえばマルチコア)の時代になっていく」
何の矛盾もないし言い換えですらない言ってる本質は同じなんだから
それを言葉遊びって自分が理解できない馬鹿ってだけだろ?

現時点でマルチ処理では7700Kより明らかにryzenは上で6コアの8700kだってまず勝てないだろうね
馬鹿がなぜか持ちだした4コアなら勝てるかもだけどさ
7700Kと比較するのに同価格帯じゃなく4コアryzen持ちだして何したいの?
つかそこまで論点拡大しなきゃ言い訳すらできない時点で馬鹿丸出しで相手にすらする価値ないよね?


勝手に人の書き込みを思い込みで「ryzenの時代=AMDがゲームでも勝つ」みたいに勘違いして脊椎反射で噛み付いたんだろうが
それこそアホ(淫厨)の極みだね
何度も言うが完全にブーメランで何を言われても理解できない子なんだなあ君
998アムドクラス 124.214.38.29
垢版 |
2017/09/12(火) 15:06:19.99ID:qh4uFSxq
現段階ではゲームでは7700k最強で安定
マルチではryzenが最強で安定
これにコーヒー(8700k)がどこまで食い込めるかって単純な話しなのにね

ゲームでは定格が低くかつ今のゲームは4コア最適化だから7700k相手だと厳しい
TBは一時的なものだしOCするにしてもそれは7700kでもできる事で元の定格高い分7700kが負担少なく有利
マルチではryzenにはまず勝てないだろう(アホの理論で4コア持ち出せば別だけどw)

ゲームで7700kを上回るために6コア(マルチコア)最適化をするというなら
それはryzenにも恩恵がある事で元々マルチで勝ってるryzenがますます使えるようになって行く
中途半端になりそうなコーヒーってどうなるんだろうね?って簡単な話に淫厨が発狂して噛み付いてきて大変だわ

>>855
逆に言うとマルチ用途ならryzen一択だけどな
そもそもゲーム用途で8700k一択にならずに7700kと二択になってる時点で
8700kって中途半端感あるってまだ気が付かない馬鹿?

ここにいる人はゲームメインで8700kが7700kといい勝負レベルだったら
7700k買って差額をグラボに使うぜ?ここにいる人は
マルチメインでほしいならryzen一択なんだしな
999アムドクラス 124.214.38.29
垢版 |
2017/09/12(火) 15:07:04.41ID:qh4uFSxq
>>862
出たw淫厨用語の「絶対性能」w
それxが出た時に散々聞いた気がするわwww

なるほど絶対性能持ち出さないとダメになったかw

>>867
淫厨が絶対性能持ち出すってのは
小学生が口喧嘩で言い返せなくなって涙目で何言われても「バーカバーカ」って連呼しだすようなもん
何言っても無駄よ?

>>884
>畑違いだから想像で適当に言ってるし、間違ってても気にしないけどな

俺が代わりに言ってやる
頭悪いなお前www
まぁ真性の馬鹿って自分が馬鹿って気がついてないって言うからな
多分周りから散々頭悪いって言われてても気づいてないだけだろうな
なにせ想像で適当に言って間違ってても気にしないレベルの頭だからなw

>>891
何かあれば絶対性能連呼しだすお前も同じようなもんだからな
馬鹿の一つ覚えってやつでな
それに気が付かないでそんなレス返してる時点で・・・・・・かわいそうに・・・・・・
1000アムドクラス
垢版 |
2017/09/12(火) 15:08:30.91ID:qh4uFSxq
句読点もそうだが
一つの書き込みでアンカー二つ入れてる書き込みもそうだよ
2chでアンカー二つ以上入れて書き込みするなんてよほどのかまってちゃんか荒らしか自演位だわ

アフィ男と馬鹿にする書き込みにだけ過剰なレス返してるし
もうバレバレなんだよね・・・・・・・・・

>>922
アフィ男乙
いい加減指摘どころかアフィ男批判の書き込みあると必ず沸いてくるだろ?お前w

自作とゲームと趣味の日々のブログは捏造と嘘しかないブログなんだともう周知されたからあきらめろ
あんなの見て参考にする情弱のジサカーなんてもういないからw
DELL男の主張聞いて「そうなのか!!6400スバラシイ!!」って言うような馬鹿はいないのと同じでな

>>929
4亀すら故障を心配すると書かざる終えないレベルの爆熱CPUについて
それを批判する書き込みしてる奴は荒らしとか
マジで信者脳だろお前
必死にインテル上げしてたアフィ男と同じメンタリティーだな

多くの誰もが評価するものを叩いてたなら荒らしだろうが
評価もされてないものを叩いてるやつも信者視点では荒らし認定とか
信者っておっそろしいもんだな・・・・・・
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 2738日 5時間 27分 12秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況