- 1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
- (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。 前スレ C#, C♯, C#相談室 Part45 pc11.2ch.net/test/read.cgi/tech/1200911737/ その他テンプレ>>2-5くらい
- 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 ]
- 一匹キティが沸いてんな・・・フラットじゃないのに
- 546 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:16:53 ]
- フラット!フラット!!
- 547 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:24:52 ]
- 質問です。
フォームを2つ使うアプリを作っています。 メニューはメイン側にはありますが、サブ側は何もありません。 で、サブ側にフォーカスがある時に、メイン側のメニューのショートカットを叩いても、 フォーカスがサブ側にあるため、イベントが発動してくれません。 出来ればこのショートカットを共有したいと思っています。 サブ側でもOnKeyDownなんかで同じ関数を呼ぶようにすれば可能といえば可能ですけれど、 あまりにも美しくないなと思ってます。何か上手い方法は無いでしょうか?
- 548 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:38:50 ]
- ほかのウィンドウのイベントが別のウィンドウのショートカットをたたくというのは美しくないだろ。
ルートのフォームまでで処理されなかったイベントがアプリケーションのハンドルで処理されるというのが正しい形だと思う。
- 549 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:47:27 ]
- サブフォームでメインのOnKeyDown呼べばいいじゃん
- 550 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:50:05 ]
- 返信ありがとうございます。
>>548 そもそもメインのフォームでイベントを処理している、ってのがおかしいってことですかね? メインにしろサブにしろ、フォームはイベントを発行するだけで、 その実際の処理はアプリケーション級のオブジェクトがハンドルするわけですか。
- 551 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 07:35:33 ]
- MDIにしる
- 552 名前:デフォルトの名無しさん [2008/05/28(水) 11:10:54 ]
- 2重起動を防いで、後から起動された方に渡されたコマンドライン引数を
最初に起動された方に渡したいです。 ttp://dobon.net/vb/dotnet/process/checkprevinstance.html ここにVB.NETでのやり方が書いてあり、C#でも似たようなことは出来ると思ったんですが Microsoft.VisualBasic.ApplicationServices これが存在しないエラーというが発生しました。 C#だと別のプロセスにデータを渡したりって事が無理なんでしょうか?
- 553 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:20:52 ]
- 参照の追加
- 554 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:21:18 ]
- それでやるなら該当のdll参照すれ
- 555 名前:デフォルトの名無しさん [2008/05/28(水) 11:31:31 ]
- >>553
>>554 参照追加したらありました。 たんにusingを記述するだけじゃダメだったんですね。 これでなんとかなりそうです。 ありがとうございました。
- 556 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:37:44 ]
- ttp://blogs.dion.ne.jp/anis7742/archives/6905607.html
ここでも聞いてるやついるな。 当たり前すぎて書かないからなー、普通。
- 557 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:13:09 ]
- なんつう偉そうなコメントだw
- 558 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:16:03 ]
- なぜSystem.Arrayクラスから派生クラスを作れないんですか?
- 559 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:17:31 ]
- CLR的に配列は特別なオブジェクトだから
- 560 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:55:06 ]
- System.Arrayクラスから派生クラスが作れると何の不都合があるんですか?
- 561 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:15:37 ]
- CLRべったりの低レベルで特殊な実装になってるから派生したところでどうせ何もできないよ
っていうかSystem.Arrayなんかそんなによく使うか? IList使えよ
- 562 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:20:42 ]
- CLR自体、StringとかArrayとか、その内部構造自体に
依存した最適化がかかってるからだ、 ってどっかにあった希ガス。
- 563 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:14:13 ]
- C++だとコンストラクタは出来るだけ初期化のみにした方がいいけど、
C#では初期化以外にもメソッド呼び出したり処理を始めちゃってもいいの?
- 564 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:15:32 ]
- いいよ
- 565 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:30:20 ]
- いかんよ
- 566 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:51:19 ]
- C++でコンストラクタでは継承先でオーバーライドされる仮想関数は呼べないんだったっけ
C#では出来るよ
- 567 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:03:33 ]
- >>563
してもいいけど、内容によっては立ち上がりが異常に時間がかかるプログラムになる。 その場合、最小限の初期化コンストラクタとクラス初期化メソッドを作る場合もある。
- 568 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:53:48 ]
- visual studioみたいなGUIのソフト作りたいんですけど
そのためのサンプルとか無いでしょうか? 具体的には フォームにメニューがいくつかあって ツールボックスがあって 左側にはエクスプローラ的な表示があって 下側にはテキストのログウィンドウがあって 残りの領域にはMDIの子フォームを生成するようなGUIです。 いかがでしょうか。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:01:25 ]
- Visual StudioというGUIのサンプルがそこにあるではないか。
- 570 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:09:14 ]
- Visual Studio のドッキングを自前でがんばったらマジで死ねるなw
- 571 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:14:20 ]
- Visual Studio以上の物ができたら教えてね
試してあげるから
- 572 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 17:24:15 ]
- DockPanelSuiteマジオススメ
- 573 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:41:08 ]
- MonoDevelopのソースじゃ参考にならんか…
- 574 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:43:22 ]
- >>572
すげーなこれw
- 575 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:49:33 ]
- >>572
凄いが、これを駆使したプログラムを少人数で作る気になれない。
- 576 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:04:01 ]
- ttp://www.codeplex.com/sdock
made in Japan!
- 577 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:52:40 ]
- WinFormsか・・・
WPF版がほしい。
- 578 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:24:21 ]
- >>577
お前はこっち池カス WPF(XAML,XBAP,.NET3.5)GUIプログラミング pc11.2ch.net/test/read.cgi/tech/1211453941/
- 579 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 05:22:08 ]
- C#からWin32APIを使って子プロセスを起動し、
Win32APIのCreatePipe, WriteFile, ReadFileを用いてプロセス間通信をしようとしています このとき、立ち上げた子プロセスはコマンドを標準入力から読み込みんで処理をし、 結果を標準出力へコマンドごとに出力し、入力にEOFが来たら終了、みたいなプログラムです ここで、子プロセスがEOFを認識してくれず、子プロセスが終了してくれません なにかいい方法があるのでしょうか? それともWin32APIの質問ということでよその板の方がいいでしょうか? やっていること: ハンドルを用意 親プロセスが無名パイプを作成する パイプの一端のハンドルAを継承可能にする STARTUPINFO構造体のhStdInputに継承可能にしたパイプのハンドルAを指定 CreateProcess() 継承可能にしたパイプのハンドルAを閉じる パイプの閉じていない方のハンドルBにWriteFile() ハンドルBを閉じる ←ここで子プロセスに終了してもらいたい よろしくお願いします
- 580 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:02:32 ]
- そもそもWin32API使う意味がいったいどこに?
- 581 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:08:55 ]
- C++でパイプを使った経験があったのでパイプをやろうとして、
C#でパイプをやるためにWin32APIを使うことにしました
- 582 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:18:59 ]
- ProcessStartInfo.RedirectStandardInput
Process.StandardInput この辺使う
- 583 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:59:47 ]
- なるほど
他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね 自分で調べてた限りでは見つかってなかった情報なのでとても助かりました 試してみます ありがとうございました
- 584 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 10:37:20 ]
- string str = File.GetLastWriteTime(Path).ToString();
このようにファイルの最終更新時間を取得すると、 そのファイルのプロセスが使用中のままになるのですが、 CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?
- 585 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:06:44 ]
- ならんが
- 586 名前:584 mailto:sage [2008/05/30(金) 11:10:07 ]
- すみません。
File.GetLastWriteTimeのせいじゃありませんでした。 File.GetLastWriteTimeタンごめんんささい。
- 587 名前:File.GetLast mailto:sage [2008/05/30(金) 22:49:58 ]
- んもー
- 588 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:36:30 ]
- 何言ってんだお前らは?釣りか?
| 問 1 |(ア) (イ) (ウ) (エ) (オ) |D D D D D |C C C C C |B B B B B |A A A A A |@ @ @ @ @
- 589 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:37:34 ]
- 誤爆りました。スマソ
- 590 名前:579 mailto:sage [2008/05/31(土) 05:59:48 ]
- アドバイスいただけた方法でうまくいったので(ありがとうございます)報告します
ちょっとはまった点としては、 改行コードをWriteしてもフラッシュされない →出力がほしい時はちゃんとフラッシュ 子プロセスのStdinに対するエンコーディングはProcessStartInfoから設定できない →StandardInput.BaseStreamを取得して新しくStreamWriterを作る ぐらいでした 当初の問題だったEOF云々は、Process.StandardInputのストリームを閉じると 問題なく処理されました 求めていた処理を考えていたやりかたよりずっと簡単に得られたので大満足です
- 591 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:19 ]
- 今、とあるゲームの画面の各部をキャプチャして画面を認識し、指定した部分をクリックしたり文字を送ったりするプログラムを作っています。
VisualC#のデバッグモードで動かしていると、画面上の指定部分をキャプチャする関数の中で使っている、Graphics.GetHdc()の部分で、 「ArgumentExceptionはハンドルされませんでした。 使用されたパラメータが有効ではありません」 のメッセージがでて止まってしまいます。10回に1回くらいの頻度かな。 ローカル画面で変数の値をチェックしても、キャプチャ範囲に異常な値は無く(bmpのサイズなど正常)、何でこうなるのか心当たりがありましたら指摘してもらないでしょうか。 #複数の呼び出し元から、この関数が同時に呼び出されているときにこんなことおこるのかな・・・? ちなみに、キャプチャやってる関数を下に貼り付けてみます。 ----------- public Bitmap CapturePartFromA(int[] capval) { //capval[] はキャプチャ範囲を収めた配列。ここでは[3]と[4]のみ利用 Bitmap bmp; //座標系を変換する関数の戻り値保存用 int[] xxx = new int[4] { 0, 0, 0, 0 }; IntPtr hWnd = FindWindow("A Game", null); RECT winRect2 = new RECT(); GetWindowRect(hWnd, ref winRect2); //座標を変換する関数(クライアントの原点←→デスクトップの原点) xxx = ConvertCoordinates(capval); bmp = new Bitmap(capval[3], capval[4]); Graphics g = Graphics.FromImage(bmp); IntPtr hDC = g.GetHdc(); //←ここで 例外頻発 IntPtr winDC = GetDC(hWnd); BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, xxx[0], xxx[1], SRCCOPY); g.ReleaseHdc(hDC); g.Dispose(); ReleaseDC(hWnd, winDC); return bmp; }
- 592 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:44:08 ]
- >>591
チートスレ池
|

|