C#, C♯, C#相談室 Part46at TECH
C#, C♯, C#相談室 Part46 - 暇つぶし2ch369:デフォルトの名無しさん
08/05/23 15:37:57
ファイルの読み書き単位でエンコーディングを指定するのではなく、
プログラム全体でエンコーディングをしているする方法はないですか?

370:デフォルトの名無しさん
08/05/23 15:46:03
>>368
private double x;

public double X { get; set; }
は別物だよ。
xをプロパティとしたいなら
public double X { get{return x;} set{x=value;} }

自動プロパティを使いたいならprivate double x;は消して
public double X { get; set; }だけにして、Xを変数のように使えばいいよ。
ただその場合はprivateではないけどね。

371:デフォルトの名無しさん
08/05/23 15:59:52
>>369
CreateStreamReaderAsShiftJIS/CreateStreamWriterUTF8メソッドでも用意しとけば?

372:デフォルトの名無しさん
08/05/23 17:04:01
初心者ですが質問させてください。

Webbrowserコンポーネント(Webbrowser1)でgoogleを表示しておいて、
ソフトのTextBox(TextBox1)に検索ワードを入力して、Button(Button1)を押したら、
Webbrowser側に検索ワードが読み込まれて自動で検索するようにしたいんですが、
どのようにすればいいか検討がつきません。

開発環境はVisualstudio2005、言語はC#です。

373:デフォルトの名無しさん
08/05/23 17:07:41
コンポーネントでの表示が必要なの?
httpで通信するってんじゃだめかい?

374:デフォルトの名無しさん
08/05/23 17:10:13
>>372
事前にgoogleを表示しとく意味があるのか?
取り敢えず適当にgoogleで検索して検索結果画面のURL調べれ
あとSystem.Web.HttpUtilityのUrlEncodeとUrlDecode調べれ

375:デフォルトの名無しさん
08/05/23 17:11:44
>>373

webにいろいろと自動入力するシステムを作らないといけなくなりまして。
たとえばブログにあらかじめTextboxに入れておいたIDとパスを入れて自動ログインするとか
そういったものなんですけど、webのフォームに、Textboxから値を入れる方法が知りたくて、
Googleはそのたとえのつもりでした。
http通信?の意味がよくわからないんですが、ソフト内のブラウザ上で表示させる必要はあります。


376:デフォルトの名無しさん
08/05/23 17:13:21
>>374
Googleっていうたとえが悪かったですね。ごめんなさい。
>>375で書いたように、Webサイト上のフォームにソフトのTextBoxで記載したワードを記入するのが目的です。

377:デフォルトの名無しさん
08/05/23 17:27:16
WebRequest を使って WebResponse を取得し、
その内容を反映させては。

378:デフォルトの名無しさん
08/05/23 17:30:01
素直にHTTP POSTしろよ低脳。
こんなの厨房でも出来るぞ

379:デフォルトの名無しさん
08/05/23 17:39:43
>>377
どのメソッドを使えばいいかわからなかったので、ググってみたらできそうです、ありがとうございます。

>>378
HTTP POSTで検索したらそれらしいのがでてきました。ありがとうございます。

380:デフォルトの名無しさん
08/05/23 17:40:12
おい小学生かもしれねえだろうが

381:デフォルトの名無しさん
08/05/23 17:41:46
>>368
おそらくやりたいことは

public double X { get; private set; }

これだけでいいと思われる。

これでXのセッターはprivateになる。

382:デフォルトの名無しさん
08/05/23 17:43:52
>>380
そのとおりです小学校3年生です。
バカな質問してすいませんでした。

383:デフォルトの名無しさん
08/05/23 17:46:22
>>380
小学生に失礼だ

384:デフォルトの名無しさん
08/05/23 17:48:58
>>381
自動プロパティのセッタゲッタの片方だけのプロテクションを帰ることは出来ないよ。

385:デフォルトの名無しさん
08/05/23 17:52:20
>>384
いきなりどうしたの?
俺ができてるからそう書き込んでるんだけど。



386:デフォルトの名無しさん
08/05/23 17:54:35
俺もプロパティはほとんど

public Foo Foo{ get; private set; }

だな
普通のプロパティなんてかったるくて書いてられん

387:デフォルトの名無しさん
08/05/23 17:55:26
>>384
知ったか?
それとも何か他に深い意味があるの?

388:358
08/05/23 18:08:21
うまく書けるようになりました。
ありがとうございました。

389:デフォルトの名無しさん
08/05/23 18:15:11
>>372
まあ、解決したならそれでいいけど、これでいいよ。
private void button1_Click(object sender, EventArgs e)
{
HtmlElement input = webBrowser1.Document.All.GetElementsByName("q")[0];
HtmlElement form = webBrowser1.Document.All.GetElementsByName("f")[0];

input.SetAttribute("Value", textBox1.Text);
form.InvokeMember("submit");
}

>>378
ログイン処理とかだと、ログイン前のセッションクッキー引き回しとか、
JavaScriptによるワンタイムキーの生成とかが必要になると、そのへんは
ブラウザに任せた方がはるかに簡単。

390:デフォルトの名無しさん
08/05/23 18:34:21
便乗だけどオンラインゲームの自動ログインはどうやればいいの?
URLリンク(dobon.net)
ここを参考にしたけどだめみたいなんだ。
たとえば
URLリンク(suddenattack.redbanana.jp)
ここに自動ログインするためにはどうしたらいいのかな?

391:デフォルトの名無しさん
08/05/23 19:21:51
>>389さん、ありがとうございます!
検索してもわからず、困っていたところでした。
("q")と("f")のところにhtmlからそのフォームのnameをもってきたらいいということですか?
やってみます!またできたら報告しますね。

392:デフォルトの名無しさん
08/05/23 19:28:24
Hashtableから値取り出すときにキャストしないでいい方法はない?
面倒くさいんですけどん。

393:デフォルトの名無しさん
08/05/23 19:29:59
VS2005以降ならDictionaryを使う

394:デフォルトの名無しさん
08/05/23 19:31:53
>>393
サンクスです。
こんなのがあったんですね。

395:デフォルトの名無しさん
08/05/23 19:43:16
GenericはC#2.0の最大の目玉じゃないか…

396:デフォルトの名無しさん
08/05/23 20:38:55
>>390
やろうと思えばできる。
IDとパスのINPUTタグのIDを調べ>>389のようにIDとパスを入力し、
こいつらを管轄するフォームでsubmitする。

ヒント:javascriptを実行してからsubmitを行う。

397:デフォルトの名無しさん
08/05/23 20:52:21
windowsアプリなんですが、メインのフォーム内のメソッドで
そのフォームがもってるある型の変数全部の値を一括で変更
する方法はありますか?

おねがいします。

398:デフォルトの名無しさん
08/05/23 20:56:16
リフレクションを使います

399:デフォルトの名無しさん
08/05/23 20:58:34
>>396
javascriptは全然わからないから詰まってます。
submit()を実行すると無限に更新されるみたいなのですが・・・。
htmlソースみるとLoginLeftFormCheck()を呼び出してるみたいなのですが関係ないですかね。

400:390
08/05/23 21:04:58
意味も分からずコピペなんですけど、
public Form1()
{
InitializeComponent();
webBrowser1.Url = new Uri("URLリンク(suddenattack.redbanana.jp)");
}
private void button1_Click(object sender, EventArgs e)
{
HtmlElement id = webBrowser1.Document.All.GetElementsByName("user_id")[0];
HtmlElement pass = webBrowser1.Document.All.GetElementsByName("user_pwd")[0];
id.SetAttribute("Value", "aaaaa");
pass.SetAttribute("Value", "bbbbbb");
}
こんな感じでフォームに文字が入りました。
あとはログインボタン押して、ゲームスタートボタン押すだけなんですが・・・

401:デフォルトの名無しさん
08/05/23 21:05:33
>>396
いやそいつを実行するの。

402:デフォルトの名無しさん
08/05/23 21:06:25
>>400
ログインボタン、エンターキーおしたらいけないの?

403:デフォルトの名無しさん
08/05/23 21:06:26
>>399
JavaScriptもわからないようならC#とか無理だから諦めろ。
なでしこでもやってろ

404:デフォルトの名無しさん
08/05/23 21:06:59
安価ミス
>>396>>399

405:390
08/05/23 21:11:35
>>401
実行するってことはInvokeMember("LoginLeftFormCheck")ってことですかね?

>>402
フォーム上ならエンターキーでもログインできます。

406:401
08/05/23 21:28:18
すまん。VS2005についているWebBrowserは詳しくないんだ。
COMコンポーネントのMicrosoft Web Browserコントロールと、Microsoft.mshtmlというライブラリでしか
俺はできないんだ。(メソッドやら何やらがわかりやすい。)
Microsoft.mshtmlは.NetFramework1.0にしかついてこんのだ。
で、このMicrosoft.mshtmlを使ったやり方で説明すると、
・・・・・
Dim id As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd")
id.value = "id"
Dim pwd As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd")
pwd.value = "password"
doc.parentWindow.execScript("LoginLeftFormCheck()") ' LoginLeftFormCheck()を実行
pwd.form.submit() ' フォームをsubmit(これはInvokeMemberでできるとおもわれ)

これでログインできる。
ゲームのスタートボタンはFlashであるために、プログラム上で操作する方法があるかもしれないが、
俺は残念ながらわからんかった。
まえ、ガンストの自動ログインツールを作成したときは、画面にブラウザを貼り付けて、
ゲームのスタートボタンが確実に見えるサイズに広げて、APIでマウスを操作するプログラムを書くという
逃げ道でやった。

407:デフォルトの名無しさん
08/05/23 21:52:19
Windowsアプリケーション学習用にC#をやろうと思っています。
Microsoft Visual C# 2008 Express EditionをSDKとSQL Serverつきでインストールしました。
しかし何をどう作っていったらいいかわかりません。
プログラム経験はPHPでWebプログラム(こちらは趣味で3年以上やっていて2ch風掲示板ぐらいのものは作れます)、
あとオブジェクト指向の勉強にJavaを少しいじった程度です。
Javaでは簡単なファイル操作から、オブジェクトの継承や例外処理など基本的な勉強しかしていません。
Webプログラムはイメージ的にわかるので、ASP.NETあたりはなんとか理解できると思うのですが、
Windowsアプリケーションとなると右も左もわかりません。
まずは何をやったらいいのでしょうか?

408:デフォルトの名無しさん
08/05/23 21:54:25
何をやりたいの?

409:デフォルトの名無しさん
08/05/23 21:55:56
>>407
スレチこっちで質問しなおせ
スレリンク(tech板)
スレリンク(tech板)

410:407
08/05/23 22:04:58
>>408
とりあえずWebアプリケーションでいうチャットやカウンターのような位置づけなものを作ってみたいです。
(ようするに簡単なものです)
おそらくメモ帳のようなものになるのでしょうか?
ペイントのようなものも作ってみたいですが、メモ帳に比べると難易度はあがりそうですね。
簡単なテーブルゲームなんかも作ってみたいですが、アルゴリズムの勉強はしてないので少し厳しそうです。

>>409
了解です。そちらで質問しなおします。

411:390
08/05/23 22:15:45
>>406
どうもありがとうございます。
webBrowser1.Url = new Uri("javascript:" + Uri.EscapeDataString("LoginLeftFormCheck();"));
で無理やり実行してみたらfalseが返ってきちゃいました。
マウス操作も考えたんですけど、ブラウザやマウスが勝手に動く様が見えちゃいますよね。。

412:397
08/05/23 22:32:25
すいません。リフレクションを使っても取り出せるのは
型情報でインタンスの値は取り出せないのではないでしょうか?

もう少しキーワード教えてください。

413:デフォルトの名無しさん
08/05/23 22:43:15
型情報からフィールド一覧取れるだろ
FieldInfoから値取得できる

414:401
08/05/23 22:51:20
>>406
いや、LoginLeftFormCheckは単に実行するだけでOK。
submitすりゃ、ログインされる。
javascriptは多分InvokeScriptでできない?

マウスは勝手に動くようにみえちゃう。これは仕方ない。

415:デフォルトの名無しさん
08/05/23 23:23:57
>>411
>>409

416:デフォルトの名無しさん
08/05/23 23:34:10
ここはなにを話すスレ?

417:デフォルトの名無しさん
08/05/23 23:36:31
C#プログラマの雑談スレ


418:デフォルトの名無しさん
08/05/23 23:44:16
>>1
>(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

C#プログラマの雑談スレなんて限定的には書いてないけど?
しかもスレタイは「相談室」だぞ

419:397
08/05/23 23:44:32
FieldInfoのGetValue,SetValueでできました。
ありがとうございます。

420:デフォルトの名無しさん
08/05/23 23:55:28
JRq8rZjk7c

鳥解析4649

421:デフォルトの名無しさん
08/05/24 00:04:49
私怨乙

422:390
08/05/24 01:09:12
>>414
ありがとうございました。
ゲームスタートのFlashもjavascriptを呼んでいましたので直接呼んだら開始できました!

423:デフォルトの名無しさん
08/05/24 01:53:52
>>416
C#、.NET(ただし、C#を使っている前提)に関することで、
主にふらっとだとアレな話題や雑談とかのスレ
と、俺は解釈してる

ここで質問すること自体は悪いとは思わないが、
ふらっとの方がより適切だとも思ってる

424:デフォルトの名無しさん
08/05/24 04:07:26
ふらっとは初心者用だから。
回答者も初心者スレにいなかったら結局このスレに質問しに来るのでは?
たらい回しはいかんよ。

425:デフォルトの名無しさん
08/05/24 04:09:08
俺はふらっとが初心者用でこっちが中級者の集まりだと思っていた。
こっちでの質問はOOPとか言語仕様なりの高度な質問になる感じ

426:デフォルトの名無しさん
08/05/24 04:11:33
>>425
元の趣旨はそうだが実情は逆


427:デフォルトの名無しさん
08/05/24 04:44:53
そんなの主観的なんだからどっちだっていいだろ。
質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。
ただそれだけ。

428:デフォルトの名無しさん
08/05/24 04:57:34
複数あるのは害でしかない
みんなわかってるはずだ

429:デフォルトの名無しさん
08/05/24 05:05:02
>>424
心配無用。
どうせ皆も両方見てるんでしょ。


430:デフォルトの名無しさん
08/05/24 05:42:36
どっちか削るとしたら明らかに初心者用だよな。
で、もし削ったとしたら初心者隔離スレも欲しくなるよな。
ここまで言えばわかるよな。

431:デフォルトの名無しさん
08/05/24 10:55:50
ぬるぽ

432:デフォルトの名無しさん
08/05/24 12:40:47
>そんなの主観的なんだからどっちだっていいだろ。
>質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。

えてしてその主観が間違ってるから問題になるんだが。


433:デフォルトの名無しさん
08/05/24 15:28:08
オレが全部答えてやんよ
だからもう喧嘩するな

434:デフォルトの名無しさん
08/05/24 17:44:12
整数5ずつにしたいのですが……うまく言えないのですが、例えば、
96なら95、98なら100、53なら55、42なら40
と言うふうにしたいのですが、どうすればいいでしょうか?

435:デフォルトの名無しさん
08/05/24 17:46:22
C#で自作した外部アプリケーションを呼び出したいのですが、
Process process = new Process() ;
process.StartInfo.FileName = "hoge.exe" ;
process.Start() ;
こんな風に実行することが出来るようなのですが、
外部アプリケーション側に文字列を複数与えたいのです。
その場合呼び出す側と呼び出される側はどのような準備をすればいいのでしょうか?

436:デフォルトの名無しさん
08/05/24 17:49:25
>>434
問題を定義しなおしてから来い。
>>435
Process.Start(hoge.exe,"arbitrary string");

437:デフォルトの名無しさん
08/05/24 17:52:06
俺は>>434の言いたい事がわかったが次にどう書いてくるか楽しみなので伏せておく。

438:デフォルトの名無しさん
08/05/24 17:53:32
>>434
int number;

number = 適当な数値;

if (number % 10 < 4) number = number - (number % 10);
else number = number + 10 - (number % 10);

適当に今思いついたがこんなんで良いか?

439:デフォルトの名無しさん
08/05/24 17:58:08
あ、5ずつか普通に四捨五入してるわこれ

440:435
08/05/24 18:00:09
>>436
文字列を複数渡したいのですが
Process.Startの第二引数はstring[]でもいいのですか?

それと受け取る側はどうすればいいのでしょう?

441:デフォルトの名無しさん
08/05/24 18:01:03
>>438
ありがとうございます。
さっそく導入してみたのですが、これだとただの10ずつになってしまうのですが……。

っと書いていたら439の返事がきました。
ありがとうございます。
こういうのも四捨五入というのですか……。
勉強になりました。

442:デフォルトの名無しさん
08/05/24 18:02:00
>>440
無理。記号を決めてそれを受け取る側で改行と見なすくらいしかない

443:デフォルトの名無しさん
08/05/24 18:02:40
>>438の使って
if (number % 10 < 5) number = number - (number % 10)+5;
else number = number + 10 - (number % 10);
でいいんじゃね?

444:デフォルトの名無しさん
08/05/24 18:02:43
あ、ちょっといじったらできました。
もうちょっとテストして、また報告させていただきます。
本当にありがとうございました。

445:デフォルトの名無しさん
08/05/24 18:04:33
連投失礼します。
>>443
ありがとうございます。
それでいけそうです。
これまたもう少しテストしてきます。

446:デフォルトの名無しさん
08/05/24 18:06:56
こうでしょ。
int mod = x % 5;
x += mod > 2 ? 5 - mod : -mod;


447:デフォルトの名無しさん
08/05/24 18:08:21
>>442
string一つだけなのですか。

受け取る側はどうすればいいですか?
受け取る側はコンソールではなくフォームアプリケーションです。

448:デフォルトの名無しさん
08/05/24 18:17:35
>>447
スペース区切りとかで渡して、
splitで分割するなりすればいいんじゃね?

449:デフォルトの名無しさん
08/05/24 18:19:37
>>446
ありがとうございます。
>>443さんの方法だと、きりのいい数字だとちょっとおかしくなるようでした。
446さんの方法は私程度にはどういう処理をしているのかさっぱりなのですが、
問題なく使えます。

みなさん本当にありがとうございました。

450:435
08/05/24 18:30:42
Environment.CommandLineで受け取るか、
コンソールと変わらずにエントリポイントから受け取ればいいんですね。


451:デフォルトの名無しさん
08/05/24 18:40:20
>>431
AutoNullpoOudaki gattu = new AutoNullpoOudaki();
gattu.Execute();

452:デフォルトの名無しさん
08/05/24 19:11:50
文字列から動的にExpressionTreeやFuncを得ることって出きるん?
URLリンク(ufcpp.net)
ここで書いてあるような子としてみたかったんだが、CodeDom.GetExpressionFromとか見あたらず、いろいろググってもそれらしいのにたどり着けず・・・
CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば出来無くないんだけれどもう少しまともな方法で・・・


453:デフォルトの名無しさん
08/05/24 19:31:07
>>452
そのページにある「ソース一式」のところからソース落して、
中身の「MyMath\CodeDom.cs」の中にその GetExpressionFrom の実体がある。

454:デフォルトの名無しさん
08/05/24 19:32:55
ちなみに、そのソースの GetExpressionFrom はまさに、その
「CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば」
をやってるだけ。

もう少しまともな方法、確かに欲しいよね。

455:デフォルトの名無しさん
08/05/24 19:47:03
>>453
さんくすこ。
てっきり.NET3.5以降で追加されたのかと思ってた・・・orz

CocoaのようなKVCとかやるためにリフレクションからコード生成→lambdaにしてそれなりに高速にアクセスみたいなことしたかったんだが・・・
場合によって、無理やりコンパイルでlambda変換するようにしようかな・・・
あぁ書いてて思ったが、式ツリー手動でいじくればいいのか。よくわからんがやってみるノシ

456:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/24 20:26:10
>>456

SoundPlayer player = new SoundPlayer("path");
player.PlaySync();



458:デフォルトの名無しさん
08/05/24 20:37:51
メッセージとしてスウェーデン語文字を表示させたいのですが、
なぜか読み込んでくれずにエラーが起きてしまいます
どうしたらよいのでしょうか

459:456
08/05/24 20:42:51
>>457
ありがとうございます。実際にwavファイル置いてパス指定して音を鳴らすことは問題なくできるんですが、
埋め込めたら良いなぁ・・・ってことなんです。
もしかして、埋め込みは無理ってことですか?

460:デフォルトの名無しさん
08/05/24 20:42:50
>>452
これがクエリ式のパーサ持ってたと思う。使い回せるかも。
URLリンク(www.codeplex.com)

使い方は"poorman's linq"でぐぐる。

461:デフォルトの名無しさん
08/05/24 20:45:46
>>458
取りあえずエラーとやらに付随してるメッセージを読み上げるといいよ

462:デフォルトの名無しさん
08/05/24 20:46:10
>>458
OSにスウェーデン語パックを導入しる

463:デフォルトの名無しさん
08/05/24 20:48:49
>>462
今からググってきます。ありがとうございました

464:デフォルトの名無しさん
08/05/24 22:09:12
レベルの低い質問で申し訳ありません。
出力の種類を「クラスライブラリ」としてあるプロジェクトを、スタートアッププロジェクトに設定した他のプロジェクトに参照させるにはどうすればよいのでしょうか。
そのままusingしようとしても「名前空間がない」と言われてしまいます。

465:デフォルトの名無しさん
08/05/24 22:12:54
>>464
ソリューションエクスプローラで参照したいプロジェクトを右クリックして
参照の追加 → プロジェクト

466:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/24 22:37:56
>>465
ありがとうございます。

468:デフォルトの名無しさん
08/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絡みで問題があるらしい。
詳しくはこれを。

URLリンク(dobon.net)

469:デフォルトの名無しさん
08/05/24 23:05:15
ブロック崩しを作ったのですが、ボールが宙に浮いているときにスペースキーを押すと、
ボールが画面外に飛び出してしまうのです。どうにかなりませんか?
ちなみにソースはこれ

URLリンク(www.borujoa.org)

470:デフォルトの名無しさん
08/05/24 23:24:40
ソースを解析したうえでデバッグしてくれと。

471:デフォルトの名無しさん
08/05/24 23:27:03
>>469
ソース見て吹いたw

472:デフォルトの名無しさん
08/05/24 23:31:36
>>469
こういうifの書き方好きなの?


473:デフォルトの名無しさん
08/05/24 23:31:59
ってそもそもスレ違いじゃん

474:デフォルトの名無しさん
08/05/24 23:32:51
何でもう消えてるんだよ。ちょっと見てみたかった

475:デフォルトの名無しさん
08/05/24 23:56:20
キャッシュ漁ったら見つけた


476:デフォルトの名無しさん
08/05/24 23:59:51
型に格納できる値の最大値、最小値を返す関数はありますか?
例えば、unsigned intなら0か4294967295を返せる、といったような。
変数の型の範囲を超えるような値が格納されそうになった場合、エラーを出すような関数を作ろうと思っているので。

477:デフォルトの名無しさん
08/05/25 00:03:33
MaxValue/MinValueじゃ足りんのか?

478:デフォルトの名無しさん
08/05/25 00:19:23
そんなの、泣けりゃじぶんで定義して返せよ

479:デフォルトの名無しさん
08/05/25 00:24:16
LL言語のWWW::Mechanize的なのを探してます。
C#や.NET Framework向けのwebスクレイピングライブラリはないですか?
検索してたのですが、なかなか見つからないや・・・

480:デフォルトの名無しさん
08/05/25 00:24:27
スレ違い

481:デフォルトの名無しさん
08/05/25 00:24:56
>>478
いやいや、476はMaxValue/MinValueを知った上でそういう関数が欲しいんじゃなくて、
ただ単に MaxValue/MinValueの存在を知らないだけじゃないかと。


482:デフォルトの名無しさん
08/05/25 00:27:41
関数はまあ見逃すとしてもunsigned intなんて言ってる時点でスレ違いである事に気付こうな


483:デフォルトの名無しさん
08/05/25 00:28:51
>>479
MS は文法のゆるい HTML を機械処理するのはあまり好きじゃないみたい。

HTML2XHTML みたいなものを通して文法の正しい XML にした上で、
XmlReader やら LINQ to XML でアクセスするのがいいかと。
↓でそういうことやってるんだけど、
URLリンク(d.hatena.ne.jp)
HTML2XHTML が微妙臭い。

484:デフォルトの名無しさん
08/05/25 00:29:53
>>482
しっかり読んでなかったw

それはちゃんと、「C# は C/C++ とは違いますよ」誘導してやろうよ。

485:デフォルトの名無しさん
08/05/25 00:52:32
>>477
ありがとうございます。
>>481
その通りです。低レベルすぎてすみません。
>>482
C#ではUInt32って書くんですね。ありがとうございます、勉強になりました。

486:デフォルトの名無しさん
08/05/25 01:45:22
>>483
クッキーとか面倒なところを良きにはからってくれるのはないっぽいですね。

LLと組み合わせるしかないか・・・
GUI楽したいので.NET使いたかったけど、うまくいくかなあ

とりあえうずありがとう。
いろいろ試してみます

487:デフォルトの名無しさん
08/05/25 07:57:54
2005のPropertyGridについて質問
プロパティタブをいくつか追加したりしてるんだが
ボタンに使われる画像の色が PropertyTab.Bitmap で retuen した Format32bppArgb の画像と微妙に違う
見た感じは大体同じなんだが、実際のRGBを調べるとほんの少しずれてたりする
何か色数の制限があるのなら、それに合わせた画像にするんだけど分かる人いる?

488:456
08/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
08/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:デフォルトの名無しさん
08/05/25 11:27:09
質問です
ネットの初心者向けサイトを見ながらC#をやっていたんですがそろそろきつくなってきました
とくにデリゲートをイベントハンドラとして実装するところと、イテレータがよくわかりません
初心者から中級者にレベルアップするために買うべき本を教えてください

491:デフォルトの名無しさん
08/05/25 14:11:02
C#用のDXライブラリと言うものがあったので早速使ってみたのですが、エラーが出ました。

空のプロジェクトに参照をDLLを追加し、Class.csファイルを作り、メインメソッドに
DxLibrary.DxLib_Init();
と書いただけなのですが、
DLL 'DxLibDll.dll' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E)
と出てしまいます。

DLLはあらゆる場所に配置して試したのですが、
やはり同じようにエラーがでます。
何か特別な書き方が必要なのでしょうか?

492:デフォルトの名無しさん
08/05/25 14:17:45
DXライブラリの公式サイトで提供されてる方のC#用DXライブラリを使え
使い方も丁寧に書かれてる

493:デフォルトの名無しさん
08/05/25 14:19:29
>>492
ありがとうございます。

いつのまにか出てたのですか!?
なぜエラーが出たのかは未だ不明ですが、早速使ってみたいと思います。

494:デフォルトの名無しさん
08/05/26 15:17:26
質問です。
2つのスレッドでそれぞれフォームを作成し表示します。
このとき、これらフォームの表示順位(重なり)を
コントロールすることは可能でしょうか?

なんか、デバッカ上とSetup後のプログラムで表示順がことなって
メッセージボックスが隠れたりする・・

495:デフォルトの名無しさん
08/05/26 17:06:52
構造体の中で1次元配列メンバを持つには
struct A{
public fixed double b[123];
};
でいけますが、
構造体の中で2次元配列メンバを持たせるために
struct A{
public fixed double b[123][234];
};
などとやってもエラーになります。
構造体の中で2次元配列メンバを持たせることは可能でしょうか?

496:デフォルトの名無しさん
08/05/26 17:10:31
494です。自己レスします。
とりあえず以下HPを参考にし、隠れていたダイアログが表示されるようになりました。(暫定対応ですが・・)
URLリンク(www.atmarkit.co.jp)
端的に言うと、複数のアプリをダブルクリックしたときと同じで、
後から立ち上げた方が優先されて表示される。のと同じみたいです。

お騒がせしました。

497:デフォルトの名無しさん
08/05/26 17:17:20
>>495
fixedである以上は無理

498:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/26 18:20:50
狂っているその感覚を修正する事をお勧めします。


500:デフォルトの名無しさん
08/05/26 18:21:08
それで十分スタンダード

> for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。
この感覚を何とかしたほうがいい


501:デフォルトの名無しさん
08/05/26 18:23:51
もしかして
A[] a = new A[n] ← classA型の変数を宣言
a[i] = new A(); ← 実際に代入
つまり、for文の中では代入行為しかやってないから消えない、ということですか?

502:デフォルトの名無しさん
08/05/26 18:29:29
GCのアルゴリズムを理解した方がいいよ。

GCってのは「参照できる限りは消えない」

例えばnが1なら、forを抜けても a[0]を参照できるでしょ?
で、参照できるので消えない。

503:デフォルトの名無しさん
08/05/26 18:34:42
了解しました。勉強します。

504:デフォルトの名無しさん
08/05/26 19:18:27
というかスコープを勉強したほうがいいだろ

505:デフォルトの名無しさん
08/05/26 19:20:45
スコープは割と正しく理解出来てるような発言に見えるけど?

506:デフォルトの名無しさん
08/05/26 19:30:39
GCとは全く関係ないだろ。
スコープの話をしてると思うんだが。

507:デフォルトの名無しさん
08/05/26 20:26:57
コンストラクタでフィールドにインスタンスを代入したら不自然か

508:デフォルトの名無しさん
08/05/26 23:14:09
なんでGCが出てきたんだw


509:デフォルトの名無しさん
08/05/26 23:16:05
↑遅れてきたアホ


510:デフォルトの名無しさん
08/05/26 23:36:55
確かにマオは四川省だったから ヤバスwww

511:デフォルトの名無しさん
08/05/26 23:37:37
スマソ、誤爆った

512:デフォルトの名無しさん
08/05/26 23:41:06
newしたものはアクセスできるなら消えない

513:デフォルトの名無しさん
08/05/27 00:18:08
>>505
できてないできてない。

514:デフォルトの名無しさん
08/05/27 00:46:13
.NETのGCはスコープより早く働くことがあるから要注意なんだよね。たとえば
static void Main() {
 Hoge hoge = new Hoge();
  hoge.Foo();    // hogeが参照されるのはここが最後
  // 時間のかかる処理
}
hogeがまだスコープ内にあるにもかかわらず、時間のかかる処理の最中にGCされることがある。


515:デフォルトの名無しさん
08/05/27 00:50:36
↑あほ?wwwwww

516:デフォルトの名無しさん
08/05/27 00:53:20
そんなものに注意は不要


517:デフォルトの名無しさん
08/05/27 01:00:18
URLリンク(dobon.net)
ここの真ん中くらいの「補足:ニュースグループ・・・」あたりにその例が出てる。
KeepALiveを使ってる箇所。

518:デフォルトの名無しさん
08/05/27 01:14:44
これもスコープ終了以前にGCされて落ちる例だね。

「ふらっとC#,C♯,C#(初心者用) Part22」
スレリンク(tech板:850-877番)

>876 名前: 875 [sage] 投稿日: 2008/01/08(火) 00:46:17
>>850
>あーもしかしてと思ってと思って>>875のコードから
>GC.KeepAlive(func); 抜いたら確かにAccessViolationExceptionおきるね。
>言ってるのはこれのことじゃろか。

>P/Invokeにデリゲートを渡す場合、そのデリゲートの寿命管理は.NET側の責任。
>実は元のるびま記事にも書いてある。
URLリンク(jp.rubyist.net)

519:498
08/05/27 01:56:25
もしかして>>501の理解も間違いだらけなんでしょうか?
もう少し詳しく教えていただけませんか。

520:デフォルトの名無しさん
08/05/27 02:21:58
>>498はGCと関係ないよ。
厳密には関係なくないとしてあえて言うと、
new A[n]したオブジェクトはA[] aの寿命(参照が外れるまで)生きてる。

521:デフォルトの名無しさん
08/05/27 05:51:20
初歩的なことだとうじゃうじゃ煽りレスがついたりするのに
ちょっと難しい質問だとなかったかのようにスルーするお前らワロスw

522:デフォルトの名無しさん
08/05/27 08:25:46
>>521
最近はROM主体だが、お前の発言が一番醜く見える。
そんなに無視されたのがくやしいのか? ちなみにどの質問なのか示してみ。

523:デフォルトの名無しさん
08/05/27 08:56:45
どこが難しいの?直前のネタはフラットでもスルーだろ・・・C#関係ないし

524:デフォルトの名無しさん
08/05/27 09:04:01
>>518
それはスコープが終了するとGCされるから、プログラマの責任でスコープを終了させんな、って話だ。

525:デフォルトの名無しさん
08/05/27 09:12:10
>>522
わざわざROM主体とか前置きしないとレスできないのかよw

526:デフォルトの名無しさん
08/05/27 09:14:26
ROM主体と言うのを何か言い訳に使ってるなら
>>525のレスは理解出来るが、別に言い訳に使ってないじゃん
まあ、無駄な前置きではあるけど

527:デフォルトの名無しさん
08/05/27 09:40:12
>>526
まあ、第三者を装ってるあたりはみっともないな

528:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/27 13:20:13
アンマネージな世界に渡したデリゲートを安全に保持しとくには
アンマネージ側で不要になるまでGC対象にならないようにしとかなきゃならない。

てだけの話?


530:デフォルトの名無しさん
08/05/27 13:41:36
>>529
そういうこと。
他にも、インライン展開されたコンストラクタが完了する前にファイナライザが実行されることすらあるよ。
この場合もアンマネージな世界のハンドルの早すぎる解放であぼんする場合がある。

531:デフォルトの名無しさん
08/05/27 13:44:19
>>529
9割9分そういう理解でOK。>>514もアンマネージなmutexやロックのためのファイルを
開いたままにする場合などに影響が出る。
アンマネージが関係しないケースはまれなのだが、なぜかそのレアケースが、
MSDNに載ってたりする。サンプルソースは2種類あるが最初のほう。
URLリンク(msdn.microsoft.com)(VS.80).aspx

532:デフォルトの名無しさん
08/05/27 14:44:45
非同期ゲリゲートの動きを止めたいときはどうすればいいですか?

533:デフォルトの名無しさん
08/05/27 15:07:42
>>532
フラグやEventを使ってスレッド自身にそうさせるのが基本。

534:デフォルトの名無しさん
08/05/27 16:06:12
関係ない話題を知ったかでひけらかすより質問に的確に答えてあげたら?

535:デフォルトの名無しさん
08/05/27 16:10:55
いったい何の話だ?

536:デフォルトの名無しさん
08/05/27 16:12:20
すっげーすぐにレス来たww
お前が関係ない話してレスが流れたんだろ。
自分で見返せ。

537:535
08/05/27 16:19:20
>>536
えーと、俺はこのスレには初めて書いたものだが
流れがわからんからアンカーつけてくれないか?
どの質問の話かわからないから、答えようが無いわ。

538:デフォルトの名無しさん
08/05/27 16:22:12
>>531
そこのサンプル例1の解説が不正確で、プロパティの取得処理が
時間のかかる処理のためデストラクタが先に動いてしまうと読めるがそれは誤り。
もしそうであれば.NETのGCなんて安心して使えない。
それはデストラクタの使い方に重大な欠陥があるために発生する。
具体的にはExampleクラスのデストラクタで他のクラス、
この場合hashValueが参照を持つArrayクラスの後処理を書いたらいかんということ。
マネージドだけの場合は基本的にKeepAliveのことは考えなくてよい。


539:デフォルトの名無しさん
08/05/27 16:57:12
デストラクタが呼ばれるときには、既にメンバは解放された後なんだっけ?

540:デフォルトの名無しさん
08/05/27 17:11:04
微妙に違う。
ファイナライズメソッドの実行順序には何の保証もないという話。

だと思うけどリンク先見てないから確かなことは分からん。

541:デフォルトの名無しさん
08/05/27 17:11:27
>>539
メンバに参照型を持つ場合でも、オブジェクトとして独立してるので
デストラクタが動くタイミングやメモリが回収されるタイミングは不順。
順番が必要な場合はDispose(true)のパターンを使う。

542:デフォルトの名無しさん
08/05/27 17:13:17
あいや、ずっと前に読んだことあるはずでかすかな記憶によると
解放された後っていうか自分で解放してんじねーかよw
って話だったかも…


543:デフォルトの名無しさん
08/05/27 17:48:04
>>537
半年ROMれ。

544:デフォルトの名無しさん
08/05/27 18:08:24
>>543
それはない

545:デフォルトの名無しさん
08/05/27 19:47:37
一匹キティが沸いてんな・・・フラットじゃないのに

546:デフォルトの名無しさん
08/05/27 21:16:53
フラット!フラット!!

547:デフォルトの名無しさん
08/05/28 00:24:52
質問です。

フォームを2つ使うアプリを作っています。
メニューはメイン側にはありますが、サブ側は何もありません。

で、サブ側にフォーカスがある時に、メイン側のメニューのショートカットを叩いても、
フォーカスがサブ側にあるため、イベントが発動してくれません。
出来ればこのショートカットを共有したいと思っています。

サブ側でもOnKeyDownなんかで同じ関数を呼ぶようにすれば可能といえば可能ですけれど、
あまりにも美しくないなと思ってます。何か上手い方法は無いでしょうか?

548:デフォルトの名無しさん
08/05/28 00:38:50
ほかのウィンドウのイベントが別のウィンドウのショートカットをたたくというのは美しくないだろ。
ルートのフォームまでで処理されなかったイベントがアプリケーションのハンドルで処理されるというのが正しい形だと思う。

549:デフォルトの名無しさん
08/05/28 00:47:27
サブフォームでメインのOnKeyDown呼べばいいじゃん

550:デフォルトの名無しさん
08/05/28 00:50:05
返信ありがとうございます。

>>548
そもそもメインのフォームでイベントを処理している、ってのがおかしいってことですかね?
メインにしろサブにしろ、フォームはイベントを発行するだけで、
その実際の処理はアプリケーション級のオブジェクトがハンドルするわけですか。

551:デフォルトの名無しさん
08/05/28 07:35:33
MDIにしる

552:デフォルトの名無しさん
08/05/28 11:10:54
2重起動を防いで、後から起動された方に渡されたコマンドライン引数を
最初に起動された方に渡したいです。
URLリンク(dobon.net)
ここにVB.NETでのやり方が書いてあり、C#でも似たようなことは出来ると思ったんですが
Microsoft.VisualBasic.ApplicationServices
これが存在しないエラーというが発生しました。
C#だと別のプロセスにデータを渡したりって事が無理なんでしょうか?

553:デフォルトの名無しさん
08/05/28 11:20:52
参照の追加

554:デフォルトの名無しさん
08/05/28 11:21:18
それでやるなら該当のdll参照すれ

555:デフォルトの名無しさん
08/05/28 11:31:31
>>553
>>554
参照追加したらありました。
たんにusingを記述するだけじゃダメだったんですね。
これでなんとかなりそうです。
ありがとうございました。

556:デフォルトの名無しさん
08/05/28 11:37:44
URLリンク(blogs.dion.ne.jp)
ここでも聞いてるやついるな。
当たり前すぎて書かないからなー、普通。

557:デフォルトの名無しさん
08/05/28 14:13:09
なんつう偉そうなコメントだw

558:デフォルトの名無しさん
08/05/28 19:16:03
なぜSystem.Arrayクラスから派生クラスを作れないんですか?

559:デフォルトの名無しさん
08/05/28 19:17:31
CLR的に配列は特別なオブジェクトだから

560:デフォルトの名無しさん
08/05/28 21:55:06
System.Arrayクラスから派生クラスが作れると何の不都合があるんですか?

561:デフォルトの名無しさん
08/05/28 22:15:37
CLRべったりの低レベルで特殊な実装になってるから派生したところでどうせ何もできないよ
っていうかSystem.Arrayなんかそんなによく使うか?
IList使えよ

562:デフォルトの名無しさん
08/05/28 22:20:42
CLR自体、StringとかArrayとか、その内部構造自体に
依存した最適化がかかってるからだ、
ってどっかにあった希ガス。

563:デフォルトの名無しさん
08/05/29 10:14:13
C++だとコンストラクタは出来るだけ初期化のみにした方がいいけど、
C#では初期化以外にもメソッド呼び出したり処理を始めちゃってもいいの?

564:デフォルトの名無しさん
08/05/29 10:15:32
いいよ

565:デフォルトの名無しさん
08/05/29 10:30:20
いかんよ


566:デフォルトの名無しさん
08/05/29 10:51:19
C++でコンストラクタでは継承先でオーバーライドされる仮想関数は呼べないんだったっけ
C#では出来るよ

567:デフォルトの名無しさん
08/05/29 11:03:33
>>563
してもいいけど、内容によっては立ち上がりが異常に時間がかかるプログラムになる。
その場合、最小限の初期化コンストラクタとクラス初期化メソッドを作る場合もある。

568:デフォルトの名無しさん
08/05/29 11:53:48
visual studioみたいなGUIのソフト作りたいんですけど
そのためのサンプルとか無いでしょうか?
具体的には
フォームにメニューがいくつかあって
ツールボックスがあって
左側にはエクスプローラ的な表示があって
下側にはテキストのログウィンドウがあって
残りの領域にはMDIの子フォームを生成するようなGUIです。
いかがでしょうか。


569:デフォルトの名無しさん
08/05/29 14:01:25
Visual StudioというGUIのサンプルがそこにあるではないか。


570:デフォルトの名無しさん
08/05/29 14:09:14
Visual Studio のドッキングを自前でがんばったらマジで死ねるなw

571:デフォルトの名無しさん
08/05/29 14:14:20
Visual Studio以上の物ができたら教えてね
試してあげるから

572:デフォルトの名無しさん
08/05/29 17:24:15
DockPanelSuiteマジオススメ

573:デフォルトの名無しさん
08/05/29 18:41:08
MonoDevelopのソースじゃ参考にならんか…

574:デフォルトの名無しさん
08/05/29 18:43:22
>>572
すげーなこれw

575:デフォルトの名無しさん
08/05/29 19:49:33
>>572
凄いが、これを駆使したプログラムを少人数で作る気になれない。

576:デフォルトの名無しさん
08/05/29 20:04:01
URLリンク(www.codeplex.com)
made in Japan!

577:デフォルトの名無しさん
08/05/29 21:52:40
WinFormsか・・・
WPF版がほしい。

578:デフォルトの名無しさん
08/05/29 22:24:21
>>577
お前はこっち池カス

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
スレリンク(tech板)

579:デフォルトの名無しさん
08/05/30 05:22:08
C#からWin32APIを使って子プロセスを起動し、
Win32APIのCreatePipe, WriteFile, ReadFileを用いてプロセス間通信をしようとしています

このとき、立ち上げた子プロセスはコマンドを標準入力から読み込みんで処理をし、
結果を標準出力へコマンドごとに出力し、入力にEOFが来たら終了、みたいなプログラムです

ここで、子プロセスがEOFを認識してくれず、子プロセスが終了してくれません
なにかいい方法があるのでしょうか?
それともWin32APIの質問ということでよその板の方がいいでしょうか?

やっていること:
ハンドルを用意
親プロセスが無名パイプを作成する
パイプの一端のハンドルAを継承可能にする
STARTUPINFO構造体のhStdInputに継承可能にしたパイプのハンドルAを指定
CreateProcess()
継承可能にしたパイプのハンドルAを閉じる
パイプの閉じていない方のハンドルBにWriteFile()
ハンドルBを閉じる ←ここで子プロセスに終了してもらいたい

よろしくお願いします



580:デフォルトの名無しさん
08/05/30 06:02:32
そもそもWin32API使う意味がいったいどこに?

581:デフォルトの名無しさん
08/05/30 06:08:55
C++でパイプを使った経験があったのでパイプをやろうとして、
C#でパイプをやるためにWin32APIを使うことにしました

582:デフォルトの名無しさん
08/05/30 06:18:59
ProcessStartInfo.RedirectStandardInput
Process.StandardInput
この辺使う

583:デフォルトの名無しさん
08/05/30 06:59:47
なるほど
他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね
自分で調べてた限りでは見つかってなかった情報なのでとても助かりました
試してみます
ありがとうございました

584:デフォルトの名無しさん
08/05/30 10:37:20
string str = File.GetLastWriteTime(Path).ToString();
このようにファイルの最終更新時間を取得すると、
そのファイルのプロセスが使用中のままになるのですが、
CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?

585:デフォルトの名無しさん
08/05/30 11:06:44
ならんが

586:584
08/05/30 11:10:07
すみません。
File.GetLastWriteTimeのせいじゃありませんでした。
File.GetLastWriteTimeタンごめんんささい。

587:File.GetLast
08/05/30 22:49:58
んもー


588:デフォルトの名無しさん
08/05/31 00:36:30
何言ってんだお前らは?釣りか?
|  問  1
|(ア) (イ) (ウ) (エ) (オ)
|⑤ ⑤ ⑤ ⑤ ⑤
|④ ④ ④ ④ ④
|③ ③ ③ ③ ③
|② ② ② ② ②
|① ① ① ① ①


589:デフォルトの名無しさん
08/05/31 00:37:34
誤爆りました。スマソ

590:579
08/05/31 05:59:48
アドバイスいただけた方法でうまくいったので(ありがとうございます)報告します
ちょっとはまった点としては、
改行コードをWriteしてもフラッシュされない
 →出力がほしい時はちゃんとフラッシュ
子プロセスのStdinに対するエンコーディングはProcessStartInfoから設定できない
 →StandardInput.BaseStreamを取得して新しくStreamWriterを作る
ぐらいでした
当初の問題だったEOF云々は、Process.StandardInputのストリームを閉じると
問題なく処理されました

求めていた処理を考えていたやりかたよりずっと簡単に得られたので大満足です

591:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/31 17:44:08
>>591
チートスレ池

593:デフォルトの名無しさん
08/05/31 19:41:13
MMORPGの自動プログラムを作ってどうする、それほど他を出し抜きたいのか?
こんな所に来るな。

594:デフォルトの名無しさん
08/05/31 22:52:58
C# = D♭

595:デフォルトの名無しさん
08/06/01 15:20:56
>>591
評:もっとオブラートに包んだ質問のやりかたを覚えましょう。

596:デフォルトの名無しさん
08/06/01 19:22:52
エロシーンまだ?

597:デフォルトの名無しさん
08/06/01 19:27:52
せめて「GUIのテストを自動化したいです」位のうそをつく常識を持て

598:デフォルトの名無しさん
08/06/01 19:48:59
HttpWebRequest使ってゆうちょダイレクトのサイトから振り込み状況を確認するアプリ作ってるんだけど、
誰かできた人いる?
UserAgentとかいじってもなぜかはじかれる。
同じアプリでほかのhttpsサイトとかはログインできるんだけどなぁ。

599:デフォルトの名無しさん
08/06/01 20:02:32
いません

600:591
08/06/01 20:49:22
ここで知恵ある人いるかと思ったのですが・・・残念。
自助努力するしかないですね。
どうもでした。


601:デフォルトの名無しさん
08/06/01 20:49:25
なぜかって、なんのエラーで帰ってきてるの?

602:デフォルトの名無しさん
08/06/01 22:21:28
UDP通信で、C#のクライアントにVC++のCプログラムからソケットでメッセージを送って表示
しているのですが。漢字が正しく表示できません。何かのコード指定だと思うのですが、
探してみたのですが見つからず。よろしければ教えてください。
C++の手順
WSAStartup(MAKEWORD(2,0), &wsaData);
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(XXXXX); // 送信先のポート番号
addr.sin_addr.S_un.S_addr = inet_addr("XXXXXXXX"); // 送信先のIP
sendto(sock, str2.c_str(), str2.size(), 0, (struct sockaddr *)&addr, sizeof(addr));
closesocket(sock);
WSACleanup();
必要であればC#受け側も出します。
ちなみにc++側のプロジェクトの文字コードを有る分変えても変わりませんでした。

603:デフォルトの名無しさん
08/06/01 22:25:33
C#側も書こう

604:デフォルトの名無しさん
08/06/01 22:26:42
文字コード意識せずにネットワークとか

大方StreamReaderをEncoding未指定でnewしてんだろ

605:デフォルトの名無しさん
08/06/01 22:32:39
技術ある人はゆうちょダイレクトにログインするプログラムをC#でHttpWebRequestつかって組んでみてほしい。
思いのほかはまるよ。

606:デフォルトの名無しさん
08/06/01 22:33:57
>>601
サーバー側のエラーで帰ってきてログイン不可能。
エラーコードが書いてあるけど、意味がわからないので対応が難航してる。



607:デフォルトの名無しさん
08/06/01 22:36:26
>>606(=605)
そのエラーコードを書けってことじゃないのか?
イミが分からないとか、技術ある人は作ってみ?とか
根本的にダメダメwww

608:デフォルトの名無しさん
08/06/01 22:38:18
サーバー側(cgi)のエラーコードなんてC#とまったく関係ないから書かなかっただけだが。

609:デフォルトの名無しさん
08/06/01 22:40:27
>>608
オマエには無理って事で終了

610:デフォルトの名無しさん
08/06/01 22:42:59
TP1/Webのエラーコードっぽいけどな。
マニュアルある人ならわかるかもしれん。
今ゆうちょダイレクトメンテ中でエラーコード再取得できなかった。

611:デフォルトの名無しさん
08/06/01 22:43:26
>>609
お前には聞いてないってw

612:デフォルトの名無しさん
08/06/01 22:45:14
>>603  >>604の指摘でC#側を見て下記の点ではないかと思い
enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXX;
udp = new System.Net.Sockets.UdpClient(localPort);

コメント部分を追加してみましたが変えましたが、半角英数もまともに表示できなかったです。
元々はUTF8でした。 何がいけないのだろう?

613:デフォルトの名無しさん
08/06/01 22:45:51
逆ギレw

614:デフォルトの名無しさん
08/06/01 22:47:03
技術もないのにあおるだけのアホは放って置いてできる人よろしく!

615:デフォルトの名無しさん
08/06/01 22:50:06
>>614
ここで聞く前に、先ず質問の仕方を勉強してきてね

616:デフォルトの名無しさん
08/06/01 22:51:20
だなw

617:デフォルトの名無しさん
08/06/01 22:52:55
>>615,616
キメェw

618:デフォルトの名無しさん
08/06/01 22:55:16
ゆうちょダイレクトは特に妙なところはなかったように記憶しているけど、
どこでひっかかってるの?
今確認しようとしたら、ちょうどサービス停止中だな。

619:デフォルトの名無しさん
08/06/01 23:03:10
C# 側のコードです。 どのコードを指定しても正しく表示されなかった。orz
System.Net.Sockets.UdpClient udp;
private Button button1;
System.Text.Encoding enc;

enc = System.Text.Encoding.UTF8;
// enc = System.Text.Encoding.UTF7;
// enc = System.Text.Encoding.ASCII;
// enc = System.Text.Encoding.Unicode;
// enc = System.Text.Encoding.BigEndianUnicode;
localPort = XXXXXX;
udp = new System.Net.Sockets.Udp

System.Net.IPEndPoint remoteEP = null;
byte[] rcvBytes = udp.Receive(ref remoteEP);
string rcvMsg = enc.GetString(rcvBytes);

udp.Close();

バッファーを見たら、シフトJISが送られてくるようでした。
わからない…orz


620:デフォルトの名無しさん
08/06/01 23:05:29
一部切れていました。
udp = new System.Net.Sockets.UdpClient(localPort);


621:デフォルトの名無しさん
08/06/01 23:08:29
Shift_JISで送られてきてるのにUTF-8でデコードとかおかしいと思わないか?

622:デフォルトの名無しさん
08/06/01 23:11:50
思わないでーす

623:デフォルトの名無しさん
08/06/01 23:17:29
なんか、荒らされてるな。
IDない板だから、釣りや煽りに反応するのはやめましょう。
質問者の暴言は、たいてい騙り。
もちろん、ときどきとんでもない質問者もいるが、いずれにせよ放置で。

624:デフォルトの名無しさん
08/06/01 23:19:15
技術ある人に作れって時点でネタだろ

625:デフォルトの名無しさん
08/06/01 23:23:40
>>620
すみません、どの記号がどの文字コードかの知識が不足しています。orz

626:デフォルトの名無しさん
08/06/01 23:55:12
とりあえず、ゆうちょに不正アクセスしてる奴がいると通報しとくか。
3人くらいで通報すれば目付けられるから

627:デフォルトの名無しさん
08/06/02 01:27:36
何が不正?

628:デフォルトの名無しさん
08/06/02 06:31:07
.Text.Encoding.GetEncoding(932)

629:デフォルトの名無しさん
08/06/02 06:59:26
>>628
出来ましたありがとうございます。

630:デフォルトの名無しさん
08/06/02 08:16:51
とりあえず、ゆうちょにログインも出来ないアホはほっとけよ

631:デフォルトの名無しさん
08/06/02 12:59:43
ゆうちょの件一晩頭冷やして考えたらできました。
お騒がせしました。

632:デフォルトの名無しさん
08/06/02 13:09:14
>>631
>>615

633:デフォルトの名無しさん
08/06/02 13:35:31
結局何がまずかったの?

634:デフォルトの名無しさん
08/06/02 13:39:21
態度

635:デフォルトの名無しさん
08/06/02 15:04:41
>>634
いや、頭だろ・・・

636:デフォルトの名無しさん
08/06/02 17:46:07
そもそも質問してないだろ
意外とはまるからやってみぐらいの勢いだったんだが。
それを勘違いしたこまったちゃんが質問の仕方が悪いだの、態度が悪いだのってこんな匿名掲示板で言われてもなw

637:デフォルトの名無しさん
08/06/02 17:48:37
>>636
ヨチヨチwww

638:デフォルトの名無しさん
08/06/02 17:51:25
>>636
明らかに誰か作って教えてくれってスタンスだったけどなw

ヨチヨチwww

639:デフォルトの名無しさん
08/06/02 17:55:30
それはそうと、ゆうちょ興味あったら挑戦してみ。
興味なかったらいいけど。

640:デフォルトの名無しさん
08/06/02 19:57:56
ゆうちょダイレクトのアカウントなんて普通持っとらんがな(´・ω・`)
嵌るとかは単純に質問者の技術力不足だと思う

641:デフォルトの名無しさん
08/06/02 20:16:54
そうだね。
俺はそもそも技術者じゃないから技術力不足は認めるよ。
ネットショップを経営しててそれに必要な入金チェックをちょっと作ってみようかなって思っただけだし。

642:デフォルトの名無しさん
08/06/02 20:24:42
つ Python
無理にC#を使う必要性はない。

643:デフォルトの名無しさん
08/06/02 20:32:46
PythonってWinアプリ簡単に作れるの?

644:デフォルトの名無しさん
08/06/02 20:35:08
うん。GUIを扱うライブラリがあるし、IronPythonを使えば.netも使える

645:デフォルトの名無しさん
08/06/02 20:36:30
ゆうちょ房のスレ荒らしw

646:デフォルトの名無しさん
08/06/02 20:47:33
なるほど。
Python調べてみよう。Excelファイルいじくれるライブラリもあるといいけど。
C#始めて1ヶ月だけどフリーで開発環境まで全部まとめてインストールできるのが楽ではじめたんだよね。
今度は今手作業で集計してるバイトの勤怠管理でも作ってみるか。

647:デフォルトの名無しさん
08/06/02 21:08:48
ゆうちょが出てきてからスレの雰囲気がすごく悪くなった

648:デフォルトの名無しさん
08/06/02 21:21:13
過去スレ読んだが同じようなもんだぞ
ゆうちょに粘着している奴が悪くしてんじゃね?

649:デフォルトの名無しさん
08/06/03 00:14:43
>>648
ヨチヨチwww

650:デフォルトの名無しさん
08/06/03 00:21:49
なんかヨチヨチレスしかできないかわいそうなやついるな

651:デフォルトの名無しさん
08/06/03 00:52:27
なんで技術者、学生以外でこんな板見てんだか・・・

652:デフォルトの名無しさん
08/06/03 02:16:25
初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
ListViewのdetail表示時に行間を広くするにはどうしたらいいのでしょうか?

653:デフォルトの名無しさん
08/06/03 02:42:12
ListViewItemのStyleあたりで設定できなかったっけ?
出来なかったらごめん。

654:デフォルトの名無しさん
08/06/03 09:19:23
ImageList使う

655:デフォルトの名無しさん
08/06/03 12:20:34
お前には無理だからさっさと諦めろ。

656:デフォルトの名無しさん
08/06/03 13:35:14
>>652
>初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。
馬鹿じゃないの?
まじめな話。


657:デフォルトの名無しさん
08/06/03 14:07:08
UserControlを継承したクラスを作って
クリックされた箇所に丸印を描画するようなプログラムを作るとしたとき。
Click()イベントで、クリックされた箇所を記憶し
Invalidate()でPaint()イベントを呼び出してクリックされた箇所を描画する。
という動きになるのでしょうか?


658:デフォルトの名無しさん
08/06/03 15:01:12
はい

659:デフォルトの名無しさん
08/06/03 15:19:56
フォームエディタで上にコントロールを乗せないなら、
UserControlじゃなくて、ただのControlからの継承でいい。

660:デフォルトの名無しさん
08/06/03 17:57:36
>>658
>>659
どうもありがとうです。

ところで、趣旨が変わるんですが
折れ線(複数)グラフを書きたいのです。
ひとつの表示窓に複数のラインを書きたいのです。
そのライン単位でオブジェクトにしたいのですが、
(1)そのラインオブジェクトはControlから派生させて自分でライノブジェクト自身で描画させるべきでしょうか。
(2)それとも単なる(Control派生ではなく)オブジェクト化して、親表示窓Controlに個別に描画ルーチンを呼ぶ形にするべきでしょうか?
一般的にどうなのかなと思いまして。

(1)だったら、表示窓側の親オブジェクトは特に何も考えずに子が思いのままに描画する。
と思っていたのですが、背景処理が手間かと思えてきました。
子に当たるラインオブジェクトを描画すると親部分を上書きするからです。
リージョンを切れば親の描画部分を塗りつぶさなくても描けそうですが、折れ線なのでPATHが複雑になりすぎるかと思います。

(2)だったら特に背景塗りつぶし過ぎに関しては何も考えなくてよいのですが、
Paintルーチンで子オブジェクトにGrapicsオブジェクトを渡すサブルーチンコール形式になると思うのですが、なんだか嫌なのです。
一般的にこういうことをやりたい場合にはどうしますか?
変なことを言っているようだったら指摘してください。

661:デフォルトの名無しさん
08/06/03 18:02:28
拡張性を考えれば当然後者だろ

662:デフォルトの名無しさん
08/06/03 19:57:03
WPFなら前者だね

663:デフォルトの名無しさん
08/06/03 20:56:09
Excel使え

664:デフォルトの名無しさん
08/06/03 21:37:46
どこかにチャートコントロールあったはず

665:デフォルトの名無しさん
08/06/03 21:39:16
ZedGraphとか

666:デフォルトの名無しさん
08/06/03 22:37:23
ZenGraphってスクロール機能つけられる?

667:デフォルトの名無しさん
08/06/03 22:45:33
便乗で質問なんですが
ZedGraphとかNplotを仕事(商用)として使ってる人いますか?


668:デフォルトの名無しさん
08/06/03 23:25:12
ListViewの編集はなんで先頭のカラムしかダメなの?
面倒だね。

669:デフォルトの名無しさん
08/06/04 00:59:59
WPFなら自由自在

670:デフォルトの名無しさん
08/06/04 01:18:50
いやそういう話じゃなくて。

671:660
08/06/04 10:13:48
皆さま。
ZenGraphとかNplotとかあるんですね。
これらを使うかどうかはともかく、これらの実装を参考にさせてもらいます。
どうもありがとう。


672:デフォルトの名無しさん
08/06/04 20:17:36
Personクラスの派生クラスとして
Man,Woman,Noneを考えます。
Man,Woman,NoneはPersonクラスのstaticなメソッドを介して生成されるものとします。
Man,Woman,Noneのコンストラクタのアクセシビリティをそれぞれ
public,protected,privateにしております。
publicなManは生成されます。
protectedなWoman,privateなNoneは生成できません。
こういうときはコンストラクタのアクセシビリティをinternalにすればいいようです。
こういうinternalの使い方は正しいでしょうか?


673:デフォルトの名無しさん
08/06/04 20:20:56
クラスライブラリを作ってるなら全然アリ
単一プロジェクトなら無意味

674:デフォルトの名無しさん
08/06/04 20:29:34
他のアセンブリに公開するつもりがないならinternalでいいんじゃね

675:デフォルトの名無しさん
08/06/04 20:49:20
Man,Woman,Noneクラスは外部に見せる必要がないならこういう手もある。
やりたいこととは違うと思うがクラス自体を見えなくすればコンストラクタの隠蔽は不要になる。
public enum PersonType { Man, Woman, None };

public class Person {
 public static Person GetInstance(PersonType x) {
  switch (x) {
   case PersonType.Man: return new Man();
   case PersonType.Woman: return new Woman();
   default: return new None();
  }
 }
 private class Man : Person { public Man() {} }
 private class Woman : Person { public Woman() {} }
 private class None : Person { public None() {} }
}

class Startup {
 static void Main() {
   Person man = Person.GetInstance(PersonType.Man);
   Person woman = Person.GetInstance(PersonType.Woman);
   Person none = Person.GetInstance(PersonType.None);
 }
}


676:デフォルトの名無しさん
08/06/04 20:53:36
C++から入ると、friendが無いのがちょっと不便に感じるね。

677:デフォルトの名無しさん
08/06/04 20:56:41
friendは邪悪だからなくていいよ。

678:デフォルトの名無しさん
08/06/04 21:22:41
partial使えば内部型でもファイルを分けて書けるよ

679:デフォルトの名無しさん
08/06/04 21:31:51
>>676
主にテスト用途だけどFriend Assemblyってのがある。
通常はprivateな型やメソッドをテストするのに使う。

680:デフォルトの名無しさん
08/06/04 21:57:45
>>675

コレって変だと思うのはオレだけ?



681:デフォルトの名無しさん
08/06/04 22:03:44
お前だけ
Comparer<T>.Defaultとか例を挙げたらキリがない

682:デフォルトの名無しさん
08/06/04 22:10:23
ああすまんComparer<T>.Defaultは違うね
Stream.Null(実際の型はStream+NullStream)とか

683:デフォルトの名無しさん
08/06/04 23:40:00
>>680
君だけではないよ。
Factoryってこうやらないだろ?



684:デフォルトの名無しさん
08/06/04 23:59:22
XmlReader.Createとかあるでしょ
一応MS的にはこういうのも「ファクトリメソッド」と呼ぶらしい

685:デフォルトの名無しさん
08/06/05 00:09:09
どこが変だとか、どうあるべきかとか書いてくれないと答えようがない

GetEnumerator()の実装例でyield returnを使わないケースで内部クラスを使っている
なおC#の内部クラスはJavaのstaticな内部クラスと同等だから誤解のないよう

686:デフォルトの名無しさん
08/06/05 01:55:39
というか基底クラスであるPersonクラスが具体的な派生クラスを知っているのが不自然。
気持ち悪い。

687:デフォルトの名無しさん
08/06/05 03:35:19
既定クラスがBuilderを兼ねてるのがいやだったらPersonとファクトリーを分離するのは問題ない。
ただ、拡張可能なようにBuilderやStrategyパターンで作ってゆくと、
クラスやインターフェイスの数がすごいことになるから過剰な汎用化には反対したい。

688:デフォルトの名無しさん
08/06/05 04:39:40
突然質問してごめんなさい。

皆さんはC#とかってどうやって勉強してるんですか?
こないだはじめたんだけど、資料が少なくて、学習がすすみません。
いい勉強法とかオススメの書籍があれば教えてください。

ちなみに今は実際にソフトウェア作ってみて、わからないことがあったら調べて・・・って感じです。

689:デフォルトの名無しさん
08/06/05 07:52:47
C#で資料が少ないとか言ってたら何も覚えられん。

690:デフォルトの名無しさん
08/06/05 08:05:32
MSDNに全て有る

691:デフォルトの名無しさん
08/06/05 08:47:31
>563-567 >690
の質問とかぶると思うのですが。
 オープンなC#ソースでストラテジーパターンを実現しているらしき所を見かけたので、
newのコストについて教えてください。

【ソース概要】
・クラスConcreteAとConcreteBは同じParentStategyクラスの派生。
・それぞれのクラスには違う条件でこの方法で状態遷移する。
void override update(){
  ・・・
  if(hoge<hage)
    {parentStategyInstance = new ConcreteA()}
  else
    {parentStategyInstance = new ConcreteB()}
  ・・・
}
・update()は頻繁に発生する。
・各コンストラクタはメンバを一つ更新する一行のみ。
・ガベコレでメモリ使用量のコストが無いことは解ったつもり。

 C++ならキャスト一択の所と思うのですが、JITのおかげでこの書き方が
実は最高にスマートって事になっちゃいないか知りたいんです。

※JITのおかげさまで、簡単にベンチテストが作れない事が問題なんです><
※オブラートに包んだ所にミソがありそうなら、どんどん公開します。 O!S!I! O!S!I!

692:デフォルトの名無しさん
08/06/05 09:07:15
Stategy自体選択ミスに1票

693:デフォルトの名無しさん
08/06/05 09:08:56
switch最強伝説を更新するんですか? ('A`) >692

694:デフォルトの名無しさん
08/06/05 09:14:22
C#自体の選択ミスに1票

695:デフォルトの名無しさん
08/06/05 09:19:38
C#のEnum型とswitchの相性の良さは無敵だぉ!! デザパタ厨涙目! プギャー(^0^)9

696:デフォルトの名無しさん
08/06/05 09:27:05
>695
私もそう言う事が聞きたかったので、ありがとうございました。

是非参考になるサイトをご紹介頂きたくお願い致します。 m(_ _)m

697:デフォルトの名無しさん
08/06/05 09:28:56
 ペイントを操作して、絵を描こうとしているのですが、
ドローイングエリアをうまくクリックしてくれません。
どなたか、どうすればいいのか教えていただけませんでしょうか?

[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public int left;
public int top;
public int right;
public int bottom;
}
const uint WM_LBUTTONDOWN = 0x201;
const uint WM_LBUTTONUP = 0x202;

public void RemotePaint() {
IntPtr hWnd;
string sClassName = "MSPaintApp";
string sWindowText = null;
sClassName = "AfxFrameOrView42u";
sWindowText = null;
hWnd = FindWindowEx(hWnd, IntPtr.Zero, sClassName, sWindowText);
SetForegroundWindow(hWnd);
RECT winRect = new RECT();
GetWindowRect(hWnd, ref winRect);
System.Threading.Thread.Sleep(1000);
PostMessage(hWnd, WM_LBUTTONDOWN, 100, 100);
System.Threading.Thread.Sleep(500);
PostMessage(hWnd, WM_LBUTTONUP, 100, 100);
}


698:デフォルトの名無しさん
08/06/05 10:39:13
>>566
サブクラスのコンストラクタが動く前に
オーバーライドされた仮想関数が呼び出されるわけで
ちょっと気持ち悪いですね。

699:デフォルトの名無しさん
08/06/05 10:41:09
>>691
あまりにも頻繁にUpdateが呼ばれるならやや効率は悪いだろうな。
でも多分誤差レベル。
大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

ただ、作りとしてはぱっとしないな。


700:デフォルトの名無しさん
08/06/05 11:18:52
>ぱっとしないな
ぶっちゃけそこなんです。

 上の話の終わり方だと、ConcreteAとConcreteBを継承した大きなクラスを作って
処理部分だけ、switchかdelgate型で置き換え可能にする。
・JITはswitchが強いってことは何処までか?
・一つの処理がどの程度長いとdelgate型が有利になるか?
でバッチテストが作れるなと思ってました。
  っていうか、そういうテストした人の本や社員のサイトがあっても良いなと。

これも「ぱっとしないな」と思ってくれたら、むしろ愉快なんですけどね。

あと
>大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

私の
>・ガベコレでメモリ使用量のコストが無いことは解ったつもり。
への返事でそんなに深い意味は無いですよね?

※最大メモリ使用量より速度優先
※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。

701:デフォルトの名無しさん
08/06/05 11:22:09
delegateの"e"が抜けてる。

702:デフォルトの名無しさん
08/06/05 11:25:28
デリゲートなんかは下手に保持しとくより毎回newした方が速いらしいね

703:デフォルトの名無しさん
08/06/05 11:32:07
thx
delegateは捨てましょう。

…C的には、関数ポインタよりnewが早i(ry

JITのnewまわりの最適化を見られれば、それでも疑問は解決できます。

704:702
08/06/05 11:36:07
>>703
意味わかってる?
デリゲートが遅いって言ってるんじゃなくて,デリゲート型のオブジェクトをnewするときの話だよ

705:デフォルトの名無しさん
08/06/05 11:45:56
>704
ミスリードです>< すいません。

 最初に戻ると、元parentStategyInstanceを持ってるクラスを作った時に、
デリゲート型のオブジェクトをnewできます。

あとは
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

あと、
>※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。
これ、 ConcreteA、ConcreteBでずらずら並んで、20個ぐらいあったら一気に話が不毛になるな。('A`)



706:デフォルトの名無しさん
08/06/05 11:51:10
だから、逆なんだ。
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

よりも >702は
  if(hoge<hage)
    {exceDelege = new exceDelegater(ConcreteAexce)}
  else
    {exceDelege = new exceDelegater(ConcreteAexce)}

707:デフォルトの名無しさん
08/06/05 12:05:13
newの最適化っつっても、確保に関しては基本的にマネージヒープの
未割り当て領域へのポインタをオブジェクトサイズ分進めるだけだぞ。
もちろん頻繁にnewすればGC起動の機会を与えることになるから、
パフォーマンスを気にするならインスタンスのキャッシュは基本ではあるが。

708:691
08/06/05 12:34:44
 話を長引かせる様な書き方をしてしまってすいません。
>696 >700-701 >703 >705-706
まで私ですね。

>ConcreteA、ConcreteBでずらずら並んで、20個ぐらい
は失言でしたが、>707にはそこまで考慮して貰ってありがとうございます。
「インスタンスのキャッシュは基本」
これを確認出来て良かったです。

ソースの出所が良い所ぽかったので、>704みたいな事は無いか色々勘ぐったんです。

<ちら裏>
switchしかりnewも、CLRやJITの最適化って非線形で決めてナシなんだな。
皆さん好きですか?
私は、規模が変わるたびにバッチテスト・ベンチマークテストする事になりそうで('A`)

709:デフォルトの名無しさん
08/06/05 12:51:30
大抵現実に影響があるようなパフォーマンス問題は
そんな細かい話ではない。


710:デフォルトの名無しさん
08/06/05 12:53:58
デリゲートがキャッシュするよりnewってのは初めて聞いたな。
どこででた話?
それかひょっとして非常に使用頻度の低いデリゲートの話?


711:デフォルトの名無しさん
08/06/05 12:56:14
>709 けどそれって、C#の開発経験があるって言えるんですか?
毎日好きな言語で遊んで、顧客が限定してきた時だけC#って奴と差がないじゃん。

712:デフォルトの名無しさん
08/06/05 13:03:29
visual studioでメッドを全部折りたたむ技ってないですか?

713:デフォルトの名無しさん
08/06/05 13:05:09
>>711??
何のことを言ってるんだ?


714:デフォルトの名無しさん
08/06/05 13:06:11
こういう事を
>そんな細かい話
って言い捨てること。

715:デフォルトの名無しさん
08/06/05 13:18:25
>>714
プロならコストと効率を考えて、大して効果の上がらない箇所の最適化に
拘って労力を注ぐくらいなら、もっと他にすることがあるだろうと思うがな
そういうところをいじくり倒せるのはむしろ趣味で遊んでる奴のほうじゃね

716:デフォルトの名無しさん
08/06/05 13:25:04
>715
>プロならコストと効率
そりゃどの言語でもそうだよ。
話をループさせてることに気付いてる? 会話下手?

俺は優しいから"C#でのコストと効率"の経験って解釈してあげるよ。

717:デフォルトの名無しさん
08/06/05 13:28:38
>>716
煽る以外に言い返す言葉が見つからないならレスするなよ

718:デフォルトの名無しさん
08/06/05 13:33:19
>715のプロとしてのコストと効率の経験と、趣味で遊んでる奴との混同具合が心配です。

719:デフォルトの名無しさん
08/06/05 13:46:50
usingを使ってStreamReaderを読んでますが、
whileで最後まで読んで、もう一度whileで読みたいのですが、
どうすればいいんでしょうか。

720:デフォルトの名無しさん
08/06/05 13:52:18
>>719
こういうこと?
streamReader.BaseStream.Seek(0, SeekOrigin.Begin);


721:デフォルトの名無しさん
08/06/05 13:54:51
>>712
アウトラインのことなら、編集 - アウトラインで

722:719
08/06/05 14:00:03
>>720
おお!!出来ました!助かりました!
ありがとうございます!


723:デフォルトの名無しさん
08/06/05 14:16:28
優先度の問題。
そんな細かい話を気にする必要があることだってあるが、
現実には引っかかるのはもっと別のところであることがほとんど。
もっと気をつけるべきとこは他にいっぱいある。
ってだけの話、無意味とは言わん。


724:デフォルトの名無しさん
08/06/05 14:19:08
だろうね。 大概解ってるだろ。
俺、>709って初見じゃないもん。 定期的に湧く厨だと思った。

725:デフォルトの名無しさん
08/06/05 14:19:37
条件分岐の効率なんて、文字列処理一発でも挟まれば全く無意味。
だから処理効率より設計の方を重視する方がいい、ほとんどの場合は。


726:デフォルトの名無しさん
08/06/05 14:24:24
>>724
誰かさんはこの程度でベンチテスト毎回やるんだと言ってるから相当優先度が高いんだろ
解ってるとは思えん

727:デフォルトの名無しさん
08/06/05 14:29:50
次のようにXMLファイルを読み込もうとしてるのですが、
どうやら読み込みに失敗している環境があるらしいのです。
if (File.Exists(Directory.GetCurrentDirectory() + "\\" + "data.xml") == true)
{
 Type[] et = new Type[] { typeof(Data) };
 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), et);
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
そこでまず、本当にXMLファイルの読み込みに失敗しているのかメッセージボックスでチェックしたいのですが、
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch
{
MessageBox("読み込み失敗");
}
こんな風に書いちゃってもいいのでしょうか?

728:デフォルトの名無しさん
08/06/05 14:32:37
その時も文字列処理を引き合いに出してたな。
だいたい、その辺りにC#の用途の向き不向きボーダーラインがあるんかな。
More Effective C++みたいなイメージでは不毛と。

729:デフォルトの名無しさん
08/06/05 15:00:24
>>727
肝心の例外情報握り潰したら話にならんだろ
つか今時CurrentDirectoryかよ

730:デフォルトの名無しさん
08/06/05 15:02:22
>729は catch の後ろに何もない事を言っている様だ。
try .. catchのヘルプに戻ろう。

731:デフォルトの名無しさん
08/06/05 15:35:17
CurrentDirectoryの何が悪いのかわからん。
まさかレジストリやマイドキュメントに保存するのか?W

732:デフォルトの名無しさん
08/06/05 15:39:09
カレントにするやつは無知か手抜きだろ

733:デフォルトの名無しさん
08/06/05 15:46:27
exeのフォルダならともかく、
カレントは起動方法によって変わるから問題だろ
元々そういう仕様なら関係ないけど

734:デフォルトの名無しさん
08/06/05 15:46:32
カレントディレクトリがショートカットとかで変更されたらどうするんだ?

735:デフォルトの名無しさん
08/06/05 15:49:56
俺の負けだ。 言わせてくれ。
そこは

   throw; //スルー

だろ。
俺は敗者だ。 だけどなんかスッキリした。

質問者おいてこぼりだが、確かに>728の模範解答は期待。

736:727
08/06/05 15:54:41
聞きたいのはCurrentDirectoryのところではなく、
usingステートメントをtryで囲んでもいいのかな?と思ったのです。

読み込み失敗時の例外情報はヘルプでFileStreamを調べたのですが例外の種類がわかりませんでした。
例外の種類はどうやって調べたらいいんでしょうか?

737:デフォルトの名無しさん
08/06/05 16:00:52
起きえる例外がわからなければSystem.Exceptionで受ければいいだろ。
起きる例外はMSDNに載ってると思うけど。

738:デフォルトの名無しさん
08/06/05 16:13:54
MSDNでFileStream コンストラクタ (String, FileMode)を引いたら例外の種類が書かれていました。
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch(System.Exception e)
{
 MessageBox(e.ToString());
}
としましたが、usingをtryで囲ってもいいのかが知りたいです。


739:デフォルトの名無しさん
08/06/05 16:15:36
どうして駄目だと思った?

740:727
08/06/05 16:31:25
>>739
usingステートメントって例外が起きた時にステートメント内のdisposeを保証してくれるんですよね。
なのでtry句が複雑にネストしてしまう気がしたからです。
例外が自分の環境でも再現出来ればいいのですが、
他人の環境なので再現できないので、メッセージボックスを仕組んで原因を調べようかなと思いました。

741:デフォルトの名無しさん
08/06/05 16:43:55
try句が複雑にネストしてしまう、の意味が分からない。

742:デフォルトの名無しさん
08/06/05 16:45:18
usingをtry-finallyに展開してみる。
try { 
 readonly System.IO.FileStream fs = new System.IO.FileStream("data.xml", System.IO.FileMode.Open);
 try { DataList = (ArrayList)serializer.Deserialize(fs); }
 finally { fs.Dispose(); }
} catch(System.Exception e) { 
 MessageBox(e.ToString()); 
} 
usingではcatchしてないからDeserializeで例外が起きた場合は外側のtry-catchブロックが補足する。
問題になるとすればcatchの段階でまだ開いている状態のfsにアクセスしたい場合。
Deserializeとfs.Dispose()の両方で例外が起きた場合。
こういったことが気になるなら、usingを使わずtry-catch-finally構造に変える。

743:デフォルトの名無しさん
08/06/05 16:50:38
蒸し返してすまんが、CurrentDirectoryでひとこと。
コンソールアプリならカレントディレクトリは普通に使う。
GUIの場合は意味がない。
exeのあるディレクトリがカレントディレクトリであると考えているなら明らかに間違い。

Directory.GetCurrentDirectory() + "\\" + "data.xml", 
この部分は余計。相対パスならカレントからの相対パスになるので
"data.xml"
だけでで十分。

744:727
08/06/05 17:04:26
>>742
分かりやすい説明ありがとうございました。

>>743
参考になりました。ありがとうございます。

745:デフォルトの名無しさん
08/06/05 17:21:07
>>742
>Deserializeとfs.Dispose()の両方で例外が起きた場合。
キャッチされるのは後からの例外の方だったよね?

746:デフォルトの名無しさん
08/06/05 20:00:17
質問させていただきます。
フォーム上に画像を表示するプログラムを書きたいのですが、
イベントとして、フォームが表示されたと同時に描画したいのです。
このような場合、イベントはどのように記述すればよいのでしょうか。
もしくは、イベントを使わない方法があればそちらもご教授ください。

747:デフォルトの名無しさん
08/06/05 21:01:16
GUIのプログラムの中で
GUIとは何の関係もないオブジェクトAが居ますが
デバッグ用途でGUIのとあるメッセージウィンドウに文字列を出力させたいとします。
オブジェクトAのようなGUIに無関係なオブジェクトが大量に居るような場面で
それらの出力文字列をGUIのとあるメッセージウィンドウに文字列を出力させたいわけですが。
どうやってそのオブジェクト達とメッセージウィンドウ間をインターフェイスさせればよいでしょうか?
Qtをちょこっと触ったことがあるのですが、その場合はsignal/slot機構を使って、わりと簡単に実現できたのですが
C#の場合はsignal/slotの代わりにeventを使うことになるかと思います。
eventの型となるdelegateをどこで宣言するかなぁ~と考えるのですが、
どこにも宣言したくありません。
どうすればいいですか?


748:デフォルトの名無しさん
08/06/05 21:50:02
メッセージ表示するもしくは通知するTraceListenerでも作ればいいんでない?


749:デフォルトの名無しさん
08/06/05 22:16:43
>>735ってどういう意味?

750:デフォルトの名無しさん
08/06/05 23:15:02
>>743
逆に言えば、カレントディレクトリがexeのあるディレクトリであることを
プログラム側で保障すれば問題ないということでもある

まあ、その場合でも相対パス使うだろうから、
Directory.GetCurrentDirectory()は不要だけどな

751:デフォルトの名無しさん
08/06/05 23:18:57
>>750
Open/Saveダイアログを使うとカレントディレクトリが動いたりしなかったっけ。
以前はまった記憶がある。

752:デフォルトの名無しさん
08/06/05 23:37:16
ていうか、おまいらデリゲート使うときに毎回宣言してるの?
自分はDelegate<Result,Param1>とか宣言しといて全部それつかってる。
おかげでFuncとどう整合性とろうか思案中だがなぁorz

753:デフォルトの名無しさん
08/06/05 23:42:08
イベントハンドラはEventHandler<TEventArgs>使え

754:デフォルトの名無しさん
08/06/05 23:59:49
outやrefに対応できないんだよな…


755:デフォルトの名無しさん
08/06/06 00:05:31
class Reference<T> { public T Value { get; set; } }
こんなの作っとけば

756:750
08/06/06 00:07:58
>>751
確かに、FileDialog使うときは

RestoreDirectory = true

にしないとまずいな
てか、既定値がfalseとかありえん

757:デフォルトの名無しさん
08/06/06 00:48:22
>>755
世の中そうもいかんこともあるのよ。
リモーティングとか。


758:デフォルトの名無しさん
08/06/06 01:29:58
>>752
まさにこういう使い方をするために、宣言時に識別子を省略出来たらいいのに。

759:デフォルトの名無しさん
08/06/06 04:03:17
>>754
それは知恵が足りないだけ。
できるよ。

760:デフォルトの名無しさん
08/06/06 07:08:25
マルチプルアイコンを含むIconインスタンスから、各アイコンを取得したいのですが、
どうすればよいのでしょうか。

761:760
08/06/06 07:46:58
自己解決しました。
Icon.Save()でバイナリデータを得て、それを分割した上でIconコンストラクタに与えればいいですね。
もっとスマートな方法がありそうな気もしますが、とりあえずそれでいきます。

762:デフォルトの名無しさん
08/06/06 09:30:47
コンストラクタでSize指定だけはできる

763:747
08/06/06 12:09:04
>>753
>>イベントハンドラはEventHandler<TEventArgs>使え

どうもです。
こういうのがあるんですね。
ただこれだとEventArgsカスタムクラスをどこかで定義しなければならないです。
EventArgsカスタムクラスに依存するのがなんだかシャクなんで。

たとえば
talkerインターフェイスを用意するとして

interface ITalkter{
        public delegate void printf(string fmt,prams object[] args);
}

こういうことができたら、
ITalkerを継承したクラスを作ってしまえばそれでOKなんですけど
ITalkerインターフェイスに依存するのは納得できるんで。
ただ、interfaceでは型宣言出来ないらしく。。。
なんで出来ないんだろう。。。。
ちなみにtalkerは大量に居ます。
listenerは1個だけっていう想定。

何かいい方法はありませんか。


764:747
08/06/06 12:19:13
もしくは
public event void delegate(object sender,params object[] arg) printf;
のような感じで
名無しの型を宣言すると同時に変数定義みたいなことができたらそれだけでいいですね。
こういうことって可能なんでしょうか?


765:デフォルトの名無しさん
08/06/06 12:25:10
interface ITalkter{
 string PrintString{ get; }
}

こうとか

interface ITalkter{
 void Print(Action<string> print);
}

こうとか

interface ITalker{
void Print(IListener listener);
}

こうとかじゃだめなの?

766:デフォルトの名無しさん
08/06/06 12:46:17
DebugListener/TraceListenerで十分だと思うけど。

767:デフォルトの名無しさん
08/06/06 13:27:34
>>763
talkerの役割がよくわからないな。
実際に表示する部分なのか、それともメッセージを発行する元なのか?
それからdelegateをeventと1対1で作らなければいけないとか思ってないか?

768:デフォルトの名無しさん
08/06/06 14:49:41
>>761
P/InvokeでExtractIconExとか。

769:デフォルトの名無しさん
08/06/06 17:41:02
EventHandler<TEventArgs>を使いたくないのだったら、普通にAction<T>でも使うってのは?
オブジェクトAの中に
public event Action<string, object> printf;
を実装する。

これならカスタムクラス使わんで済むでしょ。

770:デフォルトの名無しさん
08/06/06 23:54:33
>>747>>764
デリゲートを使うにはデリゲート型が事前に作成されている必要がある
また、匿名メソッドやラムダ式を使った場合でも、型が自動的に作成されることはない

なので、君がやりたいと考えていること(デリゲートを使用して云々)は恐らく不可能

まあ、本来の目的からすると、出力タイミングをGUI側で制御するなら>>765
オブジェクト側で制御するなら

interface ITalker {
  void SetPrintCallback(Action<string> print);
}

もしくは

interface ITalker {
  void SetListener(IListener listener);
}


>>769
void (object sender, T e) where T : EventArgs

に合致しないデリゲートをイベントにするのはやめれ
# MSのガイドラインなんて知らん、というなら止めはしないが

さらに言うと、
・デリゲート型の名前のサフィックスは EventHandler
・第2パラメータの型(上記 T)の名前のサフィックスは EventArgs
・2つのパラメータ名は上記の通り(sender, e)

771:デフォルトの名無しさん
08/06/07 00:33:51
正直msのガイドラインなんか知ったこっちゃ無い


772:デフォルトの名無しさん
08/06/07 00:55:01
なら使うな

773:デフォルトの名無しさん
08/06/07 06:58:46
ここはCompact Frameworkの質問はおk?

774:デフォルトの名無しさん
08/06/07 07:01:03
だから使わないんだって

775:デフォルトの名無しさん
08/06/07 07:01:24
C#にからめればOK

776:デフォルトの名無しさん
08/06/07 07:03:46
Compact FrameworkでWindows Mobile用2chブラウザを作ってるんだが、
スレ一覧にListViewを使ってるんだ。
ListViewItemCollectionにAddRangeが無くてforeachでスレデータ回してアイテム作ってAddさせてるんだが
どうにも低速なんだ。
AddRangeの代わりになるものは回してAdd以外ないだろうか。

777:デフォルトの名無しさん
08/06/07 07:19:17
BeginUpdateやってる?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch