- 1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
- (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。 前スレ C#, C♯, C#相談室 Part45 pc11.2ch.net/test/read.cgi/tech/1200911737/ その他テンプレ>>2-5くらい
- 445 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:04:33 ]
- 連投失礼します。
>>443 ありがとうございます。 それでいけそうです。 これまたもう少しテストしてきます。
- 446 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:06:56 ]
- こうでしょ。
int mod = x % 5; x += mod > 2 ? 5 - mod : -mod;
- 447 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:08:21 ]
- >>442
string一つだけなのですか。 受け取る側はどうすればいいですか? 受け取る側はコンソールではなくフォームアプリケーションです。
- 448 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:17:35 ]
- >>447
スペース区切りとかで渡して、 splitで分割するなりすればいいんじゃね?
- 449 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:19:37 ]
- >>446
ありがとうございます。 >>443さんの方法だと、きりのいい数字だとちょっとおかしくなるようでした。 446さんの方法は私程度にはどういう処理をしているのかさっぱりなのですが、 問題なく使えます。 みなさん本当にありがとうございました。
- 450 名前:435 mailto:sage [2008/05/24(土) 18:30:42 ]
- Environment.CommandLineで受け取るか、
コンソールと変わらずにエントリポイントから受け取ればいいんですね。
- 451 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:40:20 ]
- >>431
AutoNullpoOudaki gattu = new AutoNullpoOudaki(); gattu.Execute();
- 452 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:11:50 ]
- 文字列から動的にExpressionTreeやFuncを得ることって出きるん?
ttp://ufcpp.net/study/csharp/sp3_expressionsample.html ここで書いてあるような子としてみたかったんだが、CodeDom.GetExpressionFromとか見あたらず、いろいろググってもそれらしいのにたどり着けず・・・ CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば出来無くないんだけれどもう少しまともな方法で・・・
- 453 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:31:07 ]
- >>452
そのページにある「ソース一式」のところからソース落して、 中身の「MyMath\CodeDom.cs」の中にその GetExpressionFrom の実体がある。
- 454 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:32:55 ]
- ちなみに、そのソースの GetExpressionFrom はまさに、その
「CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば」 をやってるだけ。 もう少しまともな方法、確かに欲しいよね。
- 455 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:47:03 ]
- >>453
さんくすこ。 てっきり.NET3.5以降で追加されたのかと思ってた・・・orz CocoaのようなKVCとかやるためにリフレクションからコード生成→lambdaにしてそれなりに高速にアクセスみたいなことしたかったんだが・・・ 場合によって、無理やりコンパイルでlambda変換するようにしようかな・・・ あぁ書いてて思ったが、式ツリー手動でいじくればいいのか。よくわからんがやってみるノシ
- 456 名前:デフォルトの名無しさん [2008/05/24(土) 20:04:19 ]
- Compact Frameworkでやっててもこっちで大丈夫ですか?
もし適切なところが他にありましたら誘導お願いします(´・ω・`) ボタン押したらwavファイルをプログラムに埋め込んで、ボタン押されたらそれを再生させたいんですが、上手く再生されません。 hi.wavが再生させたいファイルです。 private void button1_Click(object sender, EventArgs e) { System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); string file = a.GetName().Name + ".hi.wav"; System.IO.Stream s = a.GetManifestResourceStream(file); SoundPlayer player = new SoundPlayer(s); player.Play(); } サンプルを見ながらこのようなソースを組んで、 プロジェクトのプロパティのリソースのところにhi.wavを追加して、 Persistenceを「.resxに埋め込まれました」に設定しました。 しかし、動かしてみると標準のビープ音しかなりません。 デバッガで見ると、sがnullのままのようで、ファイルを読み込んでいないようです。 埋め込み方が間違ってるんでしょうか・・・。 よろしくお願いします(´・ω・`)
- 457 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:26:10 ]
- >>456
SoundPlayer player = new SoundPlayer("path"); player.PlaySync();
- 458 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:37:51 ]
- メッセージとしてスウェーデン語文字を表示させたいのですが、
なぜか読み込んでくれずにエラーが起きてしまいます どうしたらよいのでしょうか
- 459 名前:456 mailto:sage [2008/05/24(土) 20:42:51 ]
- >>457
ありがとうございます。実際にwavファイル置いてパス指定して音を鳴らすことは問題なくできるんですが、 埋め込めたら良いなぁ・・・ってことなんです。 もしかして、埋め込みは無理ってことですか?
- 460 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:42:50 ]
- >>452
これがクエリ式のパーサ持ってたと思う。使い回せるかも。 ttp://www.codeplex.com/nlinq 使い方は"poorman's linq"でぐぐる。
- 461 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:45:46 ]
- >>458
取りあえずエラーとやらに付随してるメッセージを読み上げるといいよ
- 462 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:46:10 ]
- >>458
OSにスウェーデン語パックを導入しる
- 463 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:48:49 ]
- >>462
今からググってきます。ありがとうございました
- 464 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:09:12 ]
- レベルの低い質問で申し訳ありません。
出力の種類を「クラスライブラリ」としてあるプロジェクトを、スタートアッププロジェクトに設定した他のプロジェクトに参照させるにはどうすればよいのでしょうか。 そのままusingしようとしても「名前空間がない」と言われてしまいます。
- 465 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:12:54 ]
- >>464
ソリューションエクスプローラで参照したいプロジェクトを右クリックして 参照の追加 → プロジェクト
- 466 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:16:17 ]
- >>434
今更だけど、要は「5の倍数への丸め」、もしくは「丸め幅5での丸め」でしょ? 個人的には汎用的なこれを使いたいところ var y = (int)Math.Round((decimal)x / n) * n; まあ、整数型に限定してもこんなところじゃないか var y = (x + (n / 2)) / n * n; 因みに、後者はaway from zeroだが、前者はRound()のmode指定で選択可 対象が整数値で、かつ丸め幅が奇数ならどちらでも同じ
- 467 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:37:56 ]
- >>465
ありがとうございます。
- 468 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:54:56 ]
- >>456
もしかしたら、Compact Frameworkじゃ違うかもしれないけど 多分、その方法はファイルをresxに埋め込まない古いやり方。 wavファイルをプロジェクトに追加して ビルドアクションを「埋め込まれたリソース」にすれば、 その方法で鳴る筈。 んで、2005以降は、リソースエディタを使ってresxに埋め込んで、 "HI"がリソース名になったとしたら、 System.IO.Stream s = Properties.Resources.HI; SoundPlayer player = new SoundPlayer(s); player.Play(); で一応鳴る。 でも、ストリームのWAVEデーターの再生は、 GC絡みで問題があるらしい。 詳しくはこれを。 ttp://dobon.net/vb/dotnet/programing/playembeddedwave.html
- 469 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:05:15 ]
- ブロック崩しを作ったのですが、ボールが宙に浮いているときにスペースキーを押すと、
ボールが画面外に飛び出してしまうのです。どうにかなりませんか? ちなみにソースはこれ www.borujoa.org/upload/source/upload18960.txt
- 470 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:24:40 ]
- ソースを解析したうえでデバッグしてくれと。
- 471 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:27:03 ]
- >>469
ソース見て吹いたw
- 472 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:36 ]
- >>469
こういうifの書き方好きなの?
- 473 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:59 ]
- ってそもそもスレ違いじゃん
- 474 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:32:51 ]
- 何でもう消えてるんだよ。ちょっと見てみたかった
- 475 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:56:20 ]
- キャッシュ漁ったら見つけた
- 476 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:59:51 ]
- 型に格納できる値の最大値、最小値を返す関数はありますか?
例えば、unsigned intなら0か4294967295を返せる、といったような。 変数の型の範囲を超えるような値が格納されそうになった場合、エラーを出すような関数を作ろうと思っているので。
- 477 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:03:33 ]
- MaxValue/MinValueじゃ足りんのか?
- 478 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:19:23 ]
- そんなの、泣けりゃじぶんで定義して返せよ
- 479 名前:デフォルトの名無しさん [2008/05/25(日) 00:24:16 ]
- LL言語のWWW::Mechanize的なのを探してます。
C#や.NET Framework向けのwebスクレイピングライブラリはないですか? 検索してたのですが、なかなか見つからないや・・・
- 480 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:27 ]
- スレ違い
- 481 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:56 ]
- >>478
いやいや、476はMaxValue/MinValueを知った上でそういう関数が欲しいんじゃなくて、 ただ単に MaxValue/MinValueの存在を知らないだけじゃないかと。
- 482 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:27:41 ]
- 関数はまあ見逃すとしてもunsigned intなんて言ってる時点でスレ違いである事に気付こうな
- 483 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:28:51 ]
- >>479
MS は文法のゆるい HTML を機械処理するのはあまり好きじゃないみたい。 HTML2XHTML みたいなものを通して文法の正しい XML にした上で、 XmlReader やら LINQ to XML でアクセスするのがいいかと。 ↓でそういうことやってるんだけど、 d.hatena.ne.jp/uesama99/20080219/1203394007 HTML2XHTML が微妙臭い。
- 484 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:29:53 ]
- >>482
しっかり読んでなかったw それはちゃんと、「C# は C/C++ とは違いますよ」誘導してやろうよ。
- 485 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:52:32 ]
- >>477
ありがとうございます。 >>481 その通りです。低レベルすぎてすみません。 >>482 C#ではUInt32って書くんですね。ありがとうございます、勉強になりました。
- 486 名前:デフォルトの名無しさん [2008/05/25(日) 01:45:22 ]
- >>483
クッキーとか面倒なところを良きにはからってくれるのはないっぽいですね。 LLと組み合わせるしかないか・・・ GUI楽したいので.NET使いたかったけど、うまくいくかなあ とりあえうずありがとう。 いろいろ試してみます
- 487 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 07:57:54 ]
- 2005のPropertyGridについて質問
プロパティタブをいくつか追加したりしてるんだが ボタンに使われる画像の色が PropertyTab.Bitmap で retuen した Format32bppArgb の画像と微妙に違う 見た感じは大体同じなんだが、実際のRGBを調べるとほんの少しずれてたりする 何か色数の制限があるのなら、それに合わせた画像にするんだけど分かる人いる?
- 488 名前:456 mailto:sage [2008/05/25(日) 08:59:21 ]
- >>468
ありがとうございます。 ビルドアクションを「埋め込まれたリソース」には一応変更していたんですが、鳴りませんでした。 ・・・とおもったら、hi.wavが(.resxに埋め込む操作したとき)Resourceフォルダの中に入ったままビルドアクションを変更していたので、 常識的に考えて鳴りませんね。プロジェクトのディレクトリ直下に移して無事鳴りました。 あと、 System.IO.Stream s = Properties.Resources.HI; SoundPlayer player = new SoundPlayer(s); player.Play(); も、そのサイトを見つけたときにやってみたんですが、 CompactだとProperties.Resources.hiがstreamじゃなくてbyte[]を返してくるんで使えませんでした。 ・・・って思ってたんですが、 byte[] hibyte = Properties.Resources.hi; MemoryStream s = new MemoryStream(hibyte); player.PlaySync(); すればすむ話ですねo. . ...rz 昨日の数時間は何だったんだ・・・ 1日置くと急に分かったりするもんですね(´・ω・`) 本当にありがとうございました。
- 489 名前:456 mailto:sage [2008/05/25(日) 09:03:19 ]
- byte[] hibyte = Properties.Resources.hi;
MemoryStream s = new MemoryStream(hibyte); SoundPlayer player = new SoundPlayer(s); player.PlaySync(); の誤りです。すいません。 あと、>>456ではPlay()使ってますが、 特に非同期再生が必要なわけではないので、GC絡みのを回避するためにもPlaySync()を使おうと思います。
- 490 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:27:09 ]
- 質問です
ネットの初心者向けサイトを見ながらC#をやっていたんですがそろそろきつくなってきました とくにデリゲートをイベントハンドラとして実装するところと、イテレータがよくわかりません 初心者から中級者にレベルアップするために買うべき本を教えてください
- 491 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:11:02 ]
- C#用のDXライブラリと言うものがあったので早速使ってみたのですが、エラーが出ました。
空のプロジェクトに参照をDLLを追加し、Class.csファイルを作り、メインメソッドに DxLibrary.DxLib_Init(); と書いただけなのですが、 DLL 'DxLibDll.dll' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E) と出てしまいます。 DLLはあらゆる場所に配置して試したのですが、 やはり同じようにエラーがでます。 何か特別な書き方が必要なのでしょうか?
- 492 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:17:45 ]
- DXライブラリの公式サイトで提供されてる方のC#用DXライブラリを使え
使い方も丁寧に書かれてる
- 493 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:19:29 ]
- >>492
ありがとうございます。 いつのまにか出てたのですか!? なぜエラーが出たのかは未だ不明ですが、早速使ってみたいと思います。
- 494 名前:デフォルトの名無しさん [2008/05/26(月) 15:17:26 ]
- 質問です。
2つのスレッドでそれぞれフォームを作成し表示します。 このとき、これらフォームの表示順位(重なり)を コントロールすることは可能でしょうか? なんか、デバッカ上とSetup後のプログラムで表示順がことなって メッセージボックスが隠れたりする・・
- 495 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:06:52 ]
- 構造体の中で1次元配列メンバを持つには
struct A{ public fixed double b[123]; }; でいけますが、 構造体の中で2次元配列メンバを持たせるために struct A{ public fixed double b[123][234]; }; などとやってもエラーになります。 構造体の中で2次元配列メンバを持たせることは可能でしょうか?
- 496 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:10:31 ]
- 494です。自己レスします。
とりあえず以下HPを参考にし、隠れていたダイアログが表示されるようになりました。(暫定対応ですが・・) www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34347&forum=7&start=0 端的に言うと、複数のアプリをダブルクリックしたときと同じで、 後から立ち上げた方が優先されて表示される。のと同じみたいです。 お騒がせしました。
- 497 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:17:20 ]
- >>495
fixedである以上は無理
- 498 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:17:56 ]
- 質問です。
クラスの配列をインスタンス化するのにforを使って次のようにやってるんですが、 もしもっとスタンダードな方法があったら教えてください。 for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。 classA{} A[] a = new A[n] for(int i = 0; i < n; i++){ a[i] = new A(); }
- 499 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:20:50 ]
- 狂っているその感覚を修正する事をお勧めします。
- 500 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:21:08 ]
- それで十分スタンダード
> for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。 この感覚を何とかしたほうがいい
- 501 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:23:51 ]
- もしかして
A[] a = new A[n] ← classA型の変数を宣言 a[i] = new A(); ← 実際に代入 つまり、for文の中では代入行為しかやってないから消えない、ということですか?
- 502 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:29:29 ]
- GCのアルゴリズムを理解した方がいいよ。
GCってのは「参照できる限りは消えない」 例えばnが1なら、forを抜けても a[0]を参照できるでしょ? で、参照できるので消えない。
- 503 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:34:42 ]
- 了解しました。勉強します。
- 504 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:18:27 ]
- というかスコープを勉強したほうがいいだろ
- 505 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:20:45 ]
- スコープは割と正しく理解出来てるような発言に見えるけど?
- 506 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:30:39 ]
- GCとは全く関係ないだろ。
スコープの話をしてると思うんだが。
- 507 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:26:57 ]
- コンストラクタでフィールドにインスタンスを代入したら不自然か
- 508 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:14:09 ]
- なんでGCが出てきたんだw
- 509 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:16:05 ]
- ↑遅れてきたアホ
- 510 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:36:55 ]
- 確かにマオは四川省だったから ヤバスwww
- 511 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:37:37 ]
- スマソ、誤爆った
- 512 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:41:06 ]
- newしたものはアクセスできるなら消えない
- 513 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:18:08 ]
- >>505
できてないできてない。
- 514 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:46:13 ]
- .NETのGCはスコープより早く働くことがあるから要注意なんだよね。たとえば
static void Main() { Hoge hoge = new Hoge(); hoge.Foo(); // hogeが参照されるのはここが最後 // 時間のかかる処理 } hogeがまだスコープ内にあるにもかかわらず、時間のかかる処理の最中にGCされることがある。
- 515 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:50:36 ]
- ↑あほ?wwwwww
- 516 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:53:20 ]
- そんなものに注意は不要
- 517 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:00:18 ]
- ttp://dobon.net/vb/dotnet/process/checkprevinstance.html
ここの真ん中くらいの「補足:ニュースグループ・・・」あたりにその例が出てる。 KeepALiveを使ってる箇所。
- 518 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:14:44 ]
- これもスコープ終了以前にGCされて落ちる例だね。
「ふらっとC#,C♯,C#(初心者用) Part22」 ttp://pc11.2ch.net/test/read.cgi/tech/1197802312/850-877 >876 名前: 875 [sage] 投稿日: 2008/01/08(火) 00:46:17 >>>850 >あーもしかしてと思ってと思って>>875のコードから >GC.KeepAlive(func); 抜いたら確かにAccessViolationExceptionおきるね。 >言ってるのはこれのことじゃろか。 > >P/Invokeにデリゲートを渡す場合、そのデリゲートの寿命管理は.NET側の責任。 >実は元のるびま記事にも書いてある。 >ttp://jp.rubyist.net/magazine/?0021-RubyWithCSharp#fm05
- 519 名前:498 mailto:sage [2008/05/27(火) 01:56:25 ]
- もしかして>>501の理解も間違いだらけなんでしょうか?
もう少し詳しく教えていただけませんか。
- 520 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 02:21:58 ]
- >>498はGCと関係ないよ。
厳密には関係なくないとしてあえて言うと、 new A[n]したオブジェクトはA[] aの寿命(参照が外れるまで)生きてる。
- 521 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 05:51:20 ]
- 初歩的なことだとうじゃうじゃ煽りレスがついたりするのに
ちょっと難しい質問だとなかったかのようにスルーするお前らワロスw
- 522 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:25:46 ]
- >>521
最近はROM主体だが、お前の発言が一番醜く見える。 そんなに無視されたのがくやしいのか? ちなみにどの質問なのか示してみ。
- 523 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:56:45 ]
- どこが難しいの?直前のネタはフラットでもスルーだろ・・・C#関係ないし
- 524 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:04:01 ]
- >>518
それはスコープが終了するとGCされるから、プログラマの責任でスコープを終了させんな、って話だ。
- 525 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:12:10 ]
- >>522
わざわざROM主体とか前置きしないとレスできないのかよw
- 526 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:14:26 ]
- ROM主体と言うのを何か言い訳に使ってるなら
>>525のレスは理解出来るが、別に言い訳に使ってないじゃん まあ、無駄な前置きではあるけど
- 527 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:40:12 ]
- >>526
まあ、第三者を装ってるあたりはみっともないな
- 528 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:23:17 ]
- >>524
それはるびまの記事の話だろう。 あのスレの>>875はこんなコード。GC.KeepAliveを抜いたらクラッシュする。 static void Main(string[] args) { VALUE state = 0; Ruby.ruby_init(); const string funcdef = "def foo\n" + "s=\"FOO\"+nil\n"+ "end"; Ruby.rb_eval_string_protect(funcdef, ref state); VALUE hoge = Ruby.rb_intern("hoge"); Ruby.CallbackArg0 func = arg => Ruby.rb_funcall(Ruby.Qnil, hoge, 0, 0); VALUE result = Ruby.rb_protect(func, Ruby.Qnil, ref state); GC.KeepAlive(func); }
- 529 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:20:13 ]
- アンマネージな世界に渡したデリゲートを安全に保持しとくには
アンマネージ側で不要になるまでGC対象にならないようにしとかなきゃならない。 てだけの話?
- 530 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:41:36 ]
- >>529
そういうこと。 他にも、インライン展開されたコンストラクタが完了する前にファイナライザが実行されることすらあるよ。 この場合もアンマネージな世界のハンドルの早すぎる解放であぼんする場合がある。
- 531 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:44:19 ]
- >>529
9割9分そういう理解でOK。>>514もアンマネージなmutexやロックのためのファイルを 開いたままにする場合などに影響が出る。 アンマネージが関係しないケースはまれなのだが、なぜかそのレアケースが、 MSDNに載ってたりする。サンプルソースは2種類あるが最初のほう。 msdn.microsoft.com/ja-jp/library/system.gc.keepalive(VS.80).aspx
- 532 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 14:44:45 ]
- 非同期ゲリゲートの動きを止めたいときはどうすればいいですか?
- 533 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:07:42 ]
- >>532
フラグやEventを使ってスレッド自身にそうさせるのが基本。
- 534 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:06:12 ]
- 関係ない話題を知ったかでひけらかすより質問に的確に答えてあげたら?
- 535 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:10:55 ]
- いったい何の話だ?
- 536 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:12:20 ]
- すっげーすぐにレス来たww
お前が関係ない話してレスが流れたんだろ。 自分で見返せ。
- 537 名前:535 mailto:sage [2008/05/27(火) 16:19:20 ]
- >>536
えーと、俺はこのスレには初めて書いたものだが 流れがわからんからアンカーつけてくれないか? どの質問の話かわからないから、答えようが無いわ。
- 538 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:22:12 ]
- >>531
そこのサンプル例1の解説が不正確で、プロパティの取得処理が 時間のかかる処理のためデストラクタが先に動いてしまうと読めるがそれは誤り。 もしそうであれば.NETのGCなんて安心して使えない。 それはデストラクタの使い方に重大な欠陥があるために発生する。 具体的にはExampleクラスのデストラクタで他のクラス、 この場合hashValueが参照を持つArrayクラスの後処理を書いたらいかんということ。 マネージドだけの場合は基本的にKeepAliveのことは考えなくてよい。
- 539 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:57:12 ]
- デストラクタが呼ばれるときには、既にメンバは解放された後なんだっけ?
- 540 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:04 ]
- 微妙に違う。
ファイナライズメソッドの実行順序には何の保証もないという話。 だと思うけどリンク先見てないから確かなことは分からん。
- 541 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:27 ]
- >>539
メンバに参照型を持つ場合でも、オブジェクトとして独立してるので デストラクタが動くタイミングやメモリが回収されるタイミングは不順。 順番が必要な場合はDispose(true)のパターンを使う。
- 542 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:13:17 ]
- あいや、ずっと前に読んだことあるはずでかすかな記憶によると
解放された後っていうか自分で解放してんじねーかよw って話だったかも…
- 543 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:48:04 ]
- >>537
半年ROMれ。
- 544 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:08:24 ]
- >>543
それはない
- 545 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:47:37 ]
- 一匹キティが沸いてんな・・・フラットじゃないのに
|

|