C#, C♯, C#相談室 Part45at TECH
C#, C♯, C#相談室 Part45 - 暇つぶし2ch1:デフォルトの名無しさん
08/01/21 19:35:37
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part44
スレリンク(tech板)

その他テンプレ>>2-5くらい

2:デフォルトの名無しさん
08/01/21 19:36:31
Visual C# 2005 Express Edition 日本語版
URLリンク(www.microsoft.com)

ふらっとC#,C♯,C#(初心者用) Part23
スレリンク(tech板)

MSDNライブラリ
URLリンク(msdn.microsoft.com)

MSDN2
URLリンク(msdn2.microsoft.com)

pinvoke.net: the interop wiki!
URLリンク(pinvoke.net)



3:デフォルトの名無しさん
08/01/21 19:37:09
Visual C# Express Edition (無料)ダウンロード
URLリンク(www.microsoft.com)

.NET Framework SDK (2.0)
URLリンク(msdn2.microsoft.com)

MSDN Visual C# Express Edition フォーラム
URLリンク(forums.microsoft.com)
Visual Studio ユーザーグループ
URLリンク(vsug.jp)

@IT Insider.NET
URLリンク(www.atmarkit.co.jp)
Insider.NET 会議室 ディレクトリ
URLリンク(www.atmarkit.co.jp)

宇宙仮面の C# プログラミング / C# Programming
URLリンク(ukamen.hp.infoseek.co.jp)
WisdomSoft C#入門
URLリンク(wisdom.sakura.ne.jp)
WisdomSoft Microsoft .NET入門
URLリンク(black.sakura.ne.jp)
どっとねっとふぁん
URLリンク(dotnetfan.org)
緑のバイク 初めてのC# ~ 覚え書き ~
URLリンク(homepage3.nifty.com)
どぼん!の .NET Tips
URLリンク(dobon.net)

4:デフォルトの名無しさん
08/01/21 20:05:26


5:デフォルトの名無しさん
08/01/21 22:01:53
>>1乙。

誰もスレ立てないまま前スレあっさり終わったなw

6:デフォルトの名無しさん
08/01/21 22:08:05
C#スレはむしろその方が多いような

7:デフォルトの名無しさん
08/01/21 22:16:13
>>1乙~

8:デフォルトの名無しさん
08/01/21 22:39:04
.Net 2.0、C# 2005 で Windowsコントロールライブラリを作って
IEに貼り付けて、Windowsコントロールライブラリが通知したイベントを
javascriptで検知する方法を紹介しているサイトをご存じないですか?


9:デフォルトの名無しさん
08/01/21 22:47:29
window.external とか InvokeScript とかで検索すれば出てくるかもね

10:デフォルトの名無しさん
08/01/22 01:48:30
>>2
次は2008に書き換えようぜ、同志。

11:デフォルトの名無しさん
08/01/22 11:46:21
System.IO.Packaging.ZipPackage って、 OPC専用?

既存の zip の中身が読めないし、
zipファイルを作成すれば、勝手に変なファイル([Content_Types].xml)が作られるし。

#ziplib の代わりになるかと思って期待したのに。

12:デフォルトの名無しさん
08/01/22 12:59:00
専用。
インターナルなZipArchiveかなんかだっけ?公開してくれたらいいのに

13:デフォルトの名無しさん
08/01/22 23:59:56
やっぱりそうか。
DotNetZipを調べてみるよ。

14:デフォルトの名無しさん
08/01/23 01:56:44
J#のライブラリでzipできるじゃなかったっけ

15:デフォルトの名無しさん
08/01/23 01:57:22
jslib

16:デフォルトの名無しさん
08/01/23 09:19:47
J#(笑)

17:デフォルトの名無しさん
08/01/24 12:16:42

class A
{
private string var="test";

public string func(string name)
{
return xxxx(name);// name="var"のときreturn varになる
}
}

こんなことしてくれる上記xxxxに相当するようなものはないでしょうか?

18:デフォルトの名無しさん
08/01/24 12:41:38
なんでstring引数にしないと駄目なの?

19:デフォルトの名無しさん
08/01/24 12:45:42
private Dictionary<string, string> values={{"var","test"}};

public string func(string name)
{
return values[name];// name="var"のときreturn varになる
}
変数名にvarを使うのはやめとけ

20:19
08/01/24 12:50:07
無理にC#3.0使おうとして間違えた正しくはこう
Dictionary<string, string> values = new Dictionary<string,string>{{"var","test"}};
C#2.0ならコンストラクタとかで
values.Add("var", "test");

21:デフォルトの名無しさん
08/01/24 13:05:48
varはまずかったですね

できました


class A
{
private string str="test";

public string func(string name)
{
Type ty = typeof(A);
FieldInfo fi = ty.GetField(name);
return (string)fi.GetValue(this);
}
}


A B = new A();
 Console.WriteLine(B.func("str"));

とすると

test

が表示されます

22:デフォルトの名無しさん
08/01/24 13:14:28
他のクラスのメンバにそうやってアクセスするならわかるけど
自分のクラスのフィールドでそれをやる意味がわからない

23:デフォルトの名無しさん
08/01/24 15:13:38
もう、「変数に変数の名前でアクセスする方法教えてください><」は禁止しない?
教えたって本人にとっていいことないし

24:デフォルトの名無しさん
08/01/24 15:38:55
またスクリプト脳か。

25:デフォルトの名無しさん
08/01/24 15:57:04
どれがスクリプト脳?22?23?24?

26:デフォルトの名無しさん
08/01/24 16:00:00
25

27:デフォルトの名無しさん
08/01/24 16:02:52
FAQということでまとめておいて
FAQ見れ、と答えることにするとか

28:デフォルトの名無しさん
08/01/24 16:23:00
・コントロールをコントロールの名前で
・クラス名の文字列からインスタンスを
・ジェネリックで計算
・GC

29:デフォルトの名無しさん
08/01/25 10:46:16
Convert.ToDateTime があるのに Convert.ToTimeSpan がないのが気に食わない

30:デフォルトの名無しさん
08/01/25 11:22:06
TimeSpan と言えば IFormattable じゃないのも納得できんな

31:デフォルトの名無しさん
08/01/25 11:32:21
またスクリプト脳か。

32:デフォルトの名無しさん
08/01/25 12:36:44
IEの「名前を付けて保存」にある
ファイル種類「Web アーカイブ、単一のファイル(*.mht)」を
C#上から実施する方法ってないですか?

33:デフォルトの名無しさん
08/01/25 13:50:28
多少のエスパー能力を使って
CDO.Message 使えば?

34:デフォルトの名無しさん
08/01/25 20:35:18
>>32
mht保存はVB.NETだけど公開されてたはず
場所は忘れたけど

35:デフォルトの名無しさん
08/01/26 02:52:12
ありがとうございます。
調べてみます。

36:34
08/01/26 03:16:41
>>35
URLリンク(www.atmarkit.co.jp)
以前見たのはこれじゃないけどコレでどう?

37:デフォルトの名無しさん
08/01/26 10:30:19
真ん中あたりの、コメントアウトしてるところ、1から3までどれやっても期待する
結果が得られないのは、何でなんだぜ? 0,2,4,...,18 が出て欲しいんだが。

static void Exec()
{
Action<int, int> sumShower = (n, n0) => Console.WriteLine(n + n0);
Action<int> act = n => Bind(sumShower, n);

Action<int>[] acts = new Action<int>[10];

for (int i = 0; i < acts.Length; i++)
{
acts[i] =
//1: n => sumShower(i, n)
//2: n => Bind(sumShower, n)
//3: act
;
}

for (int i = 0; i < acts.Length; i++)
{
acts[i](i);
}

return;
}

static Action<int> Bind(Action<int, int> act, int val)
{
return i => act(tmp, i);
}


38:デフォルトの名無しさん
08/01/26 12:49:14
>>37
コメントの1はこれで動く。
for (int i = 0; i < acts.Length; i++) 
{ 
 int j = i;
 acts[j] = n => sumShower(j, n); 
} 


39:デフォルトの名無しさん
08/01/26 13:06:47
自分で書いておいてなんだが、つーか、shower ってなんだよw

40:デフォルトの名無しさん
08/01/26 13:09:56
>>38
やっぱそれしかないわけか。さんくす。
2, 3 は俺が何か根本的な勘違いしてるかもしれないので、わかる人指摘よろ。

41:デフォルトの名無しさん
08/01/26 13:15:26
何度もすまん。Bind() がこれじゃあコンパイル通らないな。
>>38 で指摘されてる方法を試してたのがそのままになってた。
正しくは、

static Action<int> Bind(Action<int, int> act, int val)
{
 return i => act(val, i);
}


42:デフォルトの名無しさん
08/01/26 14:49:30
>>40
actとBindが何をしたいのか説明しないとわからんよ。
なにやらループしてるように見える。

43:デフォルトの名無しさん
08/01/26 15:29:16
Action<int> act = n => Bind(sumShower, n);

Action<int> act = n => Bind(sumShower, n)(n);

44:デフォルトの名無しさん
08/01/26 18:32:34
>>42
やりたいのは、関数型言語で言うところのカリー化です。束縛(Bind)じゃないですね。
勘違いしていて、またおかしな名前をつけてしまいました。

>43
あー、なるほど。引数が一つ足りないんですね。やってみたら動きました。
ありがとうございました。

45:デフォルトの名無しさん
08/01/26 20:06:30
C#のジェネリックプログラミングを詳しく解説してある本あったら教えてください

46:デフォルトの名無しさん
08/01/26 20:08:12
プログラミングMicrosoft .NET Framework 第2版 (マイクロソフト公式解説書): ホーム: ジェフリー リッチャー,Jeffrey Richter,吉松 史彰

47:デフォルトの名無しさん
08/01/26 20:51:18
>>44
>関数型言語で言うところのカリー化です。

それは部分適用のことをカリー化と呼んでる気がする。

C++界隈ではbindって呼んでるし別にbindでもいいと思うけどね。

参考)
URLリンク(vader.g.hatena.ne.jp)


48:デフォルトの名無しさん
08/01/27 19:18:27
googleでC#の情報を効率よく検索するには
どうしたらよいでしょうか

検索時に ○○ VC# などと検索しても
#が検索対象にならんのですわ

49:デフォルトの名無しさん
08/01/27 19:21:31
VC#じゃなくてC#ならおk

50:デフォルトの名無しさん
08/01/27 19:22:50
>>48
c int
c# int
検索結果をくらべてみよう。
vc# は認識されないが、c#はgoogleが認識する。

それにしてもMSのネーミングセンスひどいよな。
".NET" のノイズが入らない検索方法があったら知りたい。

51:デフォルトの名無しさん
08/01/27 19:23:26
>>49
おおぅ
これはすばらしい。コロンブスの卵でした

52:デフォルトの名無しさん
08/01/27 19:55:08
アプリケーションの発行 って何に使うの?

53:デフォルトの名無しさん
08/01/27 19:59:32
前は +"C#" で検索してたけど、
最近は C# で絞れるんだな。

54:デフォルトの名無しさん
08/01/27 21:57:14
それ系の Web サイトや blog やってる人は、ことごとく csharp という
キーワードを入れておくってのを、みんなでやればいいかも。

55:デフォルトの名無しさん
08/01/27 21:58:27
>>50
COM とかもアレだな。

56:デフォルトの名無しさん
08/01/27 22:03:13
COMって時々聞くけど知っとくべきもん?
今のところまったく経験なし

57:デフォルトの名無しさん
08/01/27 22:07:28
DirectX を生で使うつもりがあるなら。

58:デフォルトの名無しさん
08/01/28 00:13:24
Officeやシェルなどに手を出す必要があれば。

59:デフォルトの名無しさん
08/01/28 00:34:36
ExcelもCOM

60:デフォルトの名無しさん
08/01/28 00:35:14
IE コンポーネントブラウザ作ったり

61:デフォルトの名無しさん
08/01/28 00:57:45
次期バージョンで遅延バインディングが入るらしいね

62:デフォルトの名無しさん
08/01/28 01:39:08
COM楽しいよ
シェルの深みに嵌まってる
半分溺れかけてるとも言えるけど(;´Д`)

63:デフォルトの名無しさん
08/01/28 01:55:50
>>61
マジで?

64:デフォルトの名無しさん
08/01/28 02:15:18
>>63
URLリンク(blogs.msdn.com)
unsafeみたいに,書く人に罪悪感を与えるような構文でいいねw

65:デフォルトの名無しさん
08/01/28 14:01:32
Formatで-を出すことはできるけど、+はだすことできないですかね?

66:デフォルトの名無しさん
08/01/28 14:22:23
ToString("+0;-0;0")
string.Format("{0:+0;-0;0}", x)

67:デフォルトの名無しさん
08/01/28 14:31:05
>>66
ありがとう!!

68:デフォルトの名無しさん
08/01/29 17:18:49
this.を普段書かない方に質問です。

staticなプロパティと非staticなプロパティとで、命名規則って変えてますか?
変えている場合は、どういう違いをつけていますか?

今は非staticな方に_を付けていますが、どうもしっくりこなくて・・・


69:デフォルトの名無しさん
08/01/29 17:24:41
しっくりも何も命名ガイドライン的にアウトじゃん。
たぶんメンバ変数のことだろうけど、それでいいんじゃね?
俺はthis付ける派だけど。

70:デフォルトの名無しさん
08/01/29 17:38:50
>たぶんメンバ変数のことだろうけど
違います

71:デフォルトの名無しさん
08/01/29 18:22:59
じゃアウトだよ

72:デフォルトの名無しさん
08/01/29 18:28:05
_つけてpublicだったりしてるの? >プロパティ

73:デフォルトの名無しさん
08/01/29 18:44:04
普通はstaticなプロパティなりフィールドなりって
staticであることが意味的に明らかな場合が多いから、タグで区別する必要性は感じないな。

というか、今までインスタンスメンバと混同するような状況になったことが
たぶん一度もないと思う。

結論。
それってそもそも設計が変なんじゃないの?

74:68
08/01/29 18:45:28
>>69
>しっくりも何も命名ガイドライン的にアウトじゃん。
どこのガイドラインですか?
(C/C++で禁止になっていること・MSではPascalにしてくれとなっていることは知っています)
仕様上禁止だというのであれば、ソースをお願い致します。

>>72
メソッド内で、staticか非staticか見た目で判別できないじゃないですか
そのプロパティが定義されているクラス内でのことなので、publicかどうかは関係ないです…

75:デフォルトの名無しさん
08/01/29 18:50:31
判断できなくて困るほどでかいクラスを書かない

76:デフォルトの名無しさん
08/01/29 18:51:37
仕様上なんて誰も言ってない
命名ガイドラインには沿っていないって話だろ。
「ガイドライン」の意味分かる?
URLリンク(msdn.microsoft.com)

77:デフォルトの名無しさん
08/01/29 18:53:22
>>76
アナタC++のソースでハンガリアン記法とかやっちゃう人ですね

78:デフォルトの名無しさん
08/01/29 18:54:15
>そのプロパティが定義されているクラス内でのことなので、publicかどうかは関係ないです…

多分基本的な語彙について、話が噛み合ってない気がする

79:デフォルトの名無しさん
08/01/29 18:57:01
>>77
(゚д゚)ハァ?

80:68
08/01/29 19:31:00
>>75
自作クラスばかりで構成されたアプリでは問題になっていないのですが、
既存のライブラリorフレームワーク上のクラスを継承した時に問題になるんです。

>>76
階層をもう少しのぼってよく読んでみたらいいと思います

81:68
08/01/29 19:40:19
いっぱい釣れたので、今日のところは帰ります。

82:デフォルトの名無しさん
08/01/29 19:40:20
>>80
具体例をあげてみたら?

83:デフォルトの名無しさん
08/01/29 19:48:28
メインのFormのメソッド呼びたいとき、

・static void Mainが書かれてるクラスにFormのインスタンスを取得するメソッドを書く
・シングルトンにする

どっちが一般的なの?

Dispose Finalizeパターンとシングルトンって相性悪そうだけど、
Program.GetForm()とか書くのも気持ち悪い・・・

あ、複数ウインドウ出さないアプリの前提で回答よろ

84:デフォルトの名無しさん
08/01/29 20:03:33
program.csってあんまりいじらないんじゃね?
その前提なら
1)Form.ActiveForm
2)Application.OpenForms[0]
3)
static Form1 frm1;
public Form1()
{
 Form1.frm1 = this;
}
public static Form1 MainForm
{
 get{return frm1;}
}


85:デフォルトの名無しさん
08/01/29 20:07:54
>>84 thanks
シングルトンにはしないほうが良いという結論でいいかな?
Form以外(XNAのGameクラスとか)でも使えるのは3かな

86:デフォルトの名無しさん
08/01/29 21:55:01
どのみちFormには依存するだろ

87:86
08/01/29 21:57:37
>>85
書き込んでから理解した
忘れてくれ

88:デフォルトの名無しさん
08/01/30 13:17:39
いいものみつけた
URLリンク(download.microsoft.com)
winsiggen.exe便利……かな?

89:デフォルトの名無しさん
08/01/30 13:23:23
こわくてクリックできない

90:デフォルトの名無しさん
08/01/30 13:24:36
記事は
URLリンク(msdn.microsoft.com)

日本語版記事にはダウンロードリンクがないんで
末尾のja削ってenにすると出てくるが

91:デフォルトの名無しさん
08/01/30 15:27:24
Marshal.AllocHGlobal()やMarshal.ReAllocHGlobal()の引数でサイズを指定するところはなんでIntPtrなんだろうか?
AllocHGlobal()にはintで指定するのもあるけどReAllocHGlobal()はIntPtrだけだし
intかlongが自然に思うんだけれど

92:デフォルトの名無しさん
08/01/30 15:41:33
size_t は int/long じゃないぜ

93:デフォルトの名無しさん
08/01/30 16:34:33
それが何か?

94:デフォルトの名無しさん
08/01/30 17:05:03
あほの俺が推測すると、64bit環境で2GB以上確保するため

95:デフォルトの名無しさん
08/01/30 17:47:10
>>91
メモリを確保するんだから、native intである必要があるだろ。

96:デフォルトの名無しさん
08/01/30 18:01:20
ありませんよ

97:デフォルトの名無しさん
08/01/30 18:06:24
CLIのnative int型をC#で表現してるからIntPtrになってるだけでしょ。
int32, int64, native int の中で一番自然なのはnative intだと思う。

98:デフォルトの名無しさん
08/01/30 23:03:10
>>88
これすげえ
Cのヘッダから自動生成してくれる

99:デフォルトの名無しさん
08/01/31 02:09:45
>>97
うん でもさ、IntPtrのままじゃ演算できなくて結局intからキャストしてたり
SizeOfの返り値がintだったりと他の部分との整合性が取れてない点を不自然に思ってる
インターフェースがint/longでもいいし、もしくはIntPtrでもいいけどそれで演算できてたらよかったと思ってる

100:デフォルトの名無しさん
08/01/31 09:14:53
LinqのIQueryableのProvider実装してる人いる?
ブログとかでやってる人の見たけれどなんかめんどくさそう・・・

101:デフォルトの名無しさん
08/01/31 20:25:20
C#でどこまでが言語仕様でどこからがライブラリか
という区別がよくわかりません.たとえば foreach
は予約語ですが,IEnumerable とか IEnumerator は
単なる識別子です.yield のように reserved word
ではないけど contextual keyword だというような
ものもあり,そのあたりのあいまいさが使っていて
美しくないというか・・・・

その辺をすっきりと理解して使いたいのですが,
どのような本を読めばいいのでしょうか?

102:デフォルトの名無しさん
08/01/31 20:45:02
標準クラスライブラリは言語仕様の一部

103:デフォルトの名無しさん
08/01/31 21:15:59
仕様が知りたいんなら仕様書読めばいいだろ

104:デフォルトの名無しさん
08/01/31 22:09:48
っていうか別に区別しなくていいじゃん

105:デフォルトの名無しさん
08/01/31 22:11:43
>>101
C#はCLSに基づく言語だから、C#の仕様自体がCLIの仕様を包摂している。
つまり、IEnumerableなしではC#は成立し得ない。

106:デフォルトの名無しさん
08/01/31 22:12:29
>>101
JISで仕様の日本語訳出てるから、それ読めばいいと思うよ。

107:デフォルトの名無しさん
08/01/31 22:17:13
foreachについては,必要なメソッド(GetEnumerator()とか)のシグネチャさえ合えばいいのであって
IEnumerableやIEnumeratorを実装している必要はないんだけどね

108:デフォルトの名無しさん
08/01/31 23:35:50
らしいな。

109:デフォルトの名無しさん
08/01/31 23:46:32
gnuのC#って今どのくらい使えるようになってるの?
なんかググっても全然出てこないんだけど

110:デフォルトの名無しさん
08/01/31 23:50:59
mono は gnu じゃない

111:デフォルトの名無しさん
08/02/01 00:03:43
mono以外に知らんの?

112:デフォルトの名無しさん
08/02/01 00:04:41
>>110
Portable.NETってのがあるんだよ

113:デフォルトの名無しさん
08/02/01 00:14:46
こんなものがあったのか・・・

114:デフォルトの名無しさん
08/02/01 00:16:00
monoと比べると随分と停滞してるがな。

115:デフォルトの名無しさん
08/02/01 01:00:40
IntPtrからbyte配列を取るとき、Marshal.Copyでコピーしますが、unsafeを使わずに
IntPtrから直接配列として操作することって出来ませんか?
結構Marshal.Copyでのロスが大きくて無視できないし、折角C#を使うんだから
出来ればポインタは使いたくないので…

116:デフォルトの名無しさん
08/02/01 01:01:51
無理です。

117:デフォルトの名無しさん
08/02/01 01:04:59
コピーしない方法ならあるよ

118:デフォルトの名無しさん
08/02/01 01:08:52
>>116
やっぱり無理ですか…
やっぱりポインタ使うしかないのか orz

>>117
Marshal.Read*とかでしょうか?
さすがにこれをループするのはコピーするより重そうですが…

119:デフォルトの名無しさん
08/02/01 01:18:21
byte配列の長さは一定?

120:デフォルトの名無しさん
08/02/01 01:26:46
>>119
Bitmapなので変わる可能性はあります。

121:デフォルトの名無しさん
08/02/01 01:28:03
>>120
すいません、抜けてました orz
複数のBitmapを扱うので、という意味です。

122:デフォルトの名無しさん
08/02/01 08:50:42
無理かな
byte[]とbyte*ってメモリレイアウトもたぶん違うから
byte[]→byte*なら可能ではあるんだが


123:デフォルトの名無しさん
08/02/01 12:42:17
インデクサ付けた構造体でラップすれば?
実装はunsafe使って

124:デフォルトの名無しさん
08/02/01 13:06:50
>>122
マネージ→アンマネージは出来てもアンマネージ→マネージが出来ないと言うことですかね?

>>123
ちょっとその方法試してみます。

125:762
08/02/01 14:02:36
struct ByteArrayPtr : IList<byte> {
private IntPtr ptr; private int length;
public unsafe byte this[int index] {
 get { return ((byte*)(void*)this.ptr)[index]; }
 set { ((byte*)(void*)this.ptr)[index] = value; }
}//あとは省略
こんな感じか
byte限定じゃなくてジェネリックにしたくなるけど(T*)がコンパイル通らないね

126:デフォルトの名無しさん
08/02/01 14:14:38
where T: struct

127:デフォルトの名無しさん
08/02/01 15:22:14
>>126
(・∀・)ニヤニヤ

128:デフォルトの名無しさん
08/02/02 15:00:12
C#でSpreadを使ってコーディングをしてるんですが、
バインディングソースからデータをバインドさせて、
文字列を表示しているセルがいくつかあり、
そのセルの文字列を組み合わせた文字列を表示したいセルがあるのですが、
どうも、表示されません。
設定としては、組み合わせた文字列を表示するセルのFormulaプロパティに
CONCATENATE(A1,B1)と入れているだけです。
他に何か設定が必要なのでしょうか?
よろしくお願いします。

129:デフォルトの名無しさん
08/02/02 15:12:30
>>125-126
structに制限しても無理
Tがマネージドな型を含む可能性があるから

130:デフォルトの名無しさん
08/02/02 18:43:10
>>107
どういうこと?
implementしなくてもOKってこと?

131:デフォルトの名無しさん
08/02/02 18:44:17
>>128
SQLでとってくれば?

132:デフォルトの名無しさん
08/02/02 19:04:55
>>130
class EnumerableObject : object {
public EnumerableObject GetEnumerator() { return this; }
public bool MoveNext() { return false; }
public object Current { get { return null; } }
}
このクラスのインスタンスに対してforeach使ってみるといいよ。
これはバグじゃなくてちゃんとした仕様。List<T>なんかはこれを利用して
IEnumerableを実装する構造体をその型のままで返してIEnumerableへのボクシングを避けてる。

133:132
08/02/02 19:08:43
間違い
IEnumerable→IEnumerator

134:デフォルトの名無しさん
08/02/03 13:37:23
前スレにてTableAdapterのことを質問したものですが
また質問させてください。

TableAdapterのdeleteやupdateでDBのTableを更新する時に
SQLSerServerで外部キーを設定して連鎖参照整合性制約を使うことって出来ますか?
例えば二つのTableのある列を外部キーで関連付けして
同じ文字列のある行をdeleteしたりupdateしたりすることが出来ますでしょうか。
どうも上手くいかないんです。

もう一つ。
TableAdapterの更新処理はASP.NET上でしか
動作してくれませんよね?
例えば、普通のWindowsアプリケーションのプロジェクトを作成して
そこにDataSet作ってTableAdapterを作成して
DBの更新処理をするってのは出来ないですよね?

135:デフォルトの名無しさん
08/02/03 14:39:35
ネイティブのexeからC#で作ったDLLを呼び出したいんだけど、
手っ取り早いやり方は具体的にどんな感じになるんでしょ?

開発環境はVisual Studio 2008 Express Editionです。

136:デフォルトの名無しさん
08/02/03 14:43:23
>>135

アセンブリをCOM参照可能にして呼ぶ。

137:135
08/02/03 14:46:38
>>136
thx!

138:デフォルトの名無しさん
08/02/03 22:14:42
C++で言うベクターってC#で言うと何?

139:デフォルトの名無しさん
08/02/03 22:17:16
List<T>

140:デフォルトの名無しさん
08/02/03 22:17:31
list

141:デフォルトの名無しさん
08/02/03 22:47:24
C++のVectorがC#のListだとすると
C++のListはC#だと何になる?

142:デフォルトの名無しさん
08/02/03 22:49:23
ごめん自己解決したw

可変長配列 vector<T> List<T>
双方向リスト list<T> LinkedList<T>

143:デフォルトの名無しさん
08/02/03 22:58:18
LinkedListってなんでIList実装してないのにListなんだろう
Javaに合わせたのかな

144:デフォルトの名無しさん
08/02/03 23:03:20
LinkedList は LinkedList です。

145:デフォルトの名無しさん
08/02/03 23:18:04
>>134
可能でしょ。
そもそも連鎖更新や削除はSQLServer側がする事で、.NETや言語は関係ない。
それ以上は「どうも上手くいかない」って説明では分からん。

もう一つ。
なんでASP.NETしか動作しないと思ってるのかわからん。

146:デフォルトの名無しさん
08/02/04 12:43:58
ストアドプロシージャに連鎖更新書いて呼ぶのじゃダメなのか

147:デフォルトの名無しさん
08/02/04 22:25:19
>>146
DB側に処理置くのはいやずら

148:975
08/02/05 00:56:23
>>145
すいません。わかりづらいですね。
[Table1]
ID Name Age
----------------
ID1 Yamada 20
ID2 Hanako 18
[Table2]
ID Height Weight
-------------------
ID1 170 65
ID2 160 50
手順としては上の二つのTable
がある時、

1.VisualStudioのデータベースエクスプローラーから
 「外部キーのリレーションシップ」ダイアログで
 Table1が親としてIDに対してリレーションを作成。
2.DeleteRule の設定、UpdateRule の設定を「重ねて表示」に設定。
3.Table1、Table2に関連付いたTableAdapterを作成して
 1、2と同じ設定でリレーションシップを作成。
4.Table1の一行目に対してDELETE処理実行。
5.Table1の一行目は削除されるがTable2は削除されない。
ということです。
ASP.NETに関しては勘違いしていました。

>146
トリガのことですよね?
上記の方法で出来なかった場合はその方法を考えています。


149:デフォルトの名無しさん
08/02/05 14:45:35
C#ってどんな業界で使われてるの?

150:デフォルトの名無しさん
08/02/05 15:11:20
>>149
業務用で多いのは ASP.NET かな。
企業のウェブポータルなんかでは割と使われてる。

個人レベルのフリーウェアは最近結構増えてきた気がする。

151:デフォルトの名無しさん
08/02/05 15:26:44
>>150
サンクス

152:デフォルトの名無しさん
08/02/05 22:36:40
個人レベルでちょっとなんか作るならC#でFAだな。
楽過ぎる。

でもグローバルフックに制限があったりとか
WPF使ったらactivexがラップしないと使えないとか
細かい問題が多くて開発時間に影響するんだよな・・・。
それでも早いけど。

153:デフォルトの名無しさん
08/02/05 22:38:25
>>149
人工知能

154:デフォルトの名無しさん
08/02/05 23:05:08
managedだけで済む処理しか使わないならすごく楽に作れるな

155:デフォルトの名無しさん
08/02/07 10:16:54
(COM登録が必要な)C#で作ったアセンブリをインストーラーで配布しようとしているのですが
その際プライマリ出力のRegisterプロパティをvsdrpCOMに設定しても
インストール中にComRegisterFunctionAttributeのRegister、Unregisterメソッドは呼ばれないのでしょうか?
(試した限りでは呼ばれませんでした)

何かプロパティを変える等で呼ばれるようにする方法はありますでしょうか?


156:デフォルトの名無しさん
08/02/07 15:41:01
SHFileOperation使えばいいんじゃね?

157:デフォルトの名無しさん
08/02/07 15:41:35
誤爆スマソ

158:デフォルトの名無しさん
08/02/08 23:16:29
C# 2008です

n < Int32.MinValue
(nは0~200くらい)
が実行された際

Debugでビルドしたときは何もなかったのに
Releaseでビルドしたらオーバーフローが出ました

n < Int16.MinValueにしたら平気でした。
n > Int32.MinValue では平気でした。

DebugとReleaseで演算方法が違うってことでしょうか?
そもそも比較演算でオーバーフロー出すようでは欠陥だと思うのですが
これじゃDebugでテストするのが怖い

159:デフォルトの名無しさん
08/02/08 23:29:43
nの型は何だよ。

160:デフォルトの名無しさん
08/02/08 23:34:11
また始まった

コードそのものをここに貼れよ。
それだけでオーバーフロー/フレームワークに欠陥なんて言われても。

161:デフォルトの名無しさん
08/02/08 23:38:06
>>158
処理系が欠陥だと言い切るような自信がどこから湧くのか理解できんが、
生成されてるILすら比較してみていないような感じだな。

162:デフォルトの名無しさん
08/02/08 23:47:51
まったくだ

163:デフォルトの名無しさん
08/02/08 23:50:27
ポカやってるのは>>158でFAなのはコード見なくてもわかるけど
とりあえずDebugとReleaseで
プロジェクトのプロパティ→ビルド→詳細設定→演算のオーバーフロー/アンダーフローのチェック
のチェックボックスの状態がちがうんじゃね?

164:デフォルトの名無しさん
08/02/09 00:14:46
Debugでは出ない例外がReleaseで出たのは経験あるな
よく覚えてないけどList<T>.Sortか何かで渡した自分のIComparer<T>の実装が間違ってたのが原因だった

165:デフォルトの名無しさん
08/02/09 09:47:27
長いコード貼るなら
URLリンク(pastebin.windy.cx)
URLリンク(pastebin.com)
こういうところだと色分けとかもできる

166:デフォルトの名無しさん
08/02/09 15:17:22
怠け者で探しきれてなくてすみません。
MonthCalenderで、指定日をハイライトするメソッドをご教授ください。

167:デフォルトの名無しさん
08/02/09 15:22:48
SetDateか。自己解決下っぽい。ありがとうございました。

168:デフォルトの名無しさん
08/02/09 15:25:49
しかも 初心者板と勘違いした。
重ね重ね申し訳ない。orz

169:デフォルトの名無しさん
08/02/11 12:34:42
ほ、ほーっ、ホアアーッ!! ホアーッ!!

170:デフォルトの名無しさん
08/02/11 23:15:54
vjs.dllだとファイル数多いと例外なげたりとバグってたりするんですけど
C#でお手軽にZIP作る方法ないですか?

171:デフォルトの名無しさん
08/02/12 02:36:47
SharpZipLibとか

172:デフォルトの名無しさん
08/02/12 02:39:18
シェルにやらせればいいんじゃね

173:デフォルトの名無しさん
08/02/12 03:35:13
zip.exe叩いた方が楽でね?

174:デフォルトの名無しさん
08/02/12 07:53:49
zipfldr.dll
…ってシェルと同じかも

175:デフォルトの名無しさん
08/02/12 08:45:53
Processでstartinfoに
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
指定して、zip.exe起動すれば、dos窓でないから
一番楽だと思うが。

176:デフォルトの名無しさん
08/02/12 13:38:56
統合アーカイバプロジェクトに登録されてるのはだめなの?
そのうちファイラ作ろうと思ってるんだけど。
URLリンク(www.madobe.net)

177:デフォルトの名無しさん
08/02/12 16:38:27
もしかして、.NET Framework 2.0からZIPを操作するクラスが入ったのを知らない人多い?

178:デフォルトの名無しさん
08/02/12 16:46:38
うん

179:デフォルトの名無しさん
08/02/12 16:49:52
GZipは扱えるがZipファイルは扱えねぇなあ。
まあヘッダ処理だけ書けば大体対応できるけどね。

180:デフォルトの名無しさん
08/02/12 16:49:59
それGZIPだし
ZIPじゃないし

181:デフォルトの名無しさん
08/02/12 16:59:17
読み取り専用のDictionaryはないの?

182:デフォルトの名無しさん
08/02/12 20:12:09
ListViewでItemを追加してEndUpDateすると、全部のItemが再描画
されてしまいます。そこでそのちらつきを出さない方法についてこちら
でおききしていました。>スレリンク(tech板:859番)

その中のソースがC#なのでC#スレでお訊きします。よろしくです。
CodeProject Flicker-free ListView in .NET and XP. Free source code and programming help
URLリンク(www.codeproject.com)
にあるサンプルを試してみたのですが、DEMO版がうまくいくのにソース版
ですよ対策なしと同じでした。

ListViewのDoubleBufferingはちらつき防止に効果あるでしょうか?
またowner draw にした場合は自分でItemを描画する必要があるのでしょうか。
よろしくお願いします。


183:182
08/02/12 20:18:38
>>182 訂正>ソース版ですよ対策なしと同じ -> ソース版ですと対策なしと同じ

該当のサイトでは
public void SetExStyles()
{
LVS_EX styles = (LVS_EX)SendMessage(this.Handle,
(int) LVM.LVM_GETEXTENDEDLISTVIEWSTYLE, 0,0);
styles |= LVS_EX.LVS_EX_DOUBLEBUFFER | LVS_EX.LVS_EX_BORDERSELECT;
SendMessage(this.Handle,
(int) LVM.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (int) styles);
}

のようなコードがありました。これはDoubleBufferを使っているようなのですが、
owner draw はしてないようでした。一方、このサイトへのコメントレスとして
ついていたものでは、owner draw にしておいて
 this.SetStyle(ControlStyles.OptimisedDoubleBuffer, True);
とするだけでちらつきはなくなるようなことが書かれていましたが、これは
自分で描画してやらないといけないようでその場合どのように描画すれば
よいのかわかりませんでした。自分で描画しないでも可能なような意味にも
取れてよくわからないのでした・・・

すみませんが、何卒よろしくお願いします。

184:デフォルトの名無しさん
08/02/13 00:08:14
すみません、よろしければ
スレリンク(tech板:182-183番)
について教えてください。何卒よろしくお願いします。


185:デフォルトの名無しさん
08/02/13 00:10:26
>>184 は スレリンク(tech板)
への出張の間違いでした。すみません。)

186:デフォルトの名無しさん
08/02/13 00:46:50
zipの質問したものです

みなさん、ありがとうございました

統合アーカイバプロジェクト(7-zip32.dll)
undll.exe
System.Process

でやってみることにしました
やってみると進行度合をウィンドウで表示してくれてちょっと鬱ですがとりあえず動いています
(zip32.dllは長い名前に対応してないとか?はっきりしなかったので)

187:デフォルトの名無しさん
08/02/13 01:10:36
>>176
統合アーカイバプロジェクトのzipは処理速度遅いよ

188:デフォルトの名無しさん
08/02/13 13:14:46
>>187
代替案しめさないと意味のないコメント

189:デフォルトの名無しさん
08/02/13 22:25:47
zipってオープンソースじゃなかったっけ

190:デフォルトの名無しさん
08/02/13 22:29:55
統合アーカイバプロジェクトなんつってる割には
インターフェースが統一されてなくて使いにくいんだよな

191:デフォルトの名無しさん
08/02/13 22:31:45
素人だからな。

192:デフォルトの名無しさん
08/02/13 22:58:33
C++/CLIでうまいことやってくれないもんかな

193:デフォルトの名無しさん
08/02/13 23:46:20
公開された.NET Frameworkのソースコード見てたらInt32なんかもC#で実装されてるけど
MSはなんか特殊なコンパイラ使ってるの?

194:デフォルトの名無しさん
08/02/14 00:30:56
VC#には、mscorlib.dllを参照させない/nostlibというオプションがある。
URLリンク(msdn2.microsoft.com)(VS.80).aspx

195:デフォルトの名無しさん
08/02/14 01:46:17
>>188
代替案って・・^^;
SharpZipLibに比べると3倍ぐらい遅いって、過去にそんな話出てたと思うが。

196:デフォルトの名無しさん
08/02/14 02:01:46
>>195
そんな話見たことねーよ
どんな妄想だよ
遅いというからにはしっかり計って代替案示せ糞野郎

197:デフォルトの名無しさん
08/02/14 02:03:55
統合アーカイバプロジェクトのzip 30秒
SharpZipLib 10秒

198:デフォルトの名無しさん
08/02/14 02:07:16
↑なにこれ 人馬鹿にしてるの?

199:デフォルトの名無しさん
08/02/14 10:09:38
そこまで自分で性能気にするなら自分で測ればいいだろカスが

200:デフォルトの名無しさん
08/02/14 10:17:30
代替案出せとか2chに何求めてるんだよw

201:デフォルトの名無しさん
08/02/14 12:26:43
なんか意味を取り違えてないか?

俺は196じゃないけど、196の言いたいことは「遅い」というのは
比較の対象があってこそ言えることで・・・
まあこれだけ補助線を引けば読解力ない君でもさすがにわかるだろ

202:デフォルトの名無しさん
08/02/14 12:40:13
自演乙

203:デフォルトの名無しさん
08/02/14 12:52:19
自演認定乙

204:デフォルトの名無しさん
08/02/14 13:06:24
図星か

205:デフォルトの名無しさん
08/02/14 13:11:21
(・∀・)クスクス

206:デフォルトの名無しさん
08/02/14 13:14:24
本当にこのスレにいるやつは、読解力ないのな
アホばっか

207:デフォルトの名無しさん
08/02/14 13:16:58
そうだね

208:デフォルトの名無しさん
08/02/14 19:21:11
 今日は凄いくだらない事にメチャクチャ腹が立ったので、
懺悔の心でココに書くよ。

 "C# bmp LockBits "でグーグル検索するとLockBits()メソッドの1つめの引数rectに

Rectangle rect = new Rectangle(0,0,bmp.Width,bmp.Height);

 を指定するブログやら、Tipsサイトが大量に出てくるよね。
初心者向けとか言って、ご丁寧に赤と緑を入れ替えた画像とか貼ったりしてさー。

 LockBits()はRectangle型のxとyしか見ない、あからさまなバグ入り関数なんだよね。
 あそこは new Rectangle(0,0,1,1)で十分。
っていうか、大きな画像の一部のIntPtrを取り出したいときは、また別途Bitmapインスタンスが必要なぐらい使えない関数ww。
そっちの方がTipsとして必要だろうがwww。

 10も20も「自称」プログラマのブログがあって、MSが作ったバグには一つも触れ無いんだよwwww。
おまえらは、MSの糞が食卓に並んでても気にならない本物のブタ共だよwww。
自分のブログで晒し上げにしようかと思っちゃったよww。


209:デフォルトの名無しさん
08/02/14 19:34:43
まあ208が「懺悔」の意味を勘違いしていることはよくわかった。

210:デフォルトの名無しさん
08/02/14 19:42:35
今日は凄いくだらない事にメチャクチャ腹が立ったのでやつあたりしている。
が正しいな。

211:デフォルトの名無しさん
08/02/14 19:48:43
「これはひどい」
「突っ込み所満載」

212:デフォルトの名無しさん
08/02/14 19:56:13
>>208
普通にRectangleで指定した範囲だけロックされるぞ
(0,0,1,1)の範囲を指定したのにその外を触ろうとしたらAccessViolationExceptionが出る

213:デフォルトの名無しさん
08/02/14 20:05:04
八つ当たりする先に困ってココに書いてるんだけどね。

>208
釣れた!! ソースはってみろよ。

214:デフォルトの名無しさん
08/02/14 20:05:32
>212だ
自分が釣られてどうする。

215:デフォルトの名無しさん
08/02/14 20:25:23
おら 奇跡は起きたか豚!
tmp.Save(@"c:\tmpA.Png", ImageFormat.Png); //tmpがBitmap型な。
BitmapData bmpData = tmp.LockBits(new Rectangle(0,0,1,1), ImageLockMode.ReadOnly,
                  tmp.PixelFormat);
int bytes = (tmp.Width) * (tmp.Height) * 4;
byte[] rgbValues = new byte[bytes];
IntPtr ptr = bmpData.Scan0;
int a = bmpData.Height;
int b = bmpData.Width;
Console.WriteLine(a.ToString()+"+"+b.ToString());   //1+1

Marshal.Copy(ptr, rgbValues, 0, bytes);
for (int d = 0; d < bytes; d++)
{
   rgbValues[d] = 0xff;
}
Marshal.Copy(rgbValues, 0, ptr, bytes);
tmp.UnlockBits(bmpData);
tmp.Save(@"c:\tmpB.Png", ImageFormat.Png);


216:デフォルトの名無しさん
08/02/14 21:14:12
むしろブログでやってくれたほうが愉快だったのに、と思ってしまう。

217:208,213,215
08/02/14 21:15:04
おまえら反応無いなと思ったら。
>208>213>215 は全部俺>208だ。
URLリンク(hey.chu.jp)
今日は気分が良いからアプロダにサンプルまで置いてしまうぞ。

最後に俺のTipsを付けておく。
bmpData = tmp.LockBits(new Rectangle(0, 0, 1, 1), ImageLockMode.ReadOnly,
             tmp.PixelFormat);
ptr = bmpData.Scan0;
Marshal.Copy(ptr, rgbValues, 0, bytes);
Rectangle rect = new Rectangle(64,64,256,128);//目的範囲をrectとすると。
for (int i= rect.X;i<rect.X + rect.Width;i++)
   for (int j = rect.Y; j<rect.Y+ rect.Height;j++)
   {
      int d = j*tmp.Width+i;
      swap = rgbValues[d * 4 + 1];
      rgbValues[d * 4 + 1] = rgbValues[d * 4 + 2];
      rgbValues[d * 4 + 2] = swap;
   }

218:デフォルトの名無しさん
08/02/14 21:16:29
>216
っていうか、 MSのフォーラムに行け。

219:208
08/02/14 21:19:43
>218も俺。 って。

>216はVSインストールした事も無いのに書き込んで居るんだね。

220:208
08/02/14 21:48:05
どうしたのですか?
ゲイツのうんこ大好きなスカトロ豚さん?

31行目か60行目を
Marshal.Copy(ptr, rgbValues, 0, bytes+1); // +1(・∀・) イイ
って変更すると、多分お探しのエラーコードがでまちゅよ。

221:216
08/02/14 21:57:35
215で例外になるじゃんと思いつつも、217やったらたしかに動くね。
違いと言えば、215のコードを動かしたときは
tmpのインスタンスを作るときにファイルから読み込むBitmapのコンストラクタを使ったということくらい。

あと、217でtmpの中身を作るときのPixelFormatをFormat16bppRgb565にしつつ、
LockBitsに渡すPixelFormatをFormat32bppArgbにしても、探してた例外になったよ。

222:デフォルトの名無しさん
08/02/14 21:57:44
えっと・・・何?こいつ

223:208
08/02/14 22:02:30
>216
あんまり頑張るなよ。
自分でも苦しい言い訳だと思わない?

>int bytes = (tmp.Width) * (tmp.Height) * 4;
の"4"の意味が解らないなんて無理があるだろ。

けど、とりあえず反応してくれて、 あ り が と 。
ちなみに実行した環境とかも教えてくれちゃうと嬉しいな。

224:208
08/02/14 22:05:12
>222
良いTipsを思いついたからブログに書こうと思ったら、
世間の奴らのブタ過ぎに書くに書けなくなった。

225:デフォルトの名無しさん
08/02/14 22:06:44
>>223
いやそういうことではなさそう
PixelFormat.Format32bppArgbで作ってPixelFormat32bppRgbでロックしても例外出る

ビットマップのPixelFormatと違うフォーマットでロックしたらRectangleの中だけロックされるみたいだ

226:デフォルトの名無しさん
08/02/14 22:19:43
>225
そうだろうな。

そして人は
Format32bppArgbなら、Format32bppArgbでLockBitする。
Format32bppPArgbなら、Format32bppPArgbでLockBitする。
Format32bppRgbなら、Format32bppRgbでLockBitする。

そうでない時エラーになるのは人として当然。
そして >225はnew Rectangle(0, 0, tmp.Width, tmp.Height)の時どう動いて欲しいのかな?
>ビットマップのPixelFormatと違うフォーマットでロックしたらRectangleの中だけロックされるみたいだ
(・∀・)ニヤ

ぶっちゃけ書くけど、2008まだインストールして居ないんだ。俺。

227:デフォルトの名無しさん
08/02/14 22:33:39
>>223
ペイントで24ビットビットマップとして保存して、
Bitmap tmp = new Bitmap(@"h:\P1000220.bmp");のようにした。
.NET Framework 1.1 SP1と2.0 SP1 (3.5)、
VC#コンパイラ.NET 2003, 2005, 2008の3つで試した。

32ビットビットマップでやるとtmp.PixelFormatがFormat32bppArgbになってうまくいくね。
(217からGraphics作ってる部分だけ抜き出して、tmp.Saveで作った)

228:デフォルトの名無しさん
08/02/14 22:35:19
>>226
違うフォーマットでロックすることは可能
これでお前の期待する結果になる
こういう仕様のようにも見える
Rectangle rect = new Rectangle(0, 0, 10, 10);
BitmapData bmpdata = tmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
for (int i = 0; i < rect.Width * rect.Height; i++) ((uint*)(void*)bmpdata.Scan0)[i] = 0xfffffff;
tmp.UnlockBits(bmpdata);

229:208
08/02/14 22:43:13
>227
良く嘘をつく奴だな程度に思っていたけど、只の低脳なのか?

Bitmap tmp = new Bitmap(@"h:\P1000220.bmp"); //この次の行に書け。
Console.WriteLine("tmp.PixelFormat =" + tmp.PixelFormat.ToString()); //何が見える?

ペイントで24ビットビットマップとして保存して居る奴に必要なコード変更はこういう事だ。
//int bytes = (tmp.Width) * (tmp.Height) * 4;
 int bytes = (tmp.Width) * (tmp.Height) * 3;


230:228
08/02/14 22:45:30
補足
tmpのPixelFormatはFormat32bppArgb

231:デフォルトの名無しさん
08/02/14 23:02:29
>>229
嘘付きと低脳だったら嘘付きがいいな。
すまん、LockBitsするときにはPixelFormat.Format32bppArgbを
指定するよう書き換えていたことをさっきからずっと忘れていた。

232:208
08/02/14 23:03:53
>228
面白い。 >225は間違って無かったんだな。
Bitmap tmp = new Bitmap(412, 256, PixelFormat.Format32bppRgb);
で作って。
BitmapData bmpdata = tmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);//つまり同じ。
for (int i = 0; i < rect.Width * rect.Height; i++) ((uint*)(void*)bmpdata.Scan0)[i] = 0xfffffff;
tmp.UnlockBits(bmpdata);
した場合は元のもくあみに戻るのな。

念のため
for (int i = 0; i < (rect.Width * rect.Height)+200; i++) ((uint*)(void*)bmpdata.Scan0)[i] = 0xfffffff;
として見たが、むなしくなった。 結果は白線がのびる。 exception無し。
こちらの環境は 2005 .NET 2.0 オンリ


夜も更けて来たので哲学入ります。
 俺がやってることは、世間の奴らが見向きもしないで触らずにいた汚い糞を、
わざわざどけてやってるだけなんだよな。

結果、一番得得してるのは、糞を垂れ流してる張本人って事ないか?

233:デフォルトの名無しさん
08/02/14 23:05:02
>231
わるかった。 君が板から>228なんて案も出たんだ。

234:デフォルトの名無しさん
08/02/14 23:32:16
たぶんLockBitsは指定されたPixelFormatと内部の形式が同じだったら、
コピーしないで中のメモリを直接ロックかける、
違ったら新しくメモリを用意し、そこに指定された領域を指定された形式に変換したものを
書き込んでいるという風になっている予感。

ソース見たら一発でわかるだろうな、誰かExpressではないVS 2008持っている奴いないのか?

デバッグ時は厳密にチェックするルーチンを使用し、
リリースでは速度重視って切替ができたら今より良かったと思う。

235:デフォルトの名無しさん
08/02/14 23:34:46
NetMassDownloader使えばVS持ってなくてもソース落とせるよ
ただ,ネイティブGDI+の関数を呼んでるだけという罠

236:デフォルトの名無しさん
08/02/14 23:59:50
>235
OSの環境に依存か。

 unsafeかつ、フォーマットの変更が有って初めてLockBit()は仕様通り動くのな。 >228

>208がrect=(0,0,1,1)に拘ってたけど、rect=(80,64,1,1)とかは動作に影響があるな。
 ソースにはラマーの意図を明確にする様に書けって話に戻るんじゃない?
 せいぜい他人が>217みたいなソースを書いてきたとき、頭を捻るって感じ。

そんな場面は限りなく少ないから、ググっても仕方ないで、 Q.E.D.


ちなみに、俺が>208って言ったら信じる? グチっぽくならないコメントを考えるよw。

237:デフォルトの名無しさん
08/02/15 00:11:02
(´・ω・`)しらんがな

238:デフォルトの名無しさん
08/02/15 00:39:25
>>236
VistaだとGDI+ 1.1になっているから何か変更があるのかもしれない。

> rect=(80,64,1,1)とか
そういうときのためのBitmapData.Stride。

239:デフォルトの名無しさん
08/02/15 14:11:20
>>236
> unsafeかつ、フォーマットの変更が有って初めてLockBit()は仕様通り動くのな。 >228
その条件を満たさないとき、ドキュメントにあるどの仕様に反してるんだ?
一部だけを切りだして Stride も小さくしてくれるとか、領域外をアクセスすると
違反になるとかは 208の脳内仕様じゃないいのか?

LockBits は指定された領域を指定された様にアクセスできる情報を取得する
ためのメソッドであって、指定領域外へのアクセスがどうなろうが別にバグでも
なんでもない。ちゃんと当該領域は移動されないようロックされ、BitmapDataに
アクセスするための情報も返される。

240:デフォルトの名無しさん
08/02/15 15:29:33
で、結局アホは誰だったの?
俺の他に

241:デフォルトの名無しさん
08/02/15 18:31:14
URLリンク(dat.2chan.net)
やっぱ男はこうじゃないとね


242:デフォルトの名無しさん
08/02/15 18:50:29
コピペ君って馬鹿だな、まで読んだ。

243:デフォルトの名無しさん
08/02/15 19:09:48
コピペ君って馬鹿だな、まで読んだ。

244:デフォルトの名無しさん
08/02/15 20:42:33
Drawing::BitmapからGDI+のCachedBitmapを作成したいのですが、
Drawing::BitmapからGDI+のBitmapを取得するにはどうすればよい?

245:デフォルトの名無しさん
08/02/15 21:57:07
え? 早口言葉?

246:デフォルトの名無しさん
08/02/15 22:36:40
うわぁ・・・

247:デフォルトの名無しさん
08/02/16 00:59:38
bmp.GetHbitmap()ってことじゃなくて?

248:デフォルトの名無しさん
08/02/16 01:10:57
>>242-243
よく見るよね
こういうのコピペって言うの?

249:デフォルトの名無しさん
08/02/16 01:34:08
「コピ」-アンド「ペ」-スト

250:デフォルトの名無しさん
08/02/16 01:51:49
>240
ラマー板に良くいる。プログラミングが出来ないラマーが釣れましたね。
static void Main(string[] args)
{
  Bitmap src = new Bitmap(64, 64, PixelFormat.Format32bppRgb);
  Graphics.FromImage(src).Clear(Color.Black);
  Rectangle rect = new Rectangle(32, 32, 20, 20);     
  unsafe
  {
    BitmapData bmpdata = src.LockBits(rect, ImageLockMode.ReadWrite, src.PixelFormat);//見える?
    for (int i = 0; i < (rect.Width * rect.Height); i++) ((uint*)(void*)bmpdata.Scan0)[i] = 0xfffffff;
    src.UnlockBits(bmpdata);
    src.Save(@"same.Png", ImageFormat.Png);
   
    Graphics.FromImage(src).Clear(Color.Black);
    bmpdata = src.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); //見える?
    for (int i = 0; i < (rect.Width * rect.Height); i++) ((uint*)(void*)bmpdata.Scan0)[i] = 0xfffffff;
    src.UnlockBits(bmpdata);
    src.Save(@"different.Png", ImageFormat.Png);
  }
}
チマチマソース書くより、ファビョる豚の方が案外気分が良いのかもな。
ラマー板に行けば解るよ。 頭の善し悪しより声の大きさが重要ってさ。


251:デフォルトの名無しさん
08/02/16 02:00:12
>239の言葉を借りれば、
LockBits()と言う変幻自在なMS仕様を >208如きには追えなかったってことさ。

これからも、MSがカラスが白いと言ったら、絶対に黒いっていうなよw。

252:デフォルトの名無しさん
08/02/16 02:50:16
>208が見てきたサイトも解った。

>特別の事情がない限り、このコードのように全領域をロックする。
 この発案者は、きっと毎日 MSを尊敬の目で見てきた善行によって得られたノウハウだと思ったのだろうな。

 だけど書いてる本人か(もしくは彼に教えた人)も「特別の事情」がさっぱり解らない。
そして「どうして?」とか「事情とは何か?」って考えはとても背徳的で、>239の様に酷い罵声を浴びせられるんだ。

253:デフォルトの名無しさん
08/02/16 02:56:38
blogに書くなりMSにフィードバックするなり文句言うなりして終了だろ
何を粘ってるんだよ

254:デフォルトの名無しさん
08/02/16 02:58:48
>239みたいな奴が居なければ、>208はココに書き込まなかった

って案に、個人的に酔ってみたんだ。 ラマー板で適当なスレを探そうかしら。

255:デフォルトの名無しさん
08/02/16 20:26:31
ラマー板って何かと思ったよ。初めて聞いた。
妊婦用の板かと。

256:デフォルトの名無しさん
08/02/16 20:28:46
>>255が初めて触れた事を考えるとお前らなかなか大人だなw

257:デフォルトの名無しさん
08/02/16 21:30:21
>>254
よう、ひっひっふー

258:デフォルトの名無しさん
08/02/16 22:22:18
>>254
日本語でおk、ひっひっふー

259:デフォルトの名無しさん
08/02/16 22:25:27
マ板でやれ。

260:デフォルトの名無しさん
08/02/16 22:44:20
>>259
ラマー板でやれ

261:デフォルトの名無しさん
08/02/16 22:51:37
ここはラム板だっちゃ。

262:デフォルトの名無しさん
08/02/16 22:55:15
混み合う電車の車内、その男は熱く堅いマラを私の後ろから押しつけてきた

263:デフォルトの名無しさん
08/02/17 04:44:40
ラマー板吹いたwwwwww
オレオレ用語キタコレ
やっぱり人間、謙虚じゃないといつどこで恥をかくか分からんねw

スレリンク(gamedev板:329-番)


スレリンク(gamedev板:339番)
スレリンク(gamedev板:344番)
スレリンク(gamedev板:346番)
スレリンク(gamedev板:348番)
たぶんこいつ、このスレでファビョってる奴と同一人物だよ
ラマー板も「想定」してあげないといけないらしいw
自作自演で自分の恥をうやむやにして逃げるから笑える
自分の言ってることを理解してもらえないと、ゆとりとかMS信者とか騒ぎ出すから気をつけてね

264:デフォルトの名無しさん
08/02/17 04:50:03
スレリンク(gamedev板:344番)
たしかに「プログラマじゃないから」とか言ってるし、アンカーの仕方も同じだな。

どう見ても>>250です。本当にありがとうございました。

265:デフォルトの名無しさん
08/02/17 07:09:06
>>208
Lockbits - specifying a rectangle with pixelformat 32bppArGB
URLリンク(connect.microsoft.com)

266:デフォルトの名無しさん
08/02/17 09:15:18
>265 C#だとunsafeじゃないと動かないんだよね。それ。

一年前にVB厨が見つけたけど、(2007/01/04)
Microsoft様は「それは、俺たちが一年前(2006/05/18)にすでに通過した地点だ」と宣ったわけだw。

267:デフォルトの名無しさん
08/02/17 09:28:31
>208がVB厨より一年遅れともとれる。
所詮「MS」フィードバックともとれる。
MSがvistaと言ったら、XPのbugfixだなんて恐れ多くて言えない。

268:208
08/02/17 11:39:39
 ソースを一行も読めない>239は >236までして必死になって人格攻撃をしましたが
毎日 MSを神と崇めるだけの仕事をしてきた彼には、>250のソースからFormat32bppArgbなどの単語を
得てやっとの思いで >265のログを見つけ出すのがやっとでした。

 それに対して、私は>217を new Rectangle(0, 0, tmp.Width, tmp.Height)に改め、フォーマットの
変更や限定無しに、現行xpでもvistaでも正常に動作するソースを手に入れました。
 更に上司にunsafeを使った高速化を提案し、「うちはそこまでしなくてもいいよ。だけど勉強熱心だね。」と褒められました。

アンチ信者は、「アンチ」の信者と言ったのはよく言った物で、正直私は「ご利益w」の様な物を感じました。

269:デフォルトの名無しさん
08/02/17 11:40:26
訂正
>236 => >263

270:デフォルトの名無しさん
08/02/17 11:45:40
誰もMS信者なんて居ないのに独りで正義気取り
カワイソス

271:208
08/02/17 11:50:23
 ソースや文章には多くの目が加わるとより良くなるとは、
多くのプログラマやリファクタの心がける事とおもいます。

>270 ご指摘ありがとうございます。
 正義では無く、私自信もひとつの「信者」と自嘲の意味を込めて書かせて頂きました。


272:デフォルトの名無しさん
08/02/17 11:56:12
C#の質問じゃなくて.Net Frameworkの質問になっちゃうかもしれないけど

PixelFormt.*のフォーマットの定義
(PixelFormat.Format24bppRgbだったらB->G->Rの順で並んでいるbyte[]とか)
ってどこにあるの。

教えてください。

あと、bmp.Dispose()とか必要なん?
ガベコレがよきにはからってくれないの ?



273:デフォルトの名無しさん
08/02/17 11:59:09
うむ
これからも懺悔の心を忘れるなよwww

274:デフォルトの名無しさん
08/02/17 12:16:35
ソースを一行も読めない>239、とか
毎日 MSを神と崇めるだけの仕事をしてきた彼、とか

頭大丈夫か?少し休んだほうがいいぞ

275:デフォルトの名無しさん
08/02/17 12:41:20
>>272
無いんじゃね
WPFにはあるんだけど

放置しててもそのうちファイナライザがGCに呼ばれてそこで解放されるけどあくまでフェイルセーフ

276:デフォルトの名無しさん
08/02/17 13:03:27
>>268
お前の成功物語は239が居なくても成立したように見える。
どこで239から利益を得たのかわからない。

277:デフォルトの名無しさん
08/02/17 13:15:23
265 = 239 だからじゃね?
>265は役に立ってる。 (0,0,1,1)のままだとvistaで転けるからw。

..
...
(0,0,1,1)なんて発想の方がでねーだろw。

278:デフォルトの名無しさん
08/02/17 13:41:13
コピペ君って馬鹿だな、まで読んだ。

279:デフォルトの名無しさん
08/02/17 13:44:04
>>274
空気読めてないようだねw
頭大丈夫?

280:デフォルトの名無しさん
08/02/17 13:45:05
>>278
コピペしてるお前が馬鹿だということが、よくわかった。

281:デフォルトの名無しさん
08/02/17 14:02:57
>>266
>Microsoft様は「それは、俺たちが一年前(2006/05/18)にすでに通過した地点だ」と宣ったわけだw。

宣ってない宣ってない。
2006/05/18のblogに載ってるのは、
「Orcasでは互換性を重視してるよ。そのためにRed and Greenモデルってのを入れたんだ」
って話で、Lockbitsの話はカケラも出ていない。

282:デフォルトの名無しさん
08/02/17 14:18:38
コピペ君って馬鹿だな、まで読んだ。

283:デフォルトの名無しさん
08/02/17 14:19:14
コピペ君って馬鹿だな、まで読んだ。

284:デフォルトの名無しさん
08/02/17 14:26:13
コピペ君って馬鹿だな、まで読んだ。

285:デフォルトの名無しさん
08/02/17 15:13:00
>272 が自分にも入り要な事に気づいたので、2匹目のドジョウを狙うぜ。
 だけど24,32bit系しかカバーできなんだ。orz
static void Main(string[] args)
{
  Rectangle rect = new Rectangle(0, 0, 8, 8);
  PixelFormat[] PFlist = new PixelFormat[] {
    PixelFormat.Format32bppArgb,PixelFormat.Format32bppArgb,PixelFormat.Format32bppPArgb,PixelFormat.Format32bppRgb,
    PixelFormat.Format24bppRgb};//ゴメン 24,32bit系しかカバーできなんだ。
  Color[] colors = new Color[] {
    Color.FromArgb(255, 0, 0),Color.FromArgb(0,255, 0),Color.FromArgb(0,0, 255),
    Color.FromArgb(64, 0, 0, 0)}; //用途に応じてココは増やした方が良いな。
  foreach(PixelFormat pf in PFlist)
  {
    Bitmap src = new Bitmap(rect.Width, rect.Height, pf);
    foreach(Color cl in colors){
      Graphics.FromImage(src).Clear(cl);
      Console.Write("{0}|{1,5}\t",pf.ToString(),cl.ToString());
      unsafe{
        BitmapData bmpdata = src.LockBits(rect, ImageLockMode.ReadOnly, src.PixelFormat);
        int pixwidth = bmpdata.Stride/bmpdata.Width;
        for (int i=0;i<pixwidth;i++)
          Console.Write("[{0,3}]", ((byte*)(void*)bmpdata.Scan0)[i].ToString());
        src.UnlockBits(bmpdata);
      }
      Console.WriteLine("");
    }
    Console.WriteLine("-----------------------------------");
  }
}
更に>275が書いた事が間違ってたら、 真にうけた俺は、更にバカだな。

286:285
08/02/17 15:20:54
あれ? コレじゃ俺がコピペ君みたいじゃないか。


えっと。 すまない。本当にコピペなんだ。orz

287:285
08/02/17 15:26:27
っていうか、コレ全然役にたたね。 実行しなくて良いです。
スレ汚し失礼しました。

288:デフォルトの名無しさん
08/02/17 15:29:06
>>272
.NET Frameworkの仕様というよりほとんどGDI+の仕様だけど、
ここに文章で書いてある。
URLリンク(msdn2.microsoft.com)

289:デフォルトの名無しさん
08/02/17 16:41:34
272じゃないんだけど
Dispose()は単なるメソッドで、GCとは関係なく
GCはいつ回収しにくるかわからないので、明示的に解放処理をしたい場合
IDisposableインターフェイスを実装してDispose()する

という解釈で合ってるのかな?

290:デフォルトの名無しさん
08/02/17 19:28:52
サテライトアセンブリを学んでいるところです。

そこで使われている Assembly Linker の al.exe はどこの場所に
インストールされているものでしょうか。

 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin
(Resgen.exe、Winres.exe はここにありました) 

を見たり検索したりしてみたのですが見つかりませんでした。
すみませんがこれについて教えてください。


291:290
08/02/17 20:17:21
確かにal.exeは見つからないままでしたが、少なくともVS2005で作成する
場合は、コード内で、現在のスレッドのカルチャ CurrentThread.CurrentUICulture 
にカルチャ情報 CultureInfo() を指定するだけで該当のリソースが使われる
ようでした。al.exe は無くてもVSがやってくれるので問題ないのですね。


292:デフォルトの名無しさん
08/02/17 20:24:53
>>289
うん
直接アンマネージリソースを扱ってたりして特別な解放処理が必要なクラスなら
もしDispose呼び忘れても死亡しないようにファイナライザも実装する

293:デフォルトの名無しさん
08/02/17 21:28:56
ResourceHoge.resx
ResourceHoge.ja.resx
ResourceHoge.en.resx
...
等とするとVSが作ってくれて、実行時に選択してくれるのな

294:デフォルトの名無しさん
08/02/17 21:30:33
>>291
C:\Windows\Microsoft.NET\Framework\v2.0.50727\al.exe

295:デフォルトの名無しさん
08/02/17 22:32:45
なんでC++でなくて、C#を使ってるんですか?


296:290
08/02/17 23:58:52
>>293
どうもそのようです。

>>294
ありがとうございました、そこにあることを確認しました!!
(Program Files の中しか探していませんでした。。。)

またよろしくお願いします。

297:デフォルトの名無しさん
08/02/18 01:14:00
>>272
憶えていないけど、どこかで見た記憶が有る、ヘルプのすごい変なところ

298:デフォルトの名無しさん
08/02/18 01:31:29
>>272
アンマネージドのラッパになっているクラスは大抵付いていてやらないとむやみに長期に渡って残るよ
アプリ落とす段階で適当にコレクトされるみたいですけど。
理由は、Comインターフェイスは手動リファレンスカウンタで管理しているので、ガベコレと直接関連してくれないから。(いずれ死ぬけど)
ファイル周りのDisopseは必ずやっておく事、ファイルが長時間に渡ってロックしっ放しになって
他のアプリからアクセスできなくなる。
それとスレッドを持っていてバックグラウンドで仕事をしているようなタイプのオブジェクトも
これは、アプリのプロセスインスタンスが死ななくなって都合が悪い、
特にデバッグ時に停止してもなかなかIDEに制御が戻らなくなってデバッグに不便になります。

299:272
08/02/18 01:36:04
みなさんありがとう。

Dispose関係は結構複雑なのですね。
忘れないようにしたいと思います。


300:デフォルトの名無しさん
08/02/18 01:40:59
WPFでどうしてDisposeがほとんどいらなくなったのか理解できない
ほとんどのオブジェクトは相変わらずアンマネージリソース持ってるのに

301:デフォルトの名無しさん
08/02/18 05:15:29
コピペ君って馬鹿だな、まで読んだ。

302:デフォルトの名無しさん
08/02/18 05:21:14
ゆりしー(´;ω;`)かわいそうです みなとらじお 君が主で執事が俺で 02
URLリンク(www.nicovideo.jp)

伊藤静「じゃあ、次もwww」
後藤邑子「斬ったほうがいい?www」
伊藤「次は斬る?www」
後藤「どうするww」
伊藤「ペンネーム『心が綺麗な天使』から頂きましったww(フンッwww) 私はこの日本に住むのにはピュアすぎます。どのようにしたら天使のような私がこの今の日本に馴染めるのでしょうか?」
後藤「.........ウザい」
二人「キャッハハハハハwwwww」
伊藤「ちょほんとさあ、大丈夫?www」
後藤「おい天使、おいおい自称天使ww」
伊藤「自分が天使だと思ってること自体がちょっと間違ってんじゃないの?っていうねwww」
後藤「うん。ね。ちょっと軽く(精神病院に)通院してみたほうがいいんじゃないの?www もしくは、今の日本に馴染めるようにちょっと汚れちゃえよwwww」
伊藤「それかもう日本出て行ったらいいんじゃないの?www」
後藤「天使が住める国にwwwwwww なんかエルフの国とかに行ったらいいんじゃないの?wwww」
伊藤「妄想の中とかに(プフッww)行っちゃえばいいんじゃないのwww」
後藤「コワイヨーwwwコワイヨーwwwww」
二人「クックックックwwww」

303:デフォルトの名無しさん
08/02/18 07:17:14
>>300
>ほとんどのオブジェクトは相変わらずアンマネージリソース持ってるのに
それはXAMLのエレメントを表現したオブジェクトのツリー
アンマネージドリソースは持ってない。

304:デフォルトの名無しさん
08/02/18 08:43:41
ニコ厨氏ね

305:デフォルトの名無しさん
08/02/18 11:19:34
おまえら、木曜日から酷い有様だな。ちょろ過ぎる。
>208、>250なんてさ
>ソースには(プログ)ラマーの意図を明確にする様に書けって話 (引用 ケントベック)

> この発案者は、きっと毎日 MSを尊敬の目で見てきた善行によって得られたノウハウだと思ったのだろうな。
> だけど書いてる本人か(もしくは彼に教えた人)も「特別の事情」がさっぱり解らない。
>そして「どうして?」とか「事情とは何か?」って考えはとても背徳的 (読んだことあるけど失念。トム・デマルコ風?)

> ソースや文章には多くの目が加わるとより良くなるとは、(出典 Refactoring to Patterns)

 これ引用ばかりww。 それどころか、ぜんぜんランクの低いそれらをやたら勧める「アジャイルw」の口伝だろw。
>208はどう見ても真っ赤な信者です。本当にありがとうございました。
 本読んでばかりで人と話しが合わない。信者っぷりが凄くて会社のお荷物系wwwww。

 それなのに、オマエらチャンスボール多すぎ。常識的に>227なんてありえないし。
 >270>271繋がりはなんだ?便利すぐる。
執拗に人格攻撃してるのは、>239に過剰反応したコピペ君の>250なのが事実。
最後に、自分からの信者宣言まで許すし。...もう訳がわからん。
こんなの>208への接待プレーか、>250は>208の素敵な自作自演ですと思われても仕方ねーだろうよ。JK

本当にちょろ過ぎる!!! そりゃ便乗して論破狙いに「C#ってなに?」な奴も湧くよwwww。
NetMassDownloader片手にさww。
そういう本を読んで、頭良いと勘違いする只のガキは五万といるんだからな。 覚悟しとけ。
!!! 俺 も 含 め て 5 万 + 1 wwww !!!

306:239
08/02/18 11:46:43
想像したり実験したりしながら「動けばいいや」とコードを書き、
仕様が想像と異なっていたらAPIのバグだと主張するという素敵な
スタイルを否定した漏れも悪かった。

307:デフォルトの名無しさん
08/02/18 11:48:02
コピペ君って馬鹿だな、まで読んだ。

308:デフォルトの名無しさん
08/02/18 11:55:24
>306
URLリンク(www.amazon.co.jp)でのテスト駆動開発-ジェームス・ニューカーク/dp/4891004428

309:デフォルトの名無しさん
08/02/18 12:01:33
>>308
何かお探しですか?
入力したURLが当サイトのページと一致しません
といわれました

310:デフォルトの名無しさん
08/02/18 12:06:50
239が265って線は消えたな。

URLリンク(www.cbook24.com)
 URLがどうこう以前に、会社か学校に「テスト駆動開発」の本が無いの?

>想像したり実験したりしながら「動けばいいや」とコードを書き、
>仕様が想像と異なっていたらAPIのバグだと主張するという素敵な
>スタイル
がそのまま載ってるだけなんで、 御社では別によまんくても良いんじゃない?
urlをクリックしてくれただけで十分です。

311:デフォルトの名無しさん
08/02/18 12:07:12
>>309
URLリンク(www.amazon.co.jp)

実は書名の部分は削っても同じページが表示される。

312:デフォルトの名無しさん
08/02/18 12:11:50
主張するっていうか、発見したとした方が嫌みが無いよ。

313:305
08/02/18 12:22:37
MSは、VS2005あたりからユーザーのニーズに応えて「テスト」って機能を付けたけど。
自社製品では「テスト」しないんだね。
みんなでerrorを見つけてbugfixしようよ。 みんな幸せになろう。
って書くと、もうアンチ信者なのか? orz

314:305
08/02/18 12:35:48
URLリンク(ja.wikipedia.org)ソフトウェアテスト#.E3.83.96.E3.83.A9.E3.83.83.E3.82.AF.E3.83.9C.E3.83.83.E3.82.AF.E3.82.B9.E3.83.86.E3.82.B9.E3.83.88
ダメだ。 俺センス無いな。 urlクリックでは行けない。
239の後輩が基本情報処理技術者の資格もってれば教えてくれるよ。

315:デフォルトの名無しさん
08/02/18 12:49:37
>>301
お前うざい

316:デフォルトの名無しさん
08/02/18 12:52:07
自校紹介 >305
>本読んでばかりで人と話しが合わない。信者っぷりが凄くて会社のお荷物系wwwww。

317:305
08/02/18 13:17:03
俺の希望を言わせてもらえば、
誰でも良いから。 239を語って
「208はマジで行き当たりバッタリで、TDD風味なのは最悪コピペ野郎の250!!
 なんだよ、どっちも糞じゃねーか!!」
ぐらいの線だったんだけどな。

318:デフォルトの名無しさん
08/02/18 14:24:36
>>313
いやいや、テストしないとかありえないだろ。
MS はテストだけで部署が1つある。

319:305
08/02/18 14:31:04
>265 ループかよ。  俺もうこのクソコテいらねーよ。

気分はアレだ。せっせっと地雷埋めて、味方が乗ってるときに起爆しちゃったぐらい。
俺、208みたいに全レスとかしないから。 テストってなんの事かなさっぱりわからないや。 208にでも言わせろ。

320:デフォルトの名無しさん
08/02/18 17:06:29
おまえらさ・・・本当にC#の質問したい奴ができない雰囲気になってるからやめとけよ

321:デフォルトの名無しさん
08/02/18 18:03:16
>>315
コピペ君って馬鹿だな、まで読んだ。

322:デフォルトの名無しさん
08/02/18 18:11:39
>>303
BitmapSourceとかGeometryとか描画の低レベルなところはアンマネージリソース持ってるよ

323:デフォルトの名無しさん
08/02/18 21:02:07
トータルで見るとGCって不便だし、余計に頭を使う。

324:デフォルトの名無しさん
08/02/18 21:14:08
System.InvalidCastException: 型 'System.DBNull' のオブジェクトを型 'System.String' にキャストできません。

SqlServerからSelectしてきたDataRowを表示したいのですが、上記のエラーが出ます。
下記のように書いても、'System.DBNull' は '型' ですが、'変数' のように使用されています。
ということでビルドできません。typeofとか使っても駄目です。
VBだとIsDBNullってあるようですが、C#ではどうしたら良いのでしょうか?

if (row.Name != DBNull)
  Console.WriteLine("Name: {0}", row.Name);



325:デフォルトの名無しさん
08/02/18 21:18:48
URLリンク(msdn2.microsoft.com)(VS.80).aspx
>DBNull はシングルトン クラスです。つまり、このクラスのインスタンスは 1 つしか存在できません。
その唯一のインスタンスは DBNull.Value です。

326:デフォルトの名無しさん
08/02/18 21:18:57
知らんけど

if( !(row.Name is DBNull) )


327:デフォルトの名無しさん
08/02/18 21:22:22
rowにIsNameNullみたいなメソッドがあったはず

328:デフォルトの名無しさん
08/02/18 21:28:52
みなさま、どうも有り難うございます。

>>325
その説明がまた難しかったです‥‥。
row.Name != DBNull.Valueでも同じエラーでビルドできませんでした。

>>325
is演算子なんて、初めて使いました‥‥。
結果は同じだったんですけれど。

>>327
なんと、確かに勝手に作られました!!
カラム分のrow.Is○○Nullが生成されるようです。
気付かず、申し訳ありませんでした。

皆様、どうも有り難うございました。


329:デフォルトの名無しさん
08/02/18 21:31:52
>>324
if(row.Name != DBNull.Value)
でどうか。

330:デフォルトの名無しさん
08/02/18 21:36:04
>>329
俺レス遅すぎorz。
つーか、よく考えたらコンパイル通らんな…。

331:デフォルトの名無しさん
08/02/18 21:36:06
ぶっちゃけ、自動生成されるプロパティ public string Name { get { }}
のなかが、if( row.Name.type == DBNull ) throw Exceptionみたいな
インプリになってるから、Nameを触った時点で終冬

StringならプロパティでNULL時に代替する値を設定できるけど、
Nullable型はどこへ行ったの、って感じ。

332:デフォルトの名無しさん
08/02/18 21:39:59
ちゃんとDBのスキーマでNot NullにしたカラムではIs○○Nullが作られないんですね。


333:デフォルトの名無しさん
08/02/19 01:25:34
ある指定されたファイルの先頭と最後に固定データを付加して、別ファイルに保存する方法が分かりません。
先頭の固定データを設定したByte配列に、元ファイルを読み込んだByte配列をコピーするような方法しかないものでしょうか?

334:デフォルトの名無しさん
08/02/19 01:32:29
先頭に固定データを書きこんだ後に続けて
元のファイルの内容を順次書き込めばいいだろ

335:デフォルトの名無しさん
08/02/19 13:09:01
StreamをUriとして扱ういい方法しりませんか?

やりたいのがzipで圧縮されたMP3をメモリ上に解凍したものを
MediaPlayerで扱いたいとか
HTMLが含まれたメールのHTML部をメモリに抽出したものをwebbrowserで開きたいのですが
メモリ=>Uriとして扱うために、一旦ファイルに落とせば出来るのですが、
ファイルに落とさずに行いたいです。


336:デフォルトの名無しさん
08/02/19 13:12:12
ウェブサーバ機能も搭載してしまうとか。

337:デフォルトの名無しさん
08/02/19 13:19:59
>>336
>ウェブサーバ機能も搭載してしまうとか。
すいませんが、知識がありません。
もうちょっと、ヒントを

あんまり、大がかりにはしたくないのですが、
WCFでちょちょいと出来そうなら、
チャンスなので、WCFとかの勉強をしてもいいかなとも思ってますが。
さくっと見てみた限りでは、ちょっと違うかなぁと
(出来るかもしれないし、出来ないかもしれない)
今は、飛び込むのに迷ってはいるのですが。

338:デフォルトの名無しさん
08/02/19 13:47:15
>>337
System.Net.HttpListener で適当なポート Listen しといて、
要求があったら Response にファイルを返す。

ブラウザで URLリンク(localhost:)ポート番号/ を開く。

339:デフォルトの名無しさん
08/02/19 14:15:07
>>338
回答ありがとうございました。

MSDNにあるサンプルで試したところ、
簡単にできそうですね(さしあたり、HTMLメールの方は出来そうなことを確認)。
ながいこと方法を探していたので、本当に感謝致します。m(_ _)m


340:デフォルトの名無しさん
08/02/19 21:36:35
ReSharperを購入したことのある方いらっしゃいますか?
ReSharperを購入しようと思い、JetBrainのサイトからクレジットカード(Visa)での購入手続きを行ったのですが
数時間後にメールが支払い手続き失敗のメールがきてしまいます。
このカードで他の買い物はできているのでカードが使用不能になっているわけではないと思うのですが・・・

341:デフォルトの名無しさん
08/02/19 21:40:02
ドル決済ができないとか、海外利用に制限かけてあったりとかじゃないの

342:デフォルトの名無しさん
08/02/20 00:47:10
あれ、List<T>にIsReadOnlyは無いの?

343:デフォルトの名無しさん
08/02/20 00:50:01
>>342
ICollection<T>にはある。もちろんList<T>も実装している。

344:デフォルトの名無しさん
08/02/20 00:54:14
なんでList<T>をICollection<T>にキャストか何かしないと使えないの?
List<T>のまま直接IsReadOnlyを参照できればいいのに

345:デフォルトの名無しさん
08/02/20 01:04:55
List<T>は絶対読み取り専用じゃないから無意味

346:デフォルトの名無しさん
08/02/20 01:17:23
んー、インターフェースのメソッドやプロパティを一部隠せる構文ってあったの?

347:デフォルトの名無しさん
08/02/20 01:19:11
明示的な実装

348:デフォルトの名無しさん
08/02/20 01:22:13
なるほど
いろいろとサンクス

349:デフォルトの名無しさん
08/02/20 09:08:53
exe形式のCOMサーバー作るのもやり方がわからず困ってます。
ATLのhoge.exe /regserverのような自己登録型のCOMサーバーのことです。
単にCOMインタフェースを持ったexeを作って、regasmやgacutilでCOM登録はできるけど、
これだと単にDLLサーバーと同じ働きしかしない。
つまり、アプリ側でそのexeを参照してCOMが使えるけど、アプリごとにロードされる。
COMは1つだけロードされて情報を共有したいのですが・・・

こういうのってC#だとCOM+(コンポーネントサービス)で実現すべきですかね?
C#でCOM+作ってregsvcsで登録、複数アプリでの情報共有はできることは確認できたのですが。

350:デフォルトの名無しさん
08/02/20 09:24:40
RegistrationServices.RegisterTypeForComClients でなんとかできるのかもしれない

351:349
08/02/20 11:14:51
んー、これは、プログラムからCOM登録するというだけではないですか?
自分はCOMがマシンでシングルトン的に動く事を期待しているので。
それで複数のアプリがそこへCOMインタフェースを介してアクセス。

352:デフォルトの名無しさん
08/02/20 11:43:57
RegistrationConnectionType 指定できるじゃん?

353:340
08/02/20 12:03:31
>>341
フォームからは日本円も選べるので
日本からの購入も可能なのかと思ったんですが…

354:349
08/02/20 12:03:35
うお、なんかできそうな気配がありますね。
ちなみにこんな記事も見つけた。
URLリンク(www.codeproject.com)
ここではEXE COMサーバー(ActiveX EXE)に相当する物は.netにはないから、
一度.netでCOM作って、それをnativeなActiveX EXEアプリで参照して、
メソッドラッピングするという話。

355:デフォルトの名無しさん
08/02/20 12:28:46
>>353
>>341が言ってるのは、カードの設定のことじゃないのか。

まあ、クレカ関連のトラブルはカード会社に電話するのが一番手っ取り早いと思うよ。

356:340
08/02/20 12:38:52
>>355
ありがとうございます。
問い合わせてみます。

357:デフォルトの名無しさん
08/02/20 21:53:15
期限の年月を逆にかいてないか?

358:デフォルトの名無しさん
08/02/21 09:52:37
買い物したことあるみたいだから、それは無いと思うが、、、たまたまあってたのかもしれんしな。
2012年を過ぎればこんな心配も無くなるなw

359:デフォルトの名無しさん
08/02/21 10:18:00
偶然08/08だったので気づかなかったりw

360:デフォルトの名無しさん
08/02/21 18:48:48
>>334
ありがとうございました

361:デフォルトの名無しさん
08/02/21 22:32:37
JAVAとC#どっちがリバースエンジニアリングに強い?
どっちも変わらない?

362:デフォルトの名無しさん
08/02/21 22:58:33
変わらないと思う。

363:デフォルトの名無しさん
08/02/22 00:33:09
実際のところ難読歌どうなんだろうね。
すんごいクラス細かく分けてあって、名前がa1とかだったらそれなりに調べるのに時間かかるとは思うんだけど。
一メソッドの中のロジックはともかく、複数のクラスの相互関係とかは結構追いにくくなりそうだけど。
もちろんバイナリのほうがいいのはいうまでもないが。


364:デフォルトの名無しさん
08/02/22 00:39:16
リフレクションしてたら死ぬからできればやめといた方が無難

365:デフォルトの名無しさん
08/02/22 02:21:01
バイ…ナ…リ…?

366:デフォルトの名無しさん
08/02/22 02:26:19
意図せずリフレクションが使われてることはよくある。
Enum.Parseとかも駄目。
そういう副作用があるので難読化後に全テストし直しが必要なのできついよ。
駄目なクラスなどだけ難読化の対象から外すのはできるけどそれを確認するのも手間がかかる。
難読化してもメソッド内のロジックとかで見ると何も変わらないのであんまり意味がない。
ほんのちょっと読みづらいだけだよ。

367:デフォルトの名無しさん
08/02/22 07:21:38
>>365
そのまま、ネイティブバイナリの意味ですが?普通に読めば.NET ILコードとネィテブバイナリを比較して行ってると思ったんだけど・・・

>>366
>意図せずリフレクションが使われてることはよくある。
>Enum.Parseとかも駄目。
>そういう副作用があるので難読化後に全テストし直しが必要なのできついよ。

それはめんどくさそうですね。


>駄目なクラスなどだけ難読化の対象から外すのはできるけどそれを確認するのも手間がかかる。
>難読化してもメソッド内のロジックとかで見ると何も変わらないのであんまり意味がない。

ので全部のクラスに難読化かけたときは全体の構造追いにくくなるのである程度は意味ないかと思ったんですけどね・・・
じぶんならかなり見る気がうせるし、追ってくのにも時間かかるだろうから、それなりに障壁にはなるかと。



368:デフォルトの名無しさん
08/02/23 13:08:05
てn
URLリンク(data.exet.nu)

369:デフォルトの名無しさん
08/02/23 13:34:00
↑グロ注意

370:デフォルトの名無しさん
08/02/23 21:39:20
Console.ReadKey を使ってそれなりにリッチなコンソール インターフェイスを
構築しようとしているのですが、(Console IME は使えなかったのでテストして
いませんが) 非 ASCII 文字をペーストすると変に分解? されてしまうようなの
ですが、何か対策は無いものでしょうか。どうかご教示願います。

/* コード */
char c;
while (true) Console.WriteLine("{0} ({1})", c = Console.ReadKey(true).KeyChar, Convert.ToInt32(c));
/* 結果: (入力orペースト -> 出力)
a -> a (97)
A -> A (65)
あ -> ? (130)\n? (12448)
い -> ? (130)\nア (12450)
ア -> ? (131)\nぁ (12353)

371:デフォルトの名無しさん
08/02/24 22:12:17
TextBox textBox;

textBox.AppendText("1\n");
textBox.AppendText("2\n");

textBox.AppendText("3\n");

textBox.AppendText("4\n");

textBox.AppendText(textBoxLog.Text);

とすると、

1
2
3
4
1234

ってなるんだけど、最後の行で改行が消えるのは何故?
改行を保存するにはどうすればいいの?

372:デフォルトの名無しさん
08/02/24 22:14:22
正しい改行は\r\nだぜ

373:デフォルトの名無しさん
08/02/24 22:20:04
ちょっと質問の仕方を変える。

TextBox textBox;

textBox.AppendText("1\n");
textBox.AppendText("2\n");
textBox.AppendText("3\n");
textBox.AppendText("4\n");
textBox.AppendText(textBoxLog.Text);

とすると、

1
2
3
4
1234

ってなるんだけど、初めの4文字は改行されて、最後の4文字は改行されないは何故?

374:デフォルトの名無しさん
08/02/24 22:38:18
>>373
Dock=FillとかにしてTextBoxのサイズがウインドウサイズに連動して変わるようにして、
表示した後にサイズを変えてみ。
\nじゃだめなことがわかるから

375:デフォルトの名無しさん
08/02/24 22:40:08
逆に、なぜ\nでも一見改行されているように見えるのかと聞いているのかもしれない。
それなら、俺も聞きたいところだ。

376:デフォルトの名無しさん
08/02/24 22:46:38
>>374
>>375の言う通り、初めの4文字が「\nじゃだめ」じゃない理由を知りたい。

377:デフォルトの名無しさん
08/02/24 23:20:55
x.SelectionStart = x.TextLength
ってやると末尾に\nが来た場合次の行にカーソルが行くから、かね

378:デフォルトの名無しさん
08/02/24 23:24:02
最善策: Environment.NewLine

379:デフォルトの名無しさん
08/02/24 23:41:20
昨日プログラムを始めたばかりなのですが、本にintは数値を入れる箱と書いてあったのですが
どういう箱なのでしょうか?いまいち解らなくて・・・

380:デフォルトの名無しさん
08/02/25 00:01:41
>>373
textBox.AppendText(textBoxLog.Text + "\n");
で解決とか言う問題ではないのよね?

381:デフォルトの名無しさん
08/02/25 00:03:56
>>380
ではないね。

382:デフォルトの名無しさん
08/02/25 00:06:43
>>379
なれるまで使い続けろ

383:デフォルトの名無しさん
08/02/25 00:09:02
  ____
 /......  .. .../
 ||:::   ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | ̄\ ( ゚Д゚)<  こういう箱。
 |   |: ̄U U ̄:|\_______
 |   |: int   :|
  ̄ ̄ ̄ ̄ ̄ ̄

384:デフォルトの名無しさん
08/02/25 00:10:07
intはどっちかというと箱の形だと思う

385:デフォルトの名無しさん
08/02/25 00:17:59
型の話をするとなっがーくなるぞ

386:デフォルトの名無しさん
08/02/25 00:35:41
>>379
ふらっと池
諸先輩方の仰る通り、とりあえず変数は一通りその存在に慣れて、その後に
詳細を理解した方が良い。

387:デフォルトの名無しさん
08/02/25 00:37:02
>>383
それはむしろ object @int = new Giko("こういう箱。"); じゃw

388:デフォルトの名無しさん
08/02/25 00:39:10
>>379
メモリにも、処理可能な量にも限界がある(有限)ため、資源を区切って使う必要がある。
どんな箱かと言われたら、一般的な段ボール箱かな?

389:デフォルトの名無しさん
08/02/25 03:15:45
詳しいことは知らないので適当に書くが、
半導体が帯電しているかしていないかで0,1をあらわす
それを32個組み合わせたものがintで、
intは2の32乗の状態をもつことが出来る。
一つ一つの状態は整数の値に対応し、四則演算などを行うことが出来る
つまり整数を入れるのがint

390:デフォルトの名無しさん
08/02/25 04:00:04
適当すぎてワロタ

391:デフォルトの名無しさん
08/02/25 09:33:29
>>379
英語の文法を意識して話してるうちは英語が話せないのといっしょ。
でも、たとえも良くないな。
数学の変数と同じと思う方がいい。

392:デフォルトの名無しさん
08/02/25 09:40:04
よく使われるけど「箱」って絶対分かりにくいと思う。
数学の x や y と同じで、ただ代入できる数値に制限があるってだけで
中学生以上なら誰でも理解できると思うんだけど…

393:デフォルトの名無しさん
08/02/25 09:43:35
代入演算子が "=" なのがそもそもオカシイ
もう慣れちまって違和感無いけど

394:デフォルトの名無しさん
08/02/25 10:03:33
代入が「演算」かどうかという点からして微妙なんだがな

395:デフォルトの名無しさん
08/02/25 11:11:48
そうですか

396:391
08/02/25 11:39:35
>>392
Cの時代はポインタの理解の布石として箱で理解する必要はあるかもしれないけどね。
今時の開発で初心者が箱で理解する意味なし。

397:デフォルトの名無しさん
08/02/25 12:14:14
Cの場合、ポインタで直接中身をいじる感覚を把握するために、
箱モデルの必要性があった。

現代的な言語、たとえばJavaなら、プリミティブ値かオブジェクトに付ける名前、
あるいは名札、という概念で把握できるから箱モデルいらね。

398:デフォルトの名無しさん
08/02/25 12:15:07
というかC♯スレだっけ、ということで、
s/Java/C♯/

399:デフォルトの名無しさん
08/02/25 12:25:00
保存媒体のケース
カセットテープのケースにはカセットテープが入る
MDのケースにはMDが入る
形が似てるものは互換性があったり(あるように見えたり)する

何でも入れられるケースもあるけどな

400:デフォルトの名無しさん
08/02/25 12:36:02
その文脈で何でも入れられるケースが出てくるのはおかしい
箱で考えるとその辺で悩む奴がいる

401:デフォルトの名無しさん
08/02/25 12:49:27
ヒープとスタックくらいは構造意識してプログラミングしようよ。

402:デフォルトの名無しさん
08/02/25 13:11:27
今ある言語の「型」は性質によって定義されるのであってメモリ構造とかは付随的なものだから
記憶構造とか意味が無いよ
むしろ「自然数」という型を数学的に定義しているペアノの公理とかの方に引っ張っていくべき

403:デフォルトの名無しさん
08/02/25 14:02:11
行き過ぎた抽象化や比喩は弊害になるいい例なんだと思う
自分の指示がコンピュータのどの資源をどのように確保したかを理解せずまともなプログラムが出来るなんて
現実感の足りない偉い学者の夢想物語で未来永劫そんな理想環境が訪れることは無いんじゃないかな

ペアノとやらでメモリの話を避けてintの定義と機能を説明できる?

404:デフォルトの名無しさん
08/02/25 14:32:42
初心者は型の無いシンプルな言語から始めたほうがいいのじゃないだろうか。

405:デフォルトの名無しさん
08/02/25 15:00:55
型があったほうがコンパイル時にエラーで教えてくれて親切だと思うんだけどなぁ


406:デフォルトの名無しさん
08/02/25 15:10:24
型無し言語ほど恐ろしいものはないわ

407:デフォルトの名無しさん
08/02/25 15:10:56
>>403
できる

408:デフォルトの名無しさん
08/02/25 15:29:06
箱とか数学よりも擬人化したほうがいいだろjk

409:デフォルトの名無しさん
08/02/25 15:32:44
C#で多倍長整数を構造体で定義することを考えてみ
メモリ云々よりも性質から攻めていった方が楽だろ?
型っていうのは性質によって定義されるものなんだろjk

410:デフォルトの名無しさん
08/02/25 15:37:14
型宣言省いて上手く動かず
全部intで処理して挙動不審
floatで期待した結果を得られず

ホビープログラムで経験して理解した者が這い上がってくるって事で良いんじゃないだろうか
別の山道ももちろん在るけど

411:デフォルトの名無しさん
08/02/25 15:46:34
implicit operator実装しまくればVariant型を作れるかな

412:デフォルトの名無しさん
08/02/25 17:34:41
C#で、グラフ構造を表示するのに便利なライブラリーってありません?

413:デフォルトの名無しさん
08/02/25 18:58:11
ListViewの詳細表示で、他のコントロールを貼り付けるにはどうしたらいいですか?

414:デフォルトの名無しさん
08/02/25 19:12:15
>>413
ListViewを使うのは諦めた方がいい。
DataGridViewとか使ったら?
WPFなら融通利くかな・・・。

415:デフォルトの名無しさん
08/02/25 20:49:30
>>411
System.Variant

416:デフォルトの名無しさん
08/02/25 20:52:35
>>413
貼り付けるだけなら
control.Parent = listview;

サイズはListViewItem.BoundsとかListViewItem.ListViewSubItem.Boundsとかで拾う
制御するにはイベントだけじゃ無理でWndProcをオーバーライドして適宜メッセージ処理する必要あり

417:デフォルトの名無しさん
08/02/25 23:52:39
ArrayListにString配列をAdd()で格納*n回繰り返す →
それぞれのStringデータに1バイトずつbyte型のデータを
付加して、String配列を一つのStringデータにする。

やり方をどなたか分かる方おりませんか?

StringBuilderでStringをアペンドすることは出来るのですが、
byte型のデータをアペンドするときに0x12が0x3132になってしまいます。。

418:デフォルトの名無しさん
08/02/26 00:00:24
要するに、そのbyte型データ(bとして)がstringになればいいんでそ。

System.Text.ASCIEncoding.GetString( new byte[] { b } )
でも使って変換すれば。

419:417
08/02/26 00:07:35
>>418 さん

ありがとうございます!!!
大変助かりましたし、勉強になりました。

本当にありがとうございます。

420:デフォルトの名無しさん
08/02/26 00:13:01
もち、ASCIIの範囲超えたら例外だかんね。
文字列はUnicodeとして合法な並びにしかならないから。
それが嫌なら、全部バイト配列でやるこったね。

421:417
08/02/26 00:30:42
文字列で処理する方法を諦めかけていたとき、
byte配列で処理することも考えていました。
データ長が可変なこともあってArrayListで
処理していたのですが、

ArrayList = new ArrayList();

arylst.add( b ); //byte型で0x12を格納したデータ
arylst.add(bytes); //文字列をbyte配列に変換したもので0x35363738(5,6,7,8)を格納したデータ

byte[] = (byte[])arylst.ToArray(typeof(byte));

と処理すると、ToArrayの箇所で必ず、『キャストできませんでした』という
例外になってしまっていました。

もしよろしければ、上記のbyte配列で処理する手順で
例外にならないようにbyte配列を生成する方法を
併せてご教授いただけませんでしょうか?

422:デフォルトの名無しさん
08/02/26 00:41:18
その文字列を、どのエンコーディング使ってByte配列にしたいかによって話も変わってくるけど、
List<byte> bytelist = new List<byte>();
bytelist.Add( b );
bytelist.AddRange( System.Text.UTF8.GetBytes( "abcdefgh...") );
みたいにして、最後にbytelist.ToArray();とでもすればいいんじゃないの。

423:デフォルトの名無しさん
08/02/26 00:54:23
417-418を見て思ったんだけど、(char)bってできなかったっけ?

424:デフォルトの名無しさん
08/02/26 01:12:57
出来ますが、文字コードに変換されてしまいますよ

425:デフォルトの名無しさん
08/02/26 01:29:57
>>421
arylstの中身は { b, bytes }
bytesがbyte[]型ならbyte型にキャスト出来ないのは自明

配列をばらして追加したいならAddRange()

>>423>>424
ASCIIの範囲なら問題ないんじゃないか?
0x30を"30"ではなくて'\x30'に変換したいだけだと思ってたんだが違うのか


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