C♯相談室 Part24
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん♯
NGNG(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
過去スレは>>2-5あたり。
関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
0002名無しさん♯
NGNGPart23 http://pc8.2ch.net/test/read.cgi/tech/1112968209/
Part22 http://pc8.2ch.net/test/read.cgi/tech/1109630502/
Part21 http://pc5.2ch.net/test/read.cgi/tech/1106490240/
Part20 http://pc5.2ch.net/test/read.cgi/tech/1103005153/
Part19 http://pc5.2ch.net/test/read.cgi/tech/1100240847/
Part18 http://pc5.2ch.net/test/read.cgi/tech/1096112588/
Part17 http://pc5.2ch.net/test/read.cgi/tech/1091284402/
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/
Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/
Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
0003名無しさん♯
NGNGPart12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html
0004デフォルトの名無しさん
2005/06/01(水) 22:08:58おつ
0005デフォルトの名無しさん
2005/06/01(水) 22:09:46もつ
0006デフォルトの名無しさん
2005/06/01(水) 22:36:02今回は立つの遅めだったねw
0007デフォルトの名無しさん
2005/06/02(木) 00:15:38どのように記述するのがよいのでしょうか
ためしにAppDomain.ProcessExit で記述して
Enviroment.Exit(0)を実行してみてもスキップされてしまうのですが
private static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
Console.WriteLine("CurrentDomain_ProcessExit");
while(true);
}
0008デフォルトの名無しさん
2005/06/02(木) 08:54:27というメソッドがありますが、例えばImageとかBitmapからGraphicsオブジェクト
を生成する方法はないでしょうか。
要するに、画面に見えない所でGraphicsの描画メソッドをImageなどに適用
しておき、それを返す関数などを作りたいのです。何かいい方法があったら
ぜひご教授下さい。
0009デフォルトの名無しさん
2005/06/02(木) 09:00:28Graphicsのメンバをよーく調べてみ?
0010デフォルトの名無しさん
2005/06/02(木) 09:12:22ありがとうございました!FromImage()というメソッドがありました。
これで早速やってみます。
0011前スレ919
2005/06/02(木) 13:40:25もとに戻しています。「中止」をクリックするとmyThreadをAbortしてます。
private void buttonStart_Click(object sender, System.EventArgs e)
{
myThread.Start();
}
private void MyThreadProc()
{
this.buttonAbort.Enabled = true;
this.buttonStart.Enabled = false;
this.buttonAbort.Select();
this.buttonAbort.Focus();
Thread.Sleep(2000); //何か処理
this.buttonAbort.Enabled = false;
this.buttonStart.Enabled = true;
this.buttonStart.Select();
this.buttonStart.Focus();
}
ところが、開始すると「開始」ボタンが無効になるんですが、フォーカスを
持ったままになってしまいます。無効なのに点線がついてて、スペースキーを押すと
「開始」ボタンが反応するんです(XPだと見て分かる)
別スレッドだとフォーカス関係はうまく動作しないのでしょうか?
上記のようにSelectとかFocusとかいろいろやってみたのですが効きません。
開始前の処理をbutton_Clickのほうに持ってくると、今度は終了時に
無効になった「中止」ボタンにフォーカスが残ってしまいます。
0012デフォルトの名無しさん
2005/06/02(木) 13:45:53UIスレッド以外のスレッドからコントロールをいじるのにはInvoke/BeginInvokeを使えと。
0014デフォルトの名無しさん
2005/06/02(木) 16:28:23C/C++も使っているので、ポインタの考え方が身に染みついてしまっています。
001514
2005/06/02(木) 16:35:07ReadByte()とかReadInt32()とか・・・・ポインタも使おうと思えば
使えますが、あまりC#らしくないプログラムにしたくないので。
0016デフォルトの名無しさん
2005/06/02(木) 18:12:19IntPtr/Marshal使うのもunsafe/ポインタ使うのも実際かわらんし。
0017デフォルトの名無しさん
2005/06/02(木) 18:45:48実際使ってみるとこれがなかなか速い。そりゃC/C++で書いた物に
比べれば遅いだろうが、開発時間がとても短くなる。コンパイルも速いし。
0018デフォルトの名無しさん
2005/06/02(木) 19:43:520019デフォルトの名無しさん
2005/06/02(木) 20:01:05それはあるな。DLLを山ほど読み込むし、あれだけライブラリが豊富
なら仕方ないかと思う。メモリも多量に食うしね。Javaは体質的に
受け付けないが、C#ならすんなり使えた。(そんなに変わらないという
話もあるが、Windowsとの相性はC#の方が絶対上。メーカー一緒
だもんね)
0020デフォルトの名無しさん
2005/06/02(木) 21:13:14結局実行される直前にネイティブコードになるわけだしね。
0021デフォルトの名無しさん
2005/06/02(木) 21:22:59そうだな。それに必要とあらば、ngenを使って初めからネイティブに落として
おく手もあるし。これでも環境が変わったら(64bitとか)ちゃんとJIT動かしてくれるらしいし。
0022デフォルトの名無しさん
2005/06/02(木) 22:42:000023デフォルトの名無しさん
2005/06/02(木) 23:13:16まずは旧スレ埋めようぜ
0024デフォルトの名無しさん
2005/06/03(金) 01:14:48任せた
↓
1000 :デフォルトの名無しさん[sage] :2005/06/03(金) 01:04:15
Java!!!
0025デフォルトの名無しさん
2005/06/03(金) 02:01:18ソースの領域同じ、描写先の領域も同じで、
元のイメージの大きさが違うときにやたら速度に差が出るのってなんとかならなりません?
2000x2000の画像の一部分をDrawImageをしたらやったらと遅い。
0026デフォルトの名無しさん
2005/06/03(金) 07:36:130027デフォルトの名無しさん
2005/06/03(金) 11:40:59splitで読むとなんか遅いんですが。。。
002827
2005/06/03(金) 11:55:24C++で作ったものだと10秒
c#だと20秒かかります。(Split使用)
うーむ、、、なんとかC#を勝たせてあげたい。。。orz
0029デフォルトの名無しさん
2005/06/03(金) 12:27:37Splitの代わりに正規表現とか頭から舐め回してSubstringとかどうよ。保証はしないが。
0030デフォルトの名無しさん
2005/06/03(金) 12:41:12Microsoft.VisualBasic.StringsクラスのSplitやSystem.Text.RegularExpression.RegexクラスのSplitもあるぞ
0031デフォルトの名無しさん
2005/06/03(金) 12:48:23003227
2005/06/03(金) 13:29:29filestreamで読んで、Readlineでstringとって、splitしてるです。
正規表現つかうと更におそくなるからつかってないです。
0033デフォルトの名無しさん
2005/06/03(金) 13:53:39String.Emptyと扱うほうが良いのか、ArgumentNullExceptionを投げたほうがいいのか…
メソッドの処理の内容は、文字列が空なら空で何の問題もない処理です。
0034デフォルトの名無しさん
2005/06/03(金) 13:57:34作る側の事情によるが、俺ならString.Emptyとして扱う。
0035デフォルトの名無しさん
2005/06/03(金) 14:03:140036デフォルトの名無しさん
2005/06/03(金) 14:40:46Graphics.InterpolationModeがコストの高い設定に
なってない?
0037デフォルトの名無しさん
2005/06/03(金) 15:22:11コンソールが一瞬表示されます。(そりゃそうですが・・・)
コンソールを表示したくない場合は、どうしたらいいでしょうか。
ご存知の方、よろしくご教授ください。
0038デフォルトの名無しさん
2005/06/03(金) 16:17:270039デフォルトの名無しさん
2005/06/03(金) 17:01:11値をいじって色調を変えようとしているんですが、どうもうまく行きません。
pscanline = bd.Scan0;
stride = bd.Stride;
for (int y = 0; y < h; y++)
for (int x = 0; x < w * 3; x ++) {
Color color = Color.FromArgb(Marshal.ReadInt32(pscanline, x + y * stride));
c = Convert.ToInt32(color.R * rf);
r = (c > 255) ? (byte)255 : Convert.ToByte(c);
c = Convert.ToInt32(color.G * gf);
g = (c > 255) ? (byte)255 : Convert.ToByte(c);
c = Convert.ToInt32(color.B * bf);
b = (c > 255) ? (byte)255 : Convert.ToByte(c);
Marshal.WriteInt32(pscanline, x + y * stride, Color.FromArgb(color.A, r, g, b).ToArgb());
}
bmp.UnlockBits(bd);
こんな感じでやってるんですけど、色ごとの変化がうまく行かず、明るさだけ変化
しているようなおかしな感じなんです。ぱっと見変な所があります?
0040デフォルトの名無しさん
2005/06/03(金) 17:34:59なんでr,g,bがbyteなのかとかFormArgb().ToArgb()ってコスト高そうとか些細な疑問はあるが、
特に問題はなさそうだが。
rf, gf, bfが同じ値とか言わない?
ん、LockBitsするときにPixelFormat.Format32bppArgbでロックしてるよね?
0041デフォルトの名無しさん
2005/06/03(金) 18:03:35レスありがとうございます。
rf、gf、bfを変化させて色調をいじります。例えば赤を強くしたい時にはrfを1.1位に
するとか、そういう感じです。
LockBitsする時はPixelFormat.Format24bppRgbでロックしています。これを
おっしゃる通りPixelFormat.Format32bppArgbでロックしてみたりもしているん
ですが、症状は全く変化無しです。
FromArgb、ToArgbは、Color構造体にコンストラクタがないのでこうやっちゃって
ますが、普通にビット演算でARGB32ビット作り出した方が速いですね。
早速試してみます。
画像は今一種類のみで試してみていますが、もっといろんな画像でテストして
みたいと思います。もしかしたら画像の色分布が悪くて、変化がわかりにくいの
かもしれません。
0042デフォルトの名無しさん
2005/06/03(金) 18:04:33それと、r, g, bもintにしてみます。考えられるのはここら辺ですし。
0043デフォルトの名無しさん
2005/06/03(金) 18:12:51あ、Rgbだったら3バイトずつか。
> for (int x = 0; x < w * 3; x ++) {
だと1ピクセルずつじゃなくて1色ずつになっちゃうぞ。
0044デフォルトの名無しさん
2005/06/03(金) 18:17:51それでした。初歩的なミスでした。
C/C++だと勝手に4バイト飛びにポインタを替えてくれる癖が抜けきって
いませんでした。もっと精進します。ありがとうございました。
0045デフォルトの名無しさん
2005/06/03(金) 18:22:42>>40
わかりもしないなら偉そうに書き込まないでください。
0047デフォルトの名無しさん
2005/06/03(金) 19:07:540048デフォルトの名無しさん
2005/06/03(金) 20:02:29C#だとbyte[] <--> Stringでエンコーディングの変換が発生するから
遅いというのもあるだろう
StreamReader#ReadLine()とか使わずにバイトのまま処理したらどうよ。
行・フィールド分解はunsafe使ってポインタ操作で。
0049デフォルトの名無しさん
2005/06/03(金) 20:04:54そこまで行くと素直にC/C++を使おうと思わない?
0050デフォルトの名無しさん
2005/06/03(金) 20:12:04いや、>>27はなんとかC#に勝たせたいんだそうだから。
俺ならC#使う時点で多少のパフォーマンスは気にしないけどな。
0051デフォルトの名無しさん
2005/06/03(金) 22:32:32どなたか、そのようなサンプルコードをご存知ないでしょうか?
階層化できるデータグリッドというか、グルーピングというか、たためるグリッドというか、
例えば、Outlookのメールのサブジェクトビューのように、「日付:先週」で畳める感じで。
階層の深さは親子ではなく、任意にしたいんです。
左にツリービュー、右にリストコントロールを並べても、ツリーノードの1と2を展開して、
3と4を畳んだ表示とかが不可能です。
http://www.codeproject.com/cs/miscctrl/csharpgridcontrol.asp
の作者が、協力してくれるなら自分が途中まで作ったものを提供すると書いてますが、
自分の技術に自信が・・・
0052デフォルトの名無しさん
2005/06/03(金) 22:52:55商用ならTreeView + DataGridもあるんだけど。
TreeView + DataGridじゃなくてTreeView + ListViewでいいならTreeListViewで検索。
例えば...
The Code Project - TreeListView - C# Controls
http://www.codeproject.com/cs/miscctrl/treelistview.asp
[C#] TREELISTVIEW
http://www.csharpfr.com/code.aspx?ID=27623
0053デフォルトの名無しさん
2005/06/03(金) 22:53:19classの配列を使用したいのですが、どうも上手くできません。
01:public class test
02:{
03:public int[,] A;
04:public test()
05:{
06:A = new int[25, 25];
07:}
08:}
09:
10:public test[] a = new test[10];
11:
12:private void Form1_Load(object sender, EventArgs e)
13:{
14:a[0].A[0, 0] = 0;
15:}
10行目を
public test a = new test();
14行目を
a.A[0, 0] = 0;
として、配列じゃない状態にしたら正常に動いたので、10行目に問題があると思うのですが、どうすれば正常に動くのかが分かりません。
どうすれば正常に動くのか、ご教授いただけると有難いです;
0054デフォルトの名無しさん
2005/06/03(金) 22:59:00この時点ではtest[]オブジェクトを作っただけで、それぞれの中身はnull。
0055最凶VB厨房
2005/06/03(金) 23:00:10{
test[i]=new test();
}
0056デフォルトの名無しさん
2005/06/03(金) 23:26:140057デフォルトの名無しさん
2005/06/03(金) 23:33:40元C++ユーザなのかもしれん
多分違うけど
0058デフォルトの名無しさん
2005/06/04(土) 00:50:17C++はまだ許せるとして、DelphiはPascalベースなのでちょっと考えると
綺麗そうに思えるが、実際はあちこちつぎはぎだらけの拡張で汚い。
0059デフォルトの名無しさん
2005/06/04(土) 01:28:01006053
2005/06/04(土) 01:36:55解決しました。
お陰様で助かりました、
どうもありがとうございましたm(_ _)m
0061デフォルトの名無しさん
2005/06/04(土) 08:05:39後出しした方が洗練されているのは当然
ということはDのほうが上の可能性もあるのか
0062デフォルトの名無しさん
2005/06/04(土) 09:47:460063デフォルトの名無しさん
2005/06/04(土) 09:57:340064デフォルトの名無しさん
2005/06/04(土) 14:42:22Microsoftにヘッドハントされたんだっけ?使い勝手がDelphiそっくりなんですけど。
0065デフォルトの名無しさん
2005/06/04(土) 16:18:21IDEはわかんねえな
0066デフォルトの名無しさん
2005/06/04(土) 16:32:30.NETに対応したDelphi8が出たときの紹介記事を読む限り、IDEの操作性がVSに近づいたとかそう言う論調が多かったし。
0067デフォルトの名無しさん
2005/06/04(土) 16:47:50VB6のコントロールをVS.NETで使用するのはライセンス上問題ありますか?
0068デフォルトの名無しさん
2005/06/04(土) 17:35:24別クラスに存在する定数
const string PATH = "src\\data"
と、パラメータとして渡される
string path1
(例えば、string path1 = @"src\\data" verbatim文字列なんですが\\の文字列が渡されます)
の比較をString.Compareで行い、等しいかどうかをチェックするメソッドを作成しています。しかし、比較がうまく行えずちょっと悩んでいます。
メソッド(path1){
if (String.Compare(path1, 別クラス.PATH) == 0)
}
で比較すると、PATHがnull値になり常に偽になってしまいます。(なんでnullになるのかもよく理解できてないのですが)
メソッド(path1){
string compPath = 別クラス.PATH;
if (String.Compare(path1, compPath) == 0)
}
とか
メソッド(path1){
string compPath = @別クラス.PATH;
if (String.Compare(path1, compPath) == 0)
}
だとうまくいきそうなのですがcompPathの中身が@"src\data"になってしまい、うまく比較できません。
この場合、どのようにしたらいいのでしょうか。定数を
const string PATH = @"src\\data"
にするとか、そもそもパラメータを
string path1 = @"src\data"
にできればいいんでしょうが、他のメソッドで大量に使用しており変更できそうにありません。
verbatim文字列のパラメータ
string path1 = @"src\\data
を
"src\data"
に変換することってできないんでしょうか。
0069デフォルトの名無しさん
2005/06/04(土) 17:41:51RADという物がメジャーになったのがVBから。
それを真似たのがDelphi。
0070デフォルトの名無しさん
2005/06/04(土) 17:47:43いいたいことはサッパリわからんが置換すれば?
>>61
でもjavaより汚い気がする。
デストラクタ+ファイナライザ+IDisposeとか
プロパティとか例外処理とか色々。
0071デフォルトの名無しさん
2005/06/04(土) 17:50:26俺は逆だなー。
基本的にすべてobjectの派生として通してるところとか。
0072デフォルトの名無しさん
2005/06/04(土) 17:53:19やっぱり状態と動作は区別すべきだと思うし。
0074デフォルトの名無しさん
2005/06/04(土) 17:58:00デストラクタとファイナライザって同じでは?
IDisposeの管理は確かにめんどくさいけど。
0075デフォルトの名無しさん
2005/06/04(土) 17:58:24もうちょっと現状の整理を
PATH が null になる状況は端から見てありえない
>>72
プロパティは、java では別々に用意する必要がある setter と getter を纏めてある以上、
無駄にメソッドが増えなくて良いかもね
>>73
置換は String.Replace だけど、null はそもそも置換できないよな
0076デフォルトの名無しさん
2005/06/04(土) 17:59:14java でも、ファイル操作とかは close しなくちゃいけないから、むしろ IDispose でまとめて using した方が楽かと
0077デフォルトの名無しさん
2005/06/04(土) 18:13:33JavaがC++使いに受け入れられない最大の理由がそこだからね
0078デフォルトの名無しさん
2005/06/04(土) 18:31:48プロパティはCLR的にはただsetterとgetterをまとめた
という程度の意味しかもたないけど、
クラスライブラリ的にはコンポーネントの基本要素としての性質
があって、System.ComponentModelとかTypeDescriptorあたりのことが
分かってくると、無駄にメソッドが増えないとかそういうレベルの恩恵ではない
と思いますよ。
MSとかがC#のことを「コンポーネント指向言語」ってよんでる理由が
この辺にあるんだろうと思ってますけど。
IDisposableも確定的デストラクションのギミックとしてはusingとかで
最低限の使い勝手にはなってるだろうし、2.0での拡張とか見てると
なかなか面白い発展性を持ってるです
0079デフォルトの名無しさん
2005/06/04(土) 18:40:06さらにIDisposeもあるし。
例外処理もメソッドの宣言みても何を投げるかわかんないから
ついつい全部キャッチするようなの書いちゃったり。
プロパティはアクセス制限がセッタとゲッタで分けられないのが不満なのと
パブリック変数かメソッド呼び出しなのかハッキリしないのが。
0080デフォルトの名無しさん
2005/06/04(土) 18:44:08??
デストラクタとファイナライザは同一のものだし、
こいつらは何時実行されるかわかんないから IDispose があるんじゃ?
throws は納得
0081デフォルトの名無しさん
2005/06/04(土) 18:47:20> プロパティはアクセス制限がセッタとゲッタで分けられないのが不満なのと
.NET 2.0/C#2.0で分けられるようになった。
> パブリック変数かメソッド呼び出しなのかハッキリしないのが。
まさにそのように隠蔽するための物なんだが……。
throwsは欲しいねぇ。
0082デフォルトの名無しさん
2005/06/04(土) 18:55:36>さらにIDisposeもあるし。
??ないよ。「ファイナライザはデストラクタ構文によって書かれる」
だけだし、IDisposableがないと、確定的デストラクションは
どうするのさ?
>例外処理もメソッドの宣言みても何を投げるかわかんないから
>ついつい全部キャッチするようなの書いちゃったり。
これは基本的には同意なんだが、例外処理ではjavaとは
ちょっと発想というか考え方が違うので、その辺のことを書いた
本とか読んでみるといいよ。
>プロパティはアクセス制限がセッタとゲッタで分けられないのが不満なのと
2.0で解決済み
>パブリック変数かメソッド呼び出しなのかハッキリしないのが。
そもそもパブリック変数基本的に禁止
0083デフォルトの名無しさん
2005/06/04(土) 18:55:450084デフォルトの名無しさん
2005/06/04(土) 18:57:27javaの進化が遅すぎるのかC#が速すぎるのか知らんが、
すげぇよ。
0085デフォルトの名無しさん
2005/06/04(土) 18:58:16> パブリック変数かメソッド呼び出しなのかハッキリしないのが。
パブリック変数かメソッド呼び出しかはっきりしていないと
利用できないような設計ならば、
きっと設計が間違っている。
0086デフォルトの名無しさん
2005/06/04(土) 19:22:28別の機能というか構文が2通りあるでしょ。
>確定的デストラクション
これがC++だとデストラクタ。javaだとfinallyではっきりしてるけど
C#だとひとつじゃないから機能を詰め込みすぎな気がする
>>85
他人のソース見たときね。
javaが出て10年後ってこと考えると
言語仕様が練れてないと思わない?
個人的にいいなと思った機能はオーバライドを明示する必要があるってとこだけだ。
0087デフォルトの名無しさん
2005/06/04(土) 19:30:52> 他人のソース見たときね。
意味わかんね。
0088デフォルトの名無しさん
2005/06/04(土) 19:31:49>別の機能というか構文が2通りあるでしょ。
C# では
~ClassName() {}
の一択だから、構文は1つだけ
>これがC++だとデストラクタ。javaだとfinallyではっきりしてるけど
finally はデストラクタではない
0089デフォルトの名無しさん
2005/06/04(土) 19:37:41デストラクタはコンパイル時にファイナライザに置換され、”最後に基本クラスのファイナライザを呼び出すコードが付加される”
ファイナライザを明示的にオーバーライドしたときはそういうことは行われない。
0090デフォルトの名無しさん
2005/06/04(土) 19:40:42C# では、Object.Finalize を独自にオーバーライドすることは出来ない
デストラクタ構文を使う
0091デフォルトの名無しさん
2005/06/04(土) 20:00:43すんません。人の作ったクラス使うとき。
>>88
>finally はデストラクタではない
すんません。finallyに終了処理を書く
あと構造体も有るの、ややこしくない?
0092デフォルトの名無しさん
2005/06/04(土) 20:03:350093デフォルトの名無しさん
2005/06/04(土) 20:07:23> すんません。人の作ったクラス使うとき。
に、設計が間違っているのか?
話がつながっていなくないか?
> あと構造体も有るの、ややこしくない?
使う必要がなければ使わなくてもなんとかなるよ。
代入文が、構造体とクラスで振る舞いが違うが、
変数名、クラス(構造体)名を見ただけではどっちかわからないのが
C#の問題かなと漏れは思った
逆に変数名で構造体とクラスが判別できても
気持ち悪いが。
0094デフォルトの名無しさん
2005/06/04(土) 20:08:16後で結局Genericsとか追加する羽目になっとるが
C#のプロパティはまあ、MSのCOMの経験に基づいてるんじゃないかな
C++でプロパティが使えないのはやはり不便だと
まあVC++の場合はプロパティライクな記法が使えるけどな
0095デフォルトの名無しさん
2005/06/04(土) 20:10:05だからな、C++が確定的デストラクタなのはわかってるわけよ。
そうじゃなく、C#はGCのために確定的デストラクションは出来ない
から「デストラクタ構文はファイナライザ」になってるわけだ。んで、
>>88-90 のようにファイナライザの構文は一つだろ
っていうかJavaだって確定的デストラクタのない状況は
GCつかってるんだから一緒だろ。
必要性を認めてIDisposableとusing、Containerを用意してるC#とどっちがましだよ
んで、パブリック変数は「基本的に禁止」なんだ。
「プライベートなネストクラス」とかなら「許される」程度だ。
>個人的にいいなと思った機能はオーバライドを明示する必要があるってとこだけだ。
こんなこといってる段階でC#は聞きかじった程度の知識しかない
と思ってしまうよ
0096デフォルトの名無しさん
2005/06/04(土) 20:11:12> 使う必要がなければ使わなくてもなんとかなるよ。
この、「使わないものには害をこうむらない」というNo overhead ruleは
C++の理念だけど
それを積み上げてああバカでかくなったことを思うとねえ。
C#には言語設計思想のポリシーがないというと言い過ぎだが、
要するに実用よりなんだと思う。
0097デフォルトの名無しさん
2005/06/04(土) 20:15:32,NETみたいに「型システム」に組み込まれてるのと
どっちがきれいよ?.NETのやり方だと「すべてオブジェクト」を実現してるぜ
Javaは固定的だから拡張性もないわ、オブジェクトじゃないから
オブジェクトとしてすら扱えないが(最近中途半端にパクったけどな)。
0098デフォルトの名無しさん
2005/06/04(土) 20:17:370099デフォルトの名無しさん
2005/06/04(土) 20:17:56javaは理想を追い求める言語で、
C#は「夢じゃ飯は喰えねーよ」と言わんばかり
0100デフォルトの名無しさん
2005/06/04(土) 20:19:29いかにC#が便利かどうかがわかったよ。
0101デフォルトの名無しさん
2005/06/04(土) 20:21:06まあ今んとこはJava屋のが飯食えるだろうけどな(w
0102デフォルトの名無しさん
2005/06/04(土) 20:21:270103デフォルトの名無しさん
2005/06/04(土) 20:25:19ちなみにJavaだと
String.valueOf( x );
になる。
0104デフォルトの名無しさん
2005/06/04(土) 20:26:35その点 Java はシンプルで良いかも知れない
まあ、C# は実際使いやすいんだけど
ところで >>82 さん
C# と java の例外処理の概念について書かれた本ってなんスか?
調べて出てこんかった……
0105デフォルトの名無しさん
2005/06/04(土) 20:26:59>>個人的にいいなと思った機能はオーバライドを明示する必要があるってとこだけだ。
>こんなこといってる段階でC#は聞きかじった程度の知識しかない
じゃあ言語仕様としてjavaより優れてる点は何だと思う?
0106デフォルトの名無しさん
2005/06/04(土) 20:27:08いずれ滅びる。
0107デフォルトの名無しさん
2005/06/04(土) 20:28:260108デフォルトの名無しさん
2005/06/04(土) 20:29:20struct と enum をサポートしている点
逆に interface 内に定数を入れられないのがいやん
0109デフォルトの名無しさん
2005/06/04(土) 20:31:08> まあ、オブジェクトなのに値型の ValueType だとか、
ValueTypeはクラスだぞ、と混ぜっ返してみるテスト。
//Managed C++でひっかかったんだこれ。
0110104
2005/06/04(土) 20:35:28ん?
Managed C++ での __gc class または __gc struct は C# の class、
Managed C++ での __value class または __value struct は C# の struct
だと思ってたけど違うの?
0111デフォルトの名無しさん
2005/06/04(土) 20:35:29しらなかった。
>>95出てこないなあ。
0112デフォルトの名無しさん
2005/06/04(土) 20:39:17あ、ごめん。ValueType は確かに C# のクラスだけど、値型です
0113デフォルトの名無しさん
2005/06/04(土) 20:40:57メインなのはMSからでている例外のガイドラインあたり
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconerrorraisinghandlingguidelines.asp
副次的には
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=21003&forum=7
こことか
「.NET エンタープライズ Web アプリケーション大全」あたりでも
触れてた(と思う)とか、何でthrowsがないかとかもMSの誰かが書いてたりとか
他にも情報はあるはず。
0114デフォルトの名無しさん
2005/06/04(土) 20:42:380115デフォルトの名無しさん
2005/06/04(土) 20:43:26そうじゃなくて、全ての構造体の基底型であるValueTypeは構造体じゃないクラスなんだ。あとEnumとかも。
考えてみれば当然なんだけど。構造体は継承を禁止してるから。
だからMC++だと全ての列挙体を引数に取るようなメソッドへ渡すときにはbox()を明示しないといけなかった。
C#だと暗黙にボクシングされるから気にならないが。
0117デフォルトの名無しさん
2005/06/04(土) 20:47:54>オブジェクトなのに値型の ValueType
これのことじゃないか
0120デフォルトの名無しさん
2005/06/04(土) 20:57:02いまいちjavaとの違いが理解できないけど
>例外をスローすることなく正常に処理を続行できるかどうかを確認するためのメソッドを用意する必要があります。
チェックしない者がダメで、つまりjavaでいうRuntimeExcption扱いですよ。
なのでthrowsは必要ありませんってことかな?
強引な解釈だけど。
0121デフォルトの名無しさん
2005/06/04(土) 20:57:13「System.Drawing.Graphic」 よりも 「java.awt.Graphics」 の方が優れた設計だと思ったんだった。
0122デフォルトの名無しさん
2005/06/04(土) 20:57:480123デフォルトの名無しさん
2005/06/04(土) 20:58:41なかなか面白い議論をしているじゃないか!
0124デフォルトの名無しさん
2005/06/04(土) 21:01:13「C# vs Java」
ttp://pc8.2ch.net/test/read.cgi/tech/1068377418/l50
012595
2005/06/04(土) 21:09:08Property, Event, CustomAttribute、これらはすべてコンポーネントのため
にあるんだよな。
Property, Eventがコンポーネントの基本要素。
付随情報(Browsableとかな)のためのAttribute
CLRがこれらを許容し、メタデータは自己記述だ。そのためのCLR。
そして、System.ComponentModelに実装されているコンポーネントアクセス
インターフェイス。
コンポーネントの利点としては再利用性を上げる人も多いんだが、DataBindingがらみで
の面白い利点とか。つまり、現状のオブジェクト指向の問題点として、
状態管理に依存しているために状態が爆発的に増えたときの複雑さが
どうしてもでてくる。それに対しての一種の解決策だな。状態をBindingというもので
Staticに連結し、管理するべき状態を減らせたり、XAMLのような静的定義
言語を用意してみたり。
ただ、この辺は言語仕様よりも広い話だ、と思うだろう。
いいたいのは、そういう思想が言語仕様から考えて作られている点だ。
どちらかといえば、.NETはCOMの後継っていうのは、ものすごく的確なんじゃないかって思う。
0126デフォルトの名無しさん
2005/06/04(土) 21:18:00何でC#にchecked exceptionをつけなかったかについては↓参照
http://www.artima.com/intv/handcuffs.html
C#のチーフアーキテクトが理由を語ってるよ。英文だけど。
大体以下のような理由のようだ。
1) メソッドA、もしくはそこから直接間接に呼び出されるコードの実装変更により
throwされる例外が増えると、checked exceptionがあった場合には、
メソッドAのクライアントはコードの書き換えを要求されてしまう。
2) 比較的大規模なコードでは、それだけハンドリングされる例外の種類が多くなり
最終的には皆 throws Exception とだけ書くようになってしまう。それでは
まったく意味が無い
0127デフォルトの名無しさん
2005/06/04(土) 21:20:540128デフォルトの名無しさん
2005/06/04(土) 21:23:36ありがとです
>メソッドAのクライアントはコードの書き換えを要求されてしまう
要求されたら素直に従っとかないと、肝心の例外を逃しそうな気はする
>最終的には皆 throws Exception とだけ書くようになってしまう。それではまったく意味が無い
意味があるかどうかは使う側が決めることだよなぁ……
設計論になるけど、投げられる例外が多いのならば俺はそれらを一まとめにした基底クラス作ってそれを捕まえる
……っていうか、完全に 『好み』 の問題のような希ガス
0129デフォルトの名無しさん
2005/06/04(土) 21:23:52Why doesn't C# have exception specifications?
http://www.gotdotnet.com/team/csharp/learn/columns/ask.aspx#exception
0130デフォルトの名無しさん
2005/06/04(土) 21:26:000131デフォルトの名無しさん
2005/06/04(土) 21:26:29>この辺は言語仕様よりも広い話だ、と思うだろう。
思う。
>126
例外クラスの継承関係をきちんとすれば対応できると思うんだけどな。
javaのソースみても
catch(Exception){}
ってのが多いから皆必要としてないのかな?
0133デフォルトの名無しさん
2005/06/04(土) 21:31:14理念で言えば例外はインタフェースの一部であり、それをコンパイル時に
チェックするchecked exceptionは、素晴らしいものである
ってのはC#のデザイナも認めている
どっちかっつーとC#の場合は実を取った印象
0134デフォルトの名無しさん
2005/06/04(土) 21:37:36これもコンパイルエラーにすれば問題ない。
0135デフォルトの名無しさん
2005/06/04(土) 21:49:11参照型を返すメソッドやプロパティにおいて、返り値がnullの可能性ってのはあっても良いんでしょうか?
あるいは、ドキュメントに明記しない場合は、nullは返らないことが前提なんでしょうか。
0136デフォルトの名無しさん
2005/06/04(土) 21:50:140137135
2005/06/04(土) 21:51:320138デフォルトの名無しさん
2005/06/04(土) 21:54:07するに越したことはない。
ただ、配列を返す処理では、ほとんどの場合は
Lengthが0の配列を期待してnullが返ることはまず考えない。
俺の場合。
0139デフォルトの名無しさん
2005/06/04(土) 21:59:19まぁ広いんだけど。そういう広い話で
プロパティとイベントとカスタムアトリビュートがないと
こんなこと出来ないよね?(=プロパティとイベントと
カスタムアトリビュートの利点)
メソッドの名前規則
リスナーインターフェイス
とかって手で実現するぐらいならプロパティ、イベントを特殊化して、
「言語仕様として」用意したほうがきれいだよねって話。
0140デフォルトの名無しさん
2005/06/04(土) 22:03:38同感
ただ、全てのものを言語内に取り込むと、逆に煩雑になってしまい混乱を招く原因にもなりかねないかと
個人的には 「java はシンプルで好き」 「C# は扱いやすくて好き」 が決定稿なんだけど
0141WhoisにアクセスするDLLを作りたいと思っています
2005/06/04(土) 22:04:44http://www.mentalis.org/
にあるソースファイルを改造しようと思っています。
シンプルなプログラムなのですが、当然日本語は文字化けしてしまうので
受信したデーターを日本語にデコードしてやらなくてはいけません。
一応、S-JISやEUC、UTF8などを試したのですが、
未熟故に方法が誤っているのか、完全に日本語が文字化けしてしまいます。
.orgなどは問題なく使用できるのですが、co.jpなどが使えないと致命的です。
漠然とした質問で申し訳ないのですが、ご教示お願いいたします。
0142WhoisにアクセスするDLLを作りたいと思っています
2005/06/04(土) 22:06:12http://cdrtest.hp.infoseek.co.jp/cgi-bin/snup/src/VisualVision0073.gif
こちらです(わざわざソースをDLして貰うのは面倒ですし。。。)
0143デフォルトの名無しさん
2005/06/04(土) 22:09:44うん、JavaはSimplicity、C#はSimplexityってことで (先のヘジたんのインタビュー参照)
0144デフォルトの名無しさん
2005/06/04(土) 22:25:34COMをC++で作るとVBのためにIDispatchから派生させたりVARIANTでリターンしたり文字列はSysAllocでかえしたりとか
色々面倒だったけどその辺が楽になるなあ
0145デフォルトの名無しさん
2005/06/04(土) 23:01:59同意。
だからC#は十分吟味して取り込んでいっているんだろうね。
っていうかヘジたんの言語設計のセンスは改めて天才的だと思う・・・
いろんな技術をまとめるのうまいよね、この人。
ただ、JavaのSimplicityは以前は信じてました。
でも、あのTigerは…いや、10年の歴史を持つ
言語ですから、仕方ないんでしょうけど。
>>144
COMは大変だった…。
もうなんていうか行き当たりばったりばかりだし。
0146デフォルトの名無しさん
2005/06/04(土) 23:07:460147デフォルトの名無しさん
2005/06/04(土) 23:14:510148デフォルトの名無しさん
2005/06/04(土) 23:59:55いや素直に.cs揚げてくれた方が楽だから。
で、
ttp://www.tcat.ne.jp/~nashorn/terminal/whois.html
によるとエンコーディングはiso-2022-jpらしいけど。
ついでに1024バイトごとに文字列化してるようだけど、もし1024バイト目に2バイト文字の1バイト目が来たらどうする気?
0149デフォルトの名無しさん
2005/06/05(日) 00:14:08hoge.exeの中での相対優先度ですよね?
タスクマネージャのプロセスタブで、それぞれのプロセスに優先度をつけれますが、
こっちの優先度をリアルタイム等に指定したいときはどうすればいいんでしょうか?
0150デフォルトの名無しさん
2005/06/05(日) 00:26:15>>148
ISO-2022-JPはSystem.Text.Encodingでサポートされてるみたいだから
何の問題もなさげ
素直にEncoding.GetEncoding("ISO-2022-JP")でよし
半端バイトがある場合、Decoderを使えみたいにMSDNにはあるが
Decoderでは、結果としてUnicode文字が何文字生成されたかは分かるが
どのバイトまで変換できたか分からない困ったインタフェースのようだから、
行読みするのが楽だろう。
0151>>141-142
2005/06/05(日) 00:43:060152デフォルトの名無しさん
2005/06/05(日) 00:57:320153デフォルトの名無しさん
2005/06/05(日) 00:57:45Process.PriorityClass
0154デフォルトの名無しさん
2005/06/05(日) 01:00:10> 行読みするのが楽だろう。
Socket.ReceiveはStreamReaderにつっこめないので、
読んだのをMemoryStreamに溜めてからGetStringした方が楽な希ガス
0156デフォルトの名無しさん
2005/06/05(日) 01:12:100157デフォルトの名無しさん
2005/06/05(日) 01:44:41あ、そのやりかた結構便利だな
俺はSocket行読みするときは専用のバッファクラス自前で作ってたよ
それはそれで別に単純な実装だから大した話じゃないんだけどさ
0158デフォルトの名無しさん
2005/06/05(日) 01:48:00みたいにできんのか?
0159デフォルトの名無しさん
2005/06/05(日) 01:52:53よっしゃ、私が整理してあげよう。
文字列A="src\\data"
に対して、
文字列B=@"src\\data"
の場合は「AとBは等しい」
文字列B≠@"src\\data"
の場合は「AとBは等しくない」
と判定できるロジックをc#で作りたい、ということだな。
0160デフォルトの名無しさん
2005/06/05(日) 01:57:52Socketはストリーム指向以外のネットワークも扱うので、Streamに関するメソッド/プロパティは存在しない。
>>159
ていうかどっちかに統一した方が分かりやすくないか。どうせただのシンタックスシュガーなんだし。
ということで、
"src\\data"と"src\\\\data"が等しいと判断できれば良いと言うことだよな?
後者の\\\\を\\に置換すれば済む話だな。
0162>>141-142
2005/06/05(日) 03:31:31初歩的なミス・・・情けないです。
本当に申し訳ありません!&ありがとうございます!
0163デフォルトの名無しさん
2005/06/05(日) 03:32:55つくれますか?
インプロセスサーバは問題なくつくれるんですが、EXEプロジェクトだと
VSの「COM相互運用機能の登録」というオプションが無効になっていて
選択ができないもので、regasmで手動で登録してみたんですがうまく
いきません。。。
0164>>141-142
2005/06/05(日) 03:36:44¥rを¥r¥nに置換したりいろいろしたのですが・・・
どうも無理なようです。
もともと改行がはいっていないデータなんでしょうか??
0165デフォルトの名無しさん
2005/06/05(日) 03:50:31いやいや、簡単に納得しちゃって。
まず置換をどうするのかが問題、でしょ。
そこで、Stringクラスの何のメソッド使おうか、と。
0166デフォルトの名無しさん
2005/06/05(日) 04:00:37exe、サービスは知らんけどCOM+はあるよね
0167デフォルトの名無しさん
2005/06/05(日) 04:06:40それ以前にそんな処理が本当に必要なのかという問題が
0168デフォルトの名無しさん
2005/06/05(日) 05:36:38>>159がまとめてくれたが、文字列Bの\\はなんで\じゃないのかな。
そんなこといっても始まらないのかもしれないが
そもそも文字列の頭に@をつけると、エスケープシーケンスが
無効化されるんだよね?
\\じゃなくていいと思うんだ。
まぁそれで渡されるならしょうがないけど。
0169デフォルトの名無しさん
2005/06/05(日) 08:00:52Flashで作られたボタンを実行することは可能でしょうか。
例)
Flashボタン
↓
処理を行うURL ←ここにRequestしたい
↓
処理後のURL
0170デフォルトの名無しさん
2005/06/05(日) 08:55:38うまくいきません。
new OleDbConnection((string)str)
で、strをどうすればいいのかご教授ください。
とりあえず、
MyOdbcなるものもインストールしました。
また、コネクションで使用するクラスは
SqlConnectionではなく
OleDbConnectionらしいという程度の知識を何とか得てます。
ODBCデータソースアドミニストレータで何かするらしいというのも
わかっています。
おながいします。
0171デフォルトの名無しさん
2005/06/05(日) 09:35:530172デフォルトの名無しさん
2005/06/05(日) 10:12:06> regasmで手動で登録してみたんですがうまくいきません。。。
具体的に何がどううまくいかないの?
そもそも.exeをCOMに登録したいだけなのか、本当にアウトプロセスで実行したいのか。
後者は無理な気がするが可能なのかな。
0173デフォルトの名無しさん
2005/06/05(日) 12:22:09regasmで登録すると、レジストリのクラスルートには登録されて
いるようなんですが、ためしにwshなんかでCreateObjectしてみると
「ファイルが見つかりません」というエラーがでてしまいます。
(スクリプトファイルはアセンブリと同じディレクトリに配置してあります。)
regasmで/unregisterすると、「オブジェクトを作成できません」というエラーに
なるので、レジストリへの登録自体は一応きちんと行われているようなんですが…。
インプロセスサーバ(DLL)の場合、VS IDEで「COM相互運用機能の登録」にチェックつけて
コンパイルするとwshからでも何の問題もなく呼び出せています。
EXEプロジェクトだと、このオプションが無効になっていて使えないのでひょっとしてDLL形式しか
COMに公開できないのかなと思ったしだい。
特にアウトプロセスでなくてもいいのですが、EXEとして単独でも実行しかつWSHなどから
も呼び出せるものを作りたかったんですが…。
0174デフォルトの名無しさん
2005/06/05(日) 12:26:24> (スクリプトファイルはアセンブリと同じディレクトリに配置してあります。)
アセンブリを配置するのは、COMを呼び出す"実行ファイル"と同じ位置またはGAC(グローバルアセンブリキャッシュ)。
WSHを動かす実行ファイルは.vbs/.jsじゃなくて、cscript.exe/wscript.exe。
VSで登録するときはアセンブリをGACに登録するようにしてるからいける。
0175デフォルトの名無しさん
2005/06/05(日) 12:49:15> アセンブリを配置するのは、COMを呼び出す"実行ファイル"と同じ位置またはGAC(グローバルアセンブリキャッシュ)。
> WSHを動かす実行ファイルは.vbs/.jsじゃなくて、cscript.exe/wscript.exe。
> VSで登録するときはアセンブリをGACに登録するようにしてるからいける。
おおお!ほんとだ!それに気がつきませんでした。
たすかりますた。
DLLプロジェクトで、VS IDEからCOMInterOPの登録をさせると、
WSHファイルと同じところにアセンブリを配置すれば動いていたので
気がつきませんでした。 VS IDEは特にGACに登録しているようには
みえないのですが、どういう仕組みで動いているんだろう…。
0176デフォルトの名無しさん
2005/06/05(日) 13:52:47そのインプロセスサーバーを VB6 でラップして ActiveX EXE にしろ。すぐできる。
0177デフォルトの名無しさん
2005/06/05(日) 13:59:51> DLLプロジェクトで、VS IDEからCOMInterOPの登録をさせると、
> WSHファイルと同じところにアセンブリを配置すれば動いていたので
> 気がつきませんでした。 VS IDEは特にGACに登録しているようには
> みえないのですが、どういう仕組みで動いているんだろう…。
ありゃ本当だ、いい加減なこといっちまった。
regasm.exeのオプションに/codebaseってのがあって、これにアセンブリのフルパスを指定すれば直接参照できるようになる。
ただしsn.exeを使ってアセンブリに厳密名を与えておかないとフルパス指定はできない。
ということのようだ。
0178デフォルトの名無しさん
2005/06/06(月) 00:05:23HT.Add( "ア", null );
HT.Add( "イ", null );
HT.Add( "ウ", null );
HT.Add( "エ", null );
HT.Add( "オ", null );
// 以下50音続く
上のように50音がKeyになった連想配列があります。
これをforeachで50音順に値を取得していきたいのですが、
HashtableをKeyでソートするにはどうすればよいでしょうか?
0179デフォルトの名無しさん
2005/06/06(月) 00:06:340180デフォルトの名無しさん
2005/06/06(月) 00:47:530181デフォルトの名無しさん
2005/06/06(月) 02:21:100182デフォルトの名無しさん
2005/06/06(月) 03:08:450183デフォルトの名無しさん
2005/06/06(月) 04:18:420184デフォルトの名無しさん
2005/06/06(月) 04:58:170185デフォルトの名無しさん
2005/06/06(月) 05:06:000186デフォルトの名無しさん
2005/06/06(月) 07:26:53番兵(?)使うとか。
enum TEST{ A, B, C, NUM }
Hoge[] hoge = new Hoge[TEST.NUM];
列挙要素の値を個別に設定してる場合は利用しにくいけど。
0187デフォルトの名無しさん
2005/06/06(月) 13:23:20なぜだろう・・
0188デフォルトの名無しさん
2005/06/06(月) 13:47:120189デフォルトの名無しさん
2005/06/06(月) 21:08:390190デフォルトの名無しさん
2005/06/06(月) 21:15:140191デフォルトの名無しさん
2005/06/06(月) 21:43:210192デフォルトの名無しさん
2005/06/06(月) 22:12:140193デフォルトの名無しさん
2005/06/07(火) 13:30:150194デフォルトの名無しさん
2005/06/07(火) 16:32:502個以上の値を入れたいのですが、配列の大きさが1に固定されていて、
2個以上代入できません。
どうすれば2個以上代入できますか?
0195194
2005/06/07(火) 16:37:16Blendオブジェクトをnew Blend(n);で初期化してからそのFactors、Positions
プロパティにそれぞれ代入したものをLinearGradientBrush.Blendに入れたら
うまく行きました。
C#のこの辺の感覚がうまくつかめない・・・・慣れるまで頑張ります。
0196デフォルトの名無しさん
2005/06/07(火) 21:43:220197デフォルトの名無しさん
2005/06/07(火) 23:48:34Win32で直接GDI+いじくってる奴は少ないのでは?
ぐぐっても少ない。
0198デフォルトの名無しさん
2005/06/08(水) 00:17:00ClickやKeyPressされたときに実行したい処理を記述する簡単な方法はないでしょうか?
UserControlのControlsに対して全てClickイベントを記述して
ControlAddedでClickイベントを記述するようなイベントを記述する方法を思いついたのですが、
なんだか周りくどいような気がしてるので
0199デフォルトの名無しさん
2005/06/08(水) 00:29:14ライブラリ、.NET Framework/GDI+の都合であってC#とは直接関係ないということでしょ。
>>198
簡単なのはないな。
コントロールをAddし終わった後Controlsをforeachで回して.GetType().GetEventでEventInfo取得してAddEventHandlerで追加していくか。
0200デフォルトの名無しさん
2005/06/08(水) 01:38:57奥の手。
IMessageFilterをUserControlに実装して、コンストラクタでApplication.AddMessageFilterで追加。
んで、PreFilterMessageで
Control ctrl = Control.FromHandle(m.HWnd);
if(ctrl!=null && this.Contains(ctrl)) {
...
}
return false;
if文自信ない。難点はMessageを直でいじらないといけないとこ。
実はこれで色々出来たりする便利な方法なのにあまり知られていないのは秘密。
それなりにWin32とWinFormの知識がいるので素人には(ry
0201デフォルトの名無しさん
2005/06/08(水) 09:37:480202デフォルトの名無しさん
2005/06/08(水) 09:44:50メッセージループ上書きできたり
昔のAPIがモロだね。
MFCとあんまかわらんな。
0203デフォルトの名無しさん
2005/06/08(水) 10:16:34リンク/その1の内容じゃ足りない?
0204デフォルトの名無しさん
2005/06/08(水) 10:41:46Enum.GetValues(列挙型名)とかGetNames(列挙型名)で要素の配列が取れますよ。
Enumは先頭大文字で。
0205デフォルトの名無しさん
2005/06/08(水) 10:43:49>>183
0206デフォルトの名無しさん
2005/06/08(水) 11:25:26開発環境にVisual Studio .Net 2003を使っているのですが
他のPCで作業をする際に
今まで使っていたPCの設定(ボタンの位置とかウインドウの位置とか)を
移行する方法はないですか?
0207デフォルトの名無しさん
2005/06/08(水) 11:52:22%APPDATA%\Microsoft\VisualStudio\の中を漁れ。
0208デフォルトの名無しさん
2005/06/08(水) 12:24:10個人ページをもっとあげてくべきかなと。
初心者ってのはMSDNとかそういったもので解決できない人が多いでしょ。
まあそれが初心者なんだけど。
VB.NETは初心者が集まる傾向にあるから結構充実してる。
http://pc8.2ch.net/test/read.cgi/tech/1114217190/5-8n
で見ると、VB.NETだけじゃなくて.NET全般(死語だけど)つまり、C#とかも扱ってるサイトが多い。
こういったサイトももっと増やすといいかも。
0209デフォルトの名無しさん
2005/06/08(水) 12:31:59初心者にはふらっとスレがあるじゃないか……
0210デフォルトの名無しさん
2005/06/08(水) 13:26:38Wikiなんだから言いだしっぺの法則で
0211デフォルトの名無しさん
2005/06/08(水) 16:10:18すぐ慣れた。吐くマネージコードはどちらも同じようなもんだろうけど。
0212デフォルトの名無しさん
2005/06/08(水) 16:40:18VBからC#は戸惑うはず
0213デフォルトの名無しさん
2005/06/08(水) 20:34:10とあるサイトの掲示板で、VB.netをやったときにgetとsetで型の違うプロパティを
書いて質問してる書き込みを見たときに小一時間混乱したのを思い出した。
0214デフォルトの名無しさん
2005/06/08(水) 20:41:57詳しく
インターフェイスを実装するのに同じメンバ名を使わないでも良いと知ったのは衝撃だった。
代わりに明示的実装ができないが。
0215デフォルトの名無しさん
2005/06/08(水) 23:24:14すまん、覚え違いだった。
正しくはC#で使おうとするとメソッド扱いになるプロパティ。
Public Property Hoge(ByVal i As Integer) As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
0216デフォルトの名無しさん
2005/06/09(木) 01:11:13C#で引数付きプロパティが使えないのはちょっと残念。
0217デフォルトの名無しさん
2005/06/09(木) 12:01:57一般的でしょうか?
VB6ではiniやレジストリに保存してました。それらはレガシーで
新しいやり方があるのかなと勝手に思ったんですが、
app.configかなと思ったんですがドキュメントには読み取り専用として
使うようなことが書いてあるので
(実際ConfigurationSettingsクラスも読み取りメソッドしかないし)
じゃあ保存は?と。こだわらずにiniを使えばいいんでしょうか。
0218デフォルトの名無しさん
2005/06/09(木) 12:07:590219デフォルトの名無しさん
2005/06/09(木) 13:33:42独自のXMLファイルに読み書きするのがお勧め。218の方法やDataSetが使える。
MSとしては分離ストレイジを勧めたいようであるが、現状では低レベルのAPI(CLR)や
ツールしか提供されていない。VS2005からはSettingsオブジェクト他その辺が充実
してくるようなのでだんだん使われるようになると予想される。
0220デフォルトの名無しさん
2005/06/09(木) 16:45:06親
CreateProcess1.exe プロセス起動--> Prog01.exe
親
CreateProcess2.exe プロセス起動--> Prog01.exe
Prog01.exeはCreateProcess1.exeから呼ばれたか、CreateProcess2.exeから呼ばれたか判断したい。
0221デフォルトの名無しさん
2005/06/09(木) 17:17:00適当なコマンドライン引数(/aとか/bとか)で区別ってのはどう?
0222デフォルトの名無しさん
2005/06/09(木) 17:20:140223デフォルトの名無しさん
2005/06/09(木) 17:20:410224デフォルトの名無しさん
2005/06/09(木) 23:12:56うっすらと浮かすようなやり方はどのようにすればよいのでしょうか?
+とか□のような地味なエフェクトはDragEffectででるのですが、アイコンなど
色のついたオブジェクトにドラッグエフェクトをつけたいです
0225単発ですが・・・
2005/06/09(木) 23:57:56http://www.geocities.co.jp/SiliconValley-Oakland/8259/
のようにユーザーの操作を透過するウィンドウはどのように作れば良いでしょうか?
また、フォーカスを失っても常に一番上に表示されるウィンドウも・・・
ご存じの方がおりましたらご教示お願いいたします。
0226デフォルトの名無しさん
2005/06/10(金) 02:16:08一番上に表示されるのはForm.TopMostとか。
操作の透過は・・・スパイってみたがメッセージすらきてないな。ってことは
フックかいな
Win32スレいったほうが詳しい人いると思うよ
0227デフォルトの名無しさん
2005/06/10(金) 02:56:24WM_NCHITTESTでHTTRANSPARENTを返す。
アクティブ状態も変化しないようにしたほうがいいかな。
0228デフォルトの名無しさん
2005/06/10(金) 14:15:41ds.Tables[ tablename ].Rows.Count;
0229デフォルトの名無しさん
2005/06/10(金) 14:19:56すまん。誰かがデータ突っ込んでた。首吊ってくる。orz
0230デフォルトの名無しさん
2005/06/10(金) 16:01:45初期化しておきます。それぞれの名前は例えばsrc, dstとします。
次に、dst = src; を実行した後に、dstに変更を加えると、srcまで変更
されてしまいます。C#ではそんな物なのでしょうか?
C++のように、ディープコピーが行われる(普通はそのように組む)事を期待
していたのですが、どうもオブジェクトへの先頭ポインタを付け替えるだけの
動作のようです。いろいろ試した結果、Clone()メソッドを使えば、新しい
中身を作り出してくれるようで、動作はまともになりましたが、どうもすっきり
しない気分です。
0231デフォルトの名無しさん
2005/06/10(金) 16:04:09値型と参照型の違いを調べれ
0232デフォルトの名無しさん
2005/06/10(金) 16:43:06ありがとうございます。プリミティブな型以外はほとんど参照型なんですね。
そして、クラスの中に参照型変数を持っていた場合、=代入演算子では
C#の場合、ディープコピーしない事もわかりました。
うーまだまだ初心者だ・・・・精進します。
0233デフォルトの名無しさん
2005/06/10(金) 16:48:44簡易コピー=ポインタの付け替えのみ、詳細コピー=ディープコピーの事、
と読み替えて理解しました。そして、=演算子は簡易コピーを実行する
という事もわかりました。
配列はちょっと複雑で、配列の中身が参照型の場合、配列の中身は
詳細コピーしますが、中身が参照しているオブジェクトはそのままにされる
という事もわかりました。C++では配列のコピーは演算子がないので、
必ず気をつけていましたが、C#の場合はちと気を付ける必要がありそうです。
0234デフォルトの名無しさん
2005/06/10(金) 16:51:33ま、C#の参照型変数(クラスのインスタンスは全部そうだ)は要するに
ポインタだと思っておけばよい。
C++でもポインタの代入ではコピーコンストラクタやoperator=は実行されないだろ。
単に同じオブジェクトを指すようになるだけで。
それと同じ。
0235デフォルトの名無しさん
2005/06/10(金) 17:00:13そうですね。そう思えば理解できます。
くそー今までBitmap関連のプログラムの動きが怪しかったのはこやつが
原因だったのかー。でもまだ数が少なくて、被害は最小限でよかった。
これからはさぼらずにClone()書きます。トホホ・・・・
0236デフォルトの名無しさん
2005/06/10(金) 17:07:12Bitmapといえば、IDisposableについても調べといたほうがよい気がする。
BitmapはDispose!
0237デフォルトの名無しさん
2005/06/10(金) 17:12:47> BitmapはDispose!
違うな。
IDisposableはDispose!
0238デフォルトの名無しさん
2005/06/10(金) 17:15:24using使えばいいだけのような希ガス。
0239デフォルトの名無しさん
2005/06/10(金) 17:43:411ブロックに収まるなら何の問題もないが、Managedリソースの感覚で
複数のオブジェクトで共有したりすると面倒なんだよ。
(放置しておいて、リソースが尽きる前にGCされることを祈るというテクニックもある)
0240デフォルトの名無しさん
2005/06/10(金) 19:53:41グラフィック関係にDisposeの必要なクラスが多すぎる気がする。
0241デフォルトの名無しさん
2005/06/10(金) 20:08:40GDIはWIndows3.1からの伝統を引きずってる点が多くて、最近画像関係を
いじくり始めた俺には理解不能の制限が多いな。
Delphi Graphic Secretsなどの本を読んで、だいたいわかってきたけど。
0242デフォルトの名無しさん
2005/06/10(金) 20:39:09小物とはいえいろんなアプリも作ったし、Managed DirectX使ったりもしている。
が、System.Drawing名前空間は魔物が住んでいそうで、いまだに使ったことがない
0243デフォルトの名無しさん
2005/06/10(金) 20:42:02コントロールのSizeをいじったことすらないと言うのか……すごいな。
0244デフォルトの名無しさん
2005/06/10(金) 20:46:510245デフォルトの名無しさん
2005/06/10(金) 23:16:04WM_NCHITTESTやHTTRANSPARENTでぐぐったのですが、
C++などの記事はあるものの、VB.netやC#での例を見つけることができませんでした。
本当に申し訳ありません、もうすこし具体的にご教示頂けないでしょうか?
私の力不足が原因なのですが・・・申し訳ありません!
0246デフォルトの名無しさん
2005/06/10(金) 23:54:20描画に関係なくよく使うのに。
自分でつくりゃあいいのか。
0247デフォルトの名無しさん
2005/06/11(土) 00:28:160248226
2005/06/11(土) 00:57:09無視かよ
C++わからないんならあきらめろ、な。
Win32でごにょごにょやらなあかんからその辺のAPIと
格闘になる。だからWin32スレいけといったんだよ。
というかHTTRANSPARENTはスレッドローカルだった希ガス
(=この場合使えない)。
こいつをspy++で見たところメッセージ自体
がWindowに飛んでいっていないし(WM_NCHITTESTすら)。
0249デフォルトの名無しさん
2005/06/11(土) 01:05:03いや、でもGraphicsで使う意味でのPointに特化されてるし、この構造体。
だからここにあるのに何で不満なんだ?
0250デフォルトの名無しさん
2005/06/11(土) 01:11:21そおゆう実質的な問題があったけどな
0251デフォルトの名無しさん
2005/06/11(土) 02:14:21using 書くのがめんどくさい、というのもあるが、それはおいておいて。
> Graphicsで使う意味でのPointに特化されてるし
そうかあ?
画像処理だけでなくもっと抽象的な処理にも使えるけど。
0252デフォルトの名無しさん
2005/06/11(土) 02:17:42たったの1行書くのが面倒ならコーディングなんてやってられねーだろ
ま、TupleでもComplexでも好きなクラス書けばいいじゃん
Generics使ってさ
0253デフォルトの名無しさん
2005/06/11(土) 02:22:24> たったの1行書くのが面倒ならコーディングなんてやってられねーだろ
ごめんなさい
> ま、TupleでもComplexでも好きなクラス書けばいいじゃん
> Generics使ってさ
そうだな、大した構造体じゃないしな
0254デフォルトの名無しさん
2005/06/11(土) 05:46:11嫁
ヒットテスト
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp
0255デフォルトの名無しさん
2005/06/11(土) 07:06:36へー、LayerWindowってHittest透過も出来たのか。
0256デフォルトの名無しさん
2005/06/11(土) 12:31:28でsearchPatternに複数の拡張子を含めるにはどうしたらいいでしょうか?
string searchPattern = "*.txt; *.htm"てな具合にしてもだめなんですが
0257デフォルトの名無しさん
2005/06/11(土) 12:34:270258デフォルトの名無しさん
2005/06/11(土) 12:50:09ArrayList fileList = new ArrayList();
string[] searchPatterns = new string[]{"*.jpg", *.bmp","*.gif"}
foreach(string pattern in searchPatterns)
{
fileList.AddRange(Directory.Getfiles(dirPath, pattern);
}
こんな感じにするしかないか…。
Directory.GetFilesってファイル数が多いと結構コスト高そうなんで
foreachでまわして何回も呼ぶのはなんかやだけどな…。
0259デフォルトの名無しさん
2005/06/11(土) 13:04:240260デフォルトの名無しさん
2005/06/11(土) 14:58:47たとえば
Image img = Image.FromFile(filePath);
try
{
//do something
}
finally
{
img.Dispose();
}
Image.FromFileはfilePathをロックしてしまうので確実にDisposeかける
必要がありますが、上のコードでFromFile()自体で例外が起きた場合
(画像ががサポートされていない形式である場合など)にはどうやって
例外をハンドリングしたらいいでしょうか。
一行目をtryブロックの中に入れると、imgが初期化されていないと
おこられてしまうし…。
Image.FromFileの読み込みで例外が起きた場合はファイルをロック
しないようになっているのでしょうか…。。。
0261デフォルトの名無しさん
2005/06/11(土) 15:02:29・それ以前の問題としてusingって知ってる?
・コンストラクタで例外がおきたときにはDispose呼ばなくてもいいと思うよ
0262デフォルトの名無しさん
2005/06/11(土) 15:05:441) もう一段tryブロックを作る(tryブロックをネストする)
2) Imageをtryの外で宣言し、nullを代入しておく。finally句でnullチェックも行う。
3) Disposeの実行の代わりにusingブロックを使用する
> Image.FromFileの読み込みで例外が起きた場合はファイルをロックしないようになっているのでしょうか…。。。
当然ロックしないに決まってる。
もしロックされるとしたら、FromFileが失敗するとImageインスタンスは作られないのにどうやってロックを解除するんだ?
0263デフォルトの名無しさん
2005/06/11(土) 15:27:02どもありがとうございます。
> ・それ以前の問題としてusingって知ってる?
usingは知っていますが、using(object obj =...)の初期化部分で
例外起きたらおんなじことかなあとおもってしまいましたorz
>もしロックされるとしたら、FromFileが失敗するとImageインスタンスは
>作られないのにどうやってロックを解除するんだ?
まったくごもっとも。。。よく考えたらそのとおりですよね…。
0264デフォルトの名無しさん
2005/06/11(土) 16:44:20表示させる良い方法はないでしょうか?
現在、サーバ側でFileStreamを使ってイメージファイルを読込みNetworkStreamに書込む。それを
クライアント側で受け取りFileStreamでファイルを生成、その画像を読み込む。という方法を
試しているのですが、生成されたbitmapファイルがアプリケーションを終了さないと
ちゃんとしたファイルにならないようで。(Closeの問題?)
この手法だとファイルが生成されてしまうので、ファイルを生成せずに画像データをやり取りする
良い方法はないでしょうか?
解決の糸口になりそうなWebサイトや本、手法等をご存知の方がいましたら
アドバイスをお願いします。
0265デフォルトの名無しさん
2005/06/11(土) 16:50:18BitmapにせよImageにせよストリームから直接インスタンスを作るコンストラクタ/静的メソッドが存在するが。
0266264
2005/06/11(土) 17:51:23public Bitmap(Stream) ですね。これでクライアント側の問題は解決できます。
後はサーバ側の事なのですが、既に読込み済みのBitmapをNetworkStreamに
書き込むことは可能でしょうか?FileStreamからファイルを読込むのではなく
Bitmap bmp = new Bitmap("../../image.bmp"); といった風に画像を読込んだ
bmpをNetworkStreamに書き込みたいのです。
bmpをbyte[]化するといいと書かれていたのをネット見つけたのですが、具体的な
手法が載ってませんでした。何度もすみません。アドバイスよろしくお願いします。
0267デフォルトの名無しさん
2005/06/11(土) 18:01:590268デフォルトの名無しさん
2005/06/11(土) 18:14:45>>267の回答でまったく問題ないと思うけど、
byte[]化したければ(やったことねーけど)こんな感じでできそう
BitmapData bmData
= bitmap.LockBits(new Rectangle(new Point(0,0), bitmap.Size),
ImageLockMode.ReadOnly, bitmap.PixelFormat);
byte[] byArray = new byte[bmData.Height * bmData.Stride];
Marshal.Copy(bmData.Scan0, byArray, 0, byArray.Length);
bitmap.UnlockBits(bmData);
0269デフォルトの名無しさん
2005/06/11(土) 18:20:07それじゃイメージのデータだけでメタデータが含まれてないから駄目。
しかもビットマップ限定だからネットワーク越しに送受信には不向き。
MemoryStreamに対してSaveして、それをToArrayするのがベター。
0270268
2005/06/11(土) 18:32:39確かにおっしゃる通りで
そのやり方だとちゃんとBITMAPFILEHEADER、BITMAPINFOHEADERつきの
データになるし、復元も簡単でよいですね
ある意味手動でメモリ内シリアライズしてるみたいな
0272デフォルトの名無しさん
2005/06/11(土) 23:58:30レイアウトが実現したいのですが
どのようなコントロールが使われているのでしょうか
リストボックスとボタンで自作するのはなんだか大変そうで・・
0273デフォルトの名無しさん
2005/06/12(日) 00:03:33Spy++とかで調べればわかるが
0274デフォルトの名無しさん
2005/06/12(日) 00:05:59hello woldなコンソールプログラムを作ったんだけど、F5で実行すると、コンソールが即閉じちゃうんだよね。
閉じないようにするにはどうしたらいい?
0275272
2005/06/12(日) 00:08:16先にSpy++について調べてみることにします
ありがとうございました
0276デフォルトの名無しさん
2005/06/12(日) 00:10:210277デフォルトの名無しさん
2005/06/12(日) 00:12:26Spy++を使う前に一通りSystem.Windows.Formsのコントロールを確認すべきだな。
同じことができるListViewコントロールがすでにあるという意味だ。
0278274
2005/06/12(日) 00:20:26デバッグなしで開始(Ctrl+F5)を押せばいいんだね!
0279デフォルトの名無しさん
2005/06/12(日) 00:40:00http://pc8.2ch.net/test/read.cgi/tech/1045307942/l50
0280デフォルトの名無しさん
2005/06/12(日) 06:35:19知識は完全に素人レベルです
0281デフォルトの名無しさん
2005/06/12(日) 14:00:27ちっともよくわかんない
0282デフォルトの名無しさん
2005/06/12(日) 14:08:42リストボックスの場合はうまく行くのに
リストビューの場合はうまく行きません
※stringdataはstring型のデータです
//これはOK
if(listBox1.Items.Contains(stringdata))
{
listBox1.Items.Add(stringdata);
}
//これはNG
//stringdataと内容が同じitemがあっても追加される
ListViewItem lvi = new ListViewItem(stringdata);
if(listView1.Items.Contains(lvi))
{
listView1.Items.Add(lvi);
}
ツリービューでも同様のことを試してみましたがうまくいきません
この場合どうやって比較すればよいのでしょうか
0283デフォルトの名無しさん
2005/06/12(日) 14:13:14> ListViewItem lvi = new ListViewItem(stringdata);
> if(listView1.Items.Contains(lvi))
ListViewItemは参照型。
今ここに新しいのを作った。
さて今までのListView.Itemsの中に、まさに作ったばかりの物は入ってるだろうか?
foreachで回してそれぞれの.Textと比較でもすればー?
0284デフォルトの名無しさん
2005/06/12(日) 14:25:01ベジェ曲線でぐぐれ
0285282
2005/06/12(日) 14:30:24アドバイスありがとう
期待する動作のコードが書けました
※stringdataはstring型のデータです
ListViewItem lvi = new ListViewItem(stringdata);
for(i=0;i<listView1.Items.Count;i++)
{
if(listView1.Items[i].Text==item.Text)
break;
}
if(i==listView1.Items.Count)
{
listView1.Items.Add(lvi);
}
0286デフォルトの名無しさん
2005/06/12(日) 14:54:06ちょwwwwおまwwwwwwwforeach使えよwwwwwww
0287282
2005/06/12(日) 15:09:25i==listView1.Items.Countの部分のうまい処理が思いつかず
int i;
foreach(ListViewItem lvi in listView1.Items)
{
//ごちゃごちゃ
i++;
}
と言う風にforeachなのにループカウンタっぽいのを定義するぐらいなら
forでいっかなって・・
0288デフォルトの名無しさん
2005/06/12(日) 15:19:29まあ別にどっちでもいいけどね……
0289デフォルトの名無しさん
2005/06/12(日) 16:21:240290デフォルトの名無しさん
2005/06/12(日) 17:30:05DrawBezier
0291デフォルトの名無しさん
2005/06/12(日) 17:51:18曲線が書きあげられる様をアニメーション表示したいんです><
というか画面エフェクトとして曲線で飛んでくレーザーのような物に使いたいんです><
0292デフォルトの名無しさん
2005/06/12(日) 17:53:16説明ベタ杉
0293デフォルトの名無しさん
2005/06/12(日) 17:57:210294デフォルトの名無しさん
2005/06/12(日) 18:03:10そういうことならベジェ曲線の数式のパラメータを動かして
いけばいい。ただ、多分等速運動にはならない。
0295デフォルトの名無しさん
2005/06/12(日) 18:10:00ベクトルを変化させつつ、2点間を線で描画していけばいいんじゃないかな。
C#とあんまり関係ないね。それ系のアルゴリズムについて調べるとよい。
0296280
2005/06/12(日) 18:19:23曲線の数式から調べなおしてがんばってみます
0297デフォルトの名無しさん
2005/06/12(日) 18:40:23using namespace std;
class Neko
{
private:
string name;
public:
Neko(string s){
name = s;
}
void naku(){
cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
}
};
int main()
{
Neko dora("ボス"); //「ボス」というの名前を持ったdoraが生成される
cout<<"あなたの名づけた猫がメモリ上に生成されました。"<<endl;
cout<<"猫が鳴きます。"<<endl;
dora.naku();
}
を例として、これを少し改造するだけで、以下の問題のソースを書いてくださいm(__)m
「Objectクラスのサブクラスとして、Dogクラスを作成し、
インスタンスメソッドとして、噛む(bites)を作成しなさい。
bitesメソッドの内容は、"ガブ!"という文字列(String)を渡すものとする。
クラスおよびメソッドを作成したら、一時変数(a)としてDogクラスのインスタンスを作成,
bitesメソッドを送って噛むかどうかテストせよ」
0298デフォルトの名無しさん
2005/06/12(日) 18:41:32宿題は自分でやれ。
0299デフォルトの名無しさん
2005/06/12(日) 18:42:170300デフォルトの名無しさん
2005/06/12(日) 18:43:14すいません。宿題というわけではなくて、模範解答をしりたくて。色々考え抜いた結果です。
うまくコンパイルがいかないもので。 お願いします。
0301デフォルトの名無しさん
2005/06/12(日) 18:44:20オブジェクト指向の考えの元、C++で書いていただきたいのです。
0302デフォルトの名無しさん
2005/06/12(日) 18:44:52だから、
ここC#スレ
0303デフォルトの名無しさん
2005/06/12(日) 18:46:400304デフォルトの名無しさん
2005/06/12(日) 19:00:50お前見たいな奴は死んだ方が世のため
0305デフォルトの名無しさん
2005/06/12(日) 19:03:14分かりました.........そうします。
あちこちでたたかれて、ここが最後の多のみの綱だったのですが...
0306デフォルトの名無しさん
2005/06/12(日) 19:07:41なんか人として間違ってる奴。
0307デフォルトの名無しさん
2005/06/12(日) 19:08:36223 名前:デフォルトの名無しさん[] 投稿日:2005/06/12(日) 18:46:20
どなたか、#include <iostream> #include <string>
using namespace std;
class Neko
{
private:
string name;
public:
Neko(string s){
name = s;
}
void naku(){
cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
}
};
int main()
{
Neko dora("ボス"); //「ボス」というの名前を持ったdoraが生成される
cout<<"あなたの名づけた猫がメモリ上に生成されました。"<<endl;
cout<<"猫が鳴きます。"<<endl;
dora.naku();
}
を例として、これを少し改造するだけで、以下の問題のソースを書いてくださいm(__)m
「Objectクラスのサブクラスとして、Dogクラスを作成し、
インスタンスメソッドとして、噛む(bites)を作成しなさい。
bitesメソッドの内容は、"ガブ!"という文字列(String)を渡すものとする。
クラスおよびメソッドを作成したら、一時変数(a)としてDogクラスのインスタンスを作成,
bitesメソッドを送って噛むかどうかテストせよ」
0308デフォルトの名無しさん
2005/06/12(日) 19:10:16引用せんでよろしい
0310デフォルトの名無しさん
2005/06/12(日) 19:12:57class Dog{
略
void bites(string s)
{
cout<<s<<endl;
}
}
int main()
{
Dog a();
a.bites("ガブ!");
}
0311デフォルトの名無しさん
2005/06/12(日) 19:15:01Objectクラスのサブクラスになってない…って相手せんでよろしい。
せっかく俺が宿題スレで相手してんだから。
0312デフォルトの名無しさん
2005/06/12(日) 19:17:380313デフォルトの名無しさん
2005/06/12(日) 19:18:300314デフォルトの名無しさん
2005/06/12(日) 19:22:47今、Formがアクティブになってるかどうかを調べる方法は
どうすればよいのでしょうか?
なさけねぇ話ですいませんがおながいします...
0315デフォルトの名無しさん
2005/06/12(日) 19:25:28必要ない(というかデフォルトでそんなものは提供されてない)から
そいつはどこにあるんだ?と聞きたい。
0316デフォルトの名無しさん
2005/06/12(日) 19:55:14Form.ActiveFormと自分自身を比較。
0317デフォルトの名無しさん
2005/06/12(日) 20:06:30ありがとうございます
0318デフォルトの名無しさん
2005/06/13(月) 00:00:04htmlタグを取り除くにはどうすればよいですか?
イメージ:
string test = "<html>hello</html>";
HTMLDocument doc = (HTMLDocument)test;(ここが無理なのですが)
string str = doc.body.innerText;
str=="hello";という結果を期待しています。
0319デフォルトの名無しさん
2005/06/13(月) 00:25:110320デフォルトの名無しさん
2005/06/13(月) 00:39:19何スレか前に<>を処理する正規表現のサンプルを挙げたレスがあったな。
XHTMLなら普通にXML周りを使えばどうとでもなるが。
>HTMLDocument doc = (HTMLDocument)test;(ここが無理なのですが)
ところで関係ないが、こういう場合C#ではたいていは
>HTMLDocument doc = new HTMLDocument(test);
という形だろう。
0321デフォルトの名無しさん
2005/06/13(月) 08:30:13string path = @"〜";
XmlDocument doc = 〜
doc.Save(path);
で、指定されているpathは完全に新しいファイル名なので
パーミションが設定されてるわけがないんです。
なのに、ファイルのパーミションが原因でファイルが保存できないと
IOException が出るので困っています。
この問題の回避の方法をご存じの方、教えてください。
0322デフォルトの名無しさん
2005/06/13(月) 14:34:12ループでグルグル回しても、生成されないファイルが出来てくるのはどうしてですか?
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
でfs.Write(・・・
のような感じなんですけれど、ちゃんと一回ごとにクローズもしてます。
Thread.Sleep(5000)とか入れると、全てのファイルがきちんと生成されます。
こういう場合の定石があったら教えてください、宜しくお願いします。
0323322
2005/06/13(月) 14:50:58ファイル名をDateTime t = DateTime.Now;で付けていたので、
同じ名前になって上書きされていました。_| ̄|○
ミリセカンドまでファイル名に使っていたので、かぶるとは思いませんでした。
申し訳ありませんでした。
0324デフォルトの名無しさん
2005/06/13(月) 15:20:01(CS0649)がいちいち出るので、/nowarnオプションで出ないように
したのですが、これだと本当に使い忘れてごみになっているメンバに
気づきづらくなってしまいます。ほかに出ないようにする方法はないですか?
0325デフォルトの名無しさん
2005/06/13(月) 15:54:20publicなものには出ないはずだが。
コンストラクタを定義する。
引数付きコンストラクタを定義するのが不自然な物はclassにする事を検討する。
0326デフォルトの名無しさん
2005/06/13(月) 19:39:54警告レベル4でやってます。3にしたら出ませんでした。4がデフォルトみたいなので。。
構造体というのがWin32のWINDOWPLACEMENTなんですが、いまいろいろ
試していて、[StructLayout(LayoutKind.Sequential)]属性が必要らしいので
付けたら、警告が出なくなりました。なぜでしょうか?
とりあえずこれでおkにしようと思います。
0327デフォルトの名無しさん
2005/06/13(月) 19:48:38fs.Close();の前に
fs.Flush();してみればどう?
昔おなじような現象で4KB(?)ずつファイルに書き出してたみたいだから、
Flushですぐ書き出すようにしたらうまくいったよ。
0328デフォルトの名無しさん
2005/06/13(月) 19:54:06> [StructLayout(LayoutKind.Sequential)]属性が必要
structはデフォルトでLayoutKind.Sequentialなので、それだけなら属性宣言は必要なかったりする。
CharSetとかが必要な場合は書かなきゃなんないけど。
しかし>>325の言ってるようにpublicフィールドには出ない警告のはずなんだが……?
0329デフォルトの名無しさん
2005/06/13(月) 21:56:550330デフォルトの名無しさん
2005/06/14(火) 01:17:35Environmentあたり探したけどなかった。
0331デフォルトの名無しさん
2005/06/14(火) 01:24:160332デフォルトの名無しさん
2005/06/14(火) 01:38:06気のせいか・・・
0333デフォルトの名無しさん
2005/06/14(火) 05:53:43「大量」ってかいてあるからクォータかけてるとか
>>331
Linuxにも移植されてると聞くけどそんときは.soなんじゃないの?しらんけど。
0334デフォルトの名無しさん
2005/06/14(火) 06:48:590335デフォルトの名無しさん
2005/06/14(火) 08:53:15それは論点が違う。そいつに必要なのはIsDllとかIsAssemblyとかだ。
0336322
2005/06/14(火) 09:55:15有難うございます。
DateTime.Nowでも15〜16ms程度の精度はあるようなので、
処理時刻で名前がかぶるのはおかしいと思ったんですが、
バッファの関係だったんですね。
有難うございました。
0337デフォルトの名無しさん
2005/06/14(火) 10:59:35System.IO.Path.GetExtension?
0338デフォルトの名無しさん
2005/06/14(火) 17:13:06odbcDataAdapterの構成ウィザードを使用してSQLを生成しているのですが
select a,b,c From test where b = ?
(aが主キーでbは文字項目)
のようなSQLを書いて作成しようとすると完了する前にエラーがでてVS2003が落ちてしまいます
MySqlとMyODBCの設定はほとんど触っていないので、そちらが原因の可能性もあるのですが・・・
誰かわかる人はいませんか?
0339デフォルトの名無しさん
2005/06/14(火) 17:23:45ttp://dev.mysql.com/downloads/connector/net/1.0.html
Connector/Net使ってみたらどうだろう。
0340デフォルトの名無しさん
2005/06/14(火) 17:37:43ありがとう
試してみたけどこれだとウィザード使えないみたいですね
どうにか解決できないものですかね
ウィザードを使用して開発できればodbcかどうかは気にしないんですけど・・・
0341デフォルトの名無しさん
2005/06/14(火) 22:42:54テンプレートを読み込んで、必要なところを書きかえて保存するような
プログラムを書いているのですが、DOMがうまく使えません。
まずdocumentElementを取得して、documentElement.SelectSingleNode(@"child::assemblyIdentity")で
XmlNodeを取得しようとしたのですが、取得できずにnullが帰ってきます。
XPathが間違ってますか?
ちなみにdocumentElement.SelectNodes(@"child::*")を調べるとちゃんと
"assemblyIdentity"のXmlNodeが入っています。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="0.1.0.0"
processorArchitecture="X86"
name="xx.xx.xx"
type="win32"
/>
以下略
0342デフォルトの名無しさん
2005/06/14(火) 22:51:28名前空間がある場合はSelectNodes/SelectSingleNodesはちと手間が必要。
ttp://www.atmarkit.co.jp/fdotnet/easyxml/easyxml05/easyxml05_03.html
0343デフォルトの名無しさん
2005/06/14(火) 22:51:570344デフォルトの名無しさん
2005/06/15(水) 01:38:070345デフォルトの名無しさん
2005/06/15(水) 13:47:05window formのスクロールバーのBackColorを変えるには
どのような継承コードを書けばいいのでしょうか
ご教授お願いします
0346デフォルトの名無しさん
2005/06/15(水) 14:27:37ttp://dobon.net/vb/bbs/log3-9/5149.html
0347デフォルトの名無しさん
2005/06/15(水) 15:57:04比較するファイルが大量にあるので、比較部が遅くて困っています。
↓の高速化の手法を教えてください。
bool Different = false;
Trace.Assert(fs.CanRead);
using(IO.FileStream fs2 = new IO.FileStream(LastPathFile, IO.FileMode.Open, IO.FileAccess.Read))
{
IO.BufferedStream bufstream1 = new IO.BufferedStream(fs);
IO.BufferedStream bufstream2 = new IO.BufferedStream(fs2);
for(bool fileend = false; !Different && !fileend; /* no step. */)
{
int i1 = bufstream1.ReadByte();
int i2 = bufstream2.ReadByte();
Different = i1 != i2;
fileend = i1 == -1;
}
fs2.Close();
}
0348デフォルトの名無しさん
2005/06/15(水) 16:30:044096バイトずつ読み込んで比較しろ。
0349デフォルトの名無しさん
2005/06/15(水) 16:55:450350347
2005/06/15(水) 17:46:19↓のようにしてみました。
bool Different1 = false;
#region Different1 = LastPathFile の内容と FilePath の内容が異なる;
Trace.Assert(fs.CanRead);
using(IO.FileStream fs2 = new IO.FileStream(LastPathFile, IO.FileMode.Open, IO.FileAccess.Read))
{
IO.BufferedStream bufstream1 = new IO.BufferedStream(fs);
IO.BufferedStream bufstream2 = new IO.BufferedStream(fs2);
const int bufsize = 4096;
byte[] buf1 = new byte[bufsize];
byte[] buf2 = new byte[bufsize];
bool fileend = false;
for(int readsize, offset = 0;
!Different1 && !fileend;
fileend = readsize < bufsize)
{
int readsize1 = bufstream1.Read(buf1, offset, bufsize);
int readsize2 = bufstream2.Read(buf2, offset, bufsize);
(切断)
0351347
2005/06/15(水) 17:46:34{
Different1 = true;
break;
}
readsize = readsize1;
for(int i = 0;
!Different1 && i < readsize ;
i++)
{
Different1 = buf1[i] != buf2[i];
}
}
fs2.Close();
}
#endregion
で、こういう結果が得られました。
New : 919531250[ticks] / 同じファイル
Old : 1227812500[ticks] / 同じファイル
>>349
thx. でも、最初にやってあります。
0352デフォルトの名無しさん
2005/06/15(水) 17:47:450353デフォルトの名無しさん
2005/06/15(水) 19:46:551) ブロック読みするんならBufferedStreamである必要はない。
バッファリングする分余計なコピーが発生して損なだけ。
2) バッファサイズは4096じゃなくて8192にしてみ。
3) 最後の手段としては、unsafeで明示的なポインタアクセスをすることで
配列境界チェックを避ける。
こんなところかな。それと、簡単なコードなんだから、等価なCのコード
と比較してどの程度遅いのか確認するのも良かろう。それ以上は
速くなりっこ無いんだから。
0354デフォルトの名無しさん
2005/06/15(水) 20:27:56てか、byte配列比較のよさげなメソッドってどこかにある?
0355デフォルトの名無しさん
2005/06/15(水) 20:38:29アラインメントだのバウンダリだのを考えると、どのみちunsafeな
コードにはなるわなあ。
0356デフォルトの名無しさん
2005/06/15(水) 21:08:140357デフォルトの名無しさん
2005/06/15(水) 21:25:21どうだろうか?
0358デフォルトの名無しさん
2005/06/15(水) 21:26:05それは遅い。しかも確実ではない
0359デフォルトの名無しさん
2005/06/15(水) 21:27:380360デフォルトの名無しさん
2005/06/15(水) 21:38:550361デフォルトの名無しさん
2005/06/15(水) 21:50:22初めて比較するときについでにチェックサムを残しておいて。
0362347
2005/06/15(水) 22:50:20IO.BinaryReader br1 = new IO.BinaryReader(fs1);
IO.BinaryReader br2 = new IO.BinaryReader(fs2);
while(!Different) {
long l1, l2;
bool fileend = false;
try { l1 = br1.ReadInt64(); }
catch(IO.EndOfStreamException) { fileend = true; l1 = 0; }
try { l2 = br2.ReadInt64(); }
catch(IO.EndOfStreamException) { Different = !fileend; break; }
Different = fileend || l1 != l2;
}
0363347
2005/06/15(水) 22:54:04チェックサムは、参考にさせてもらおうと思います。
0364デフォルトの名無しさん
2005/06/15(水) 23:45:37WinDiff
0365デフォルトの名無しさん
2005/06/16(木) 00:48:24おいおいなんでBinaryReaderを使うんだよ。
BufferedStreamである必要が無いと言っただけ。
普通にFileStreamでいいだろ。
0366デフォルトの名無しさん
2005/06/16(木) 00:50:030367デフォルトの名無しさん
2005/06/16(木) 12:53:080368デフォルトの名無しさん
2005/06/16(木) 13:23:19抽出したいのですがどのようにすればよろしいでしょうか?
0369デフォルトの名無しさん
2005/06/16(木) 13:30:24ttp://www.google.com/search?hl=ja&lr=lang_ja&c2coff=1&q=site:www.atmarkit.co.jp+CSV+oledb
0370347
2005/06/16(木) 14:31:26public static bool DifferentFile(IO.FileStream fs1, IO.FileStream fs2)
{
bool Different = false;
const int bufsize = 8192;
byte[] buf1 = new byte[bufsize];
byte[] buf2 = new byte[bufsize];
int readsize, offset = 0;
for(bool fileend = false;
!Different && !fileend;
fileend = readsize < bufsize)
{
readsize = fs1.Read(buf1, offset, bufsize);
int readsize2 = fs2.Read(buf2, offset, bufsize);
Different = (readsize != readsize2) || LibC.memcmp(readsize, buf1, buf2) != 0;
}
return Different;
}
0371347
2005/06/16(木) 14:31:49{
public static int memcmp(int size, byte[] buf1, byte[] buf2)
{
if(size == 0) return 0;
unsafe
{
byte* b1, b2;
fixed(byte* bt1 = &buf1[0], bt2 = &buf2[0]) {
b1 = bt1;
b2 = bt2;
}
if(b1 == b2) return 0;
#warning ■■うろおぼえ■ C# だと sizeof (long) == 64bits だよね?
const int BlockSize = 8;
0372347
2005/06/16(木) 14:32:08long* a1 = (long*)b1, a2 = (long*)b2;
for(/* no init */; size > BlockSize; size -= BlockSize)
if(*a1 != *a2) break;
a1++;
a2++;
}
b1 = (byte*)a1;
b2 = (byte*)a2;
}
for(/* no init */; size > 0; size--){
if(*b1 != *b2) return *b1 - *b2;
b1++;
b2++;
}
return 0;
}
}
}
0373347
2005/06/16(木) 14:41:120374デフォルトの名無しさん
2005/06/16(木) 16:34:040375347
2005/06/16(木) 17:38:03あのスコアをたたき出したのは最初の一回だけで、あの書き込み以降、最初のものとほとんど変わらない
実行時間になってしまってました。理由はよくわかりません。
その反省から、今回はループで10回回して平均をとると次の結果になりました。
Old : 387126660.8[ticks]
New : 322343507.2[ticks]
時間にしてだいたい8割。ただ、最初のものはタスクマネージャで見ると
CPU使用率がずっと100%だったのに比べて、370の方はずっと60%ぐらいをうろうろしてました。
CPUにやさしいといえるのかな?
カーネル時間は両方ともずっと25%ぐらい?でした。あと、デバッグビルドで計測しました。
CPU: P4-1.4GHz RAM: 1GB HDD-I/F: USB2
OS: Windows XP2 Pro SP2
常駐: Cotton、Winamp5、タスクマネージャ
0376347
2005/06/16(木) 17:42:370377デフォルトの名無しさん
2005/06/16(木) 17:47:33ポインタアクセスしてる区間はまるごとfixed{ }で囲んでおかないと危険だよ。
0378デフォルトの名無しさん
2005/06/16(木) 22:06:38何をどうしたところで大きな高速化は望めないわけで、
プログラムの動作を変更して、比較する回数を減らすような
方法を考えるのが本筋。
例えば、あるファイル群Aにあるファイルで内容が同じものを探すのに
foreach (string s in A)
{
foreach (string t in A)
{
if (s != t && compare_file(s, t)) ... ; // 見つかった
}
}
なんてやってるなら基本的に大間違いしているわけで。
0379デフォルトの名無しさん
2005/06/16(木) 23:04:56外部exeをフォーム内で起動させ稼動させるにはどうすればよろしいでしょうか?
現時点では外部exeを起動できるとこまで出来ています
0380デフォルトの名無しさん
2005/06/16(木) 23:08:070381デフォルトの名無しさん
2005/06/16(木) 23:13:520383デフォルトの名無しさん
2005/06/16(木) 23:25:38スレビューで秀丸を走らせたり出来る
0384デフォルトの名無しさん
2005/06/16(木) 23:25:54VirtualPC見たいなやつを想定しているのか?
0385379
2005/06/16(木) 23:29:14ありがとうございます。調べてみます
>>384
はい、そのような感じでexeを指定してForm内のWindowで起動/操作といった感じです。
0386デフォルトの名無しさん
2005/06/17(金) 00:18:550387デフォルトの名無しさん
2005/06/17(金) 14:27:52元のコンポーネントの枠をカーソルに合わせて表示するにはどうすればいいんでしょうか?
どなたか知っていたらご教授お願いしますm(_ _)m
0388デフォルトの名無しさん
2005/06/17(金) 18:37:36どうしてIDisposableインターフェースが必要なのかよくわかりません。
newして放っておけば、スコープが切れた所でいつか勝手にガベージコレクト
されて行くような気がするんですが。
それとも、一つの関数の中で巨大なオブジェクトを一時的に作り、開放して
まだスコープが外れないうちに別のメモリが必要になる場合に備えての事なん
でしょうか?
0389デフォルトの名無しさん
2005/06/17(金) 18:49:55ガベージコレクタにまかせっきりだとまずかったり枯渇したりしかねない
ソケットやデータベースの接続、GDIオブジェクトなどの
リソースを意識的に開放するのに使う。
0390デフォルトの名無しさん
2005/06/17(金) 18:56:22C:\superfree.txt というファイルがあるとして
private void certainMethod(){
FileStream f = new FileStream(@"c:\superfree.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
こうすると、certainMethodを呼び出したら、しばらくC:\superfree.txtにアクセスできなくなる。
0391デフォルトの名無しさん
2005/06/17(金) 19:17:32レスありがとうございます。
という事は、IDisposableインターフェースはC#では文法的に汚い部分
ではあるけれど、現実面を見据えて(有限なリソース)、必要悪という
事で理解しました。
自作クラスにはできるだけ付けるようにします。
0392デフォルトの名無しさん
2005/06/17(金) 19:18:40あ、こちらにもレスが。感謝感謝。
そうですね。排他アクセスが解かれるのがいつなのか不明、というのでは
困りますからね。よく理解できました。
0393デフォルトの名無しさん
2005/06/17(金) 19:24:31UnmanagedリソースはUnmanaged。
0394デフォルトの名無しさん
2005/06/17(金) 19:28:12あ、はい、LockBits/UnlockBitsなどは意識的に気を付けています。
というか、LockBitsしたGraphicsオブジェクトに描画操作をしても、無視
されるって事を最近知りました。
0395デフォルトの名無しさん
2005/06/17(金) 19:30:41のに、マネージメモリのように扱ったら、後からガベージコレクトする時に
具合が悪いんだ。
0396デフォルトの名無しさん
2005/06/17(金) 19:32:36なんか変
0397デフォルトの名無しさん
2005/06/17(金) 19:34:25んーそうですか。まだどこか思い違いをしているのかな・・・・
GDI+でいろいろ遊んでいるんですが、LockBitsしたGraphics
オブジェクトへの描画メソッドは完全に無視されるんですよ。
その理由を考えていたんですが・・・・
0398デフォルトの名無しさん
2005/06/17(金) 21:24:06Graphics は単純な GDI+ のラッパーなわけで、
そもそもマネージドではない。
LockBits した Bitmap に Graphics 経由で描画できないのは、
単に GDI+ の仕様。
0399デフォルトの名無しさん
2005/06/17(金) 21:51:26そうなんですか。C++などでGDI+を使うと、LockBitsでReadWriteもしくは
Writeになっていれば、Lockした状態でも書けるんですけどね。
多分C#のラッパーGraphicsがLock中だとフラグを立てて、わざと無視して
いるんじゃないかと思います。C++とC#で動作が異なるので気になっていました。
0400デフォルトの名無しさん
2005/06/18(土) 01:13:51>どうしてIDisposableインターフェースが必要なのかよくわかりません。
>newして放っておけば、スコープが切れた所でいつか勝手にガベージコレクト
されて行くような気がするんですが。
そのいつかがいつ発生するかが問題。
クラスのコンストラクタでファイルから適当な値を読み込み(無ければ初期値)、
読み込んだデータに何らかの操作をし、
デストラクタでファイルに保存
というクラスを書いた場合、デストラクタが呼ばれるのは GC が発生したときらしい。
IDisposable を使わずにこのクラスを new して解放という動作を繰り返した場合、
1 初期値
2 初期値
3 初期値
1 書き込み
2 書き込み
4 初期値
3 書き込み
:
:
といった感じの動作になる。
0401デフォルトの名無しさん
2005/06/18(土) 01:14:494 初期値
じゃなくて、
4 読み込み
だった。
0402デフォルトの名無しさん
2005/06/18(土) 09:26:48コンパイルする側も実行する側もWinXP SP2です。
ただ単に..NET Frameworkのディレクトリにあったcscを/t:winexeで使ってます。
解決方法など知っている方よろしくお願いします
0403デフォルトの名無しさん
2005/06/18(土) 09:46:08知るためにはどうしたらよいでしょうか
0404デフォルトの名無しさん
2005/06/18(土) 10:02:52ttp://www.atmarkit.co.jp/fwin2k/win2ktips/498zoneid/zoneid.html
>>403
SystemInformationにプロパティが追加されるまではSystemParametersInfo関数を。
0405デフォルトの名無しさん
2005/06/18(土) 13:26:11C#が原因ではないんですね。
自分なりに調べていた内容だと、署名に関するものかと思っていたので、証明されてる機関に申請しないといけないのかと考えていました。
ありがとうございました。
0406デフォルトの名無しさん
2005/06/18(土) 20:08:00を画像として保存したいのですが、どうすればいいでしょうか?
0407最凶VB厨房
2005/06/18(土) 23:48:05@ Control から Bitmap を取得する:
0408デフォルトの名無しさん
2005/06/18(土) 23:49:55ありがとうございます。
0409デフォルトの名無しさん
2005/06/19(日) 08:20:46C#でファイルロックはどうしたら良いのでしょうか?
0410デフォルトの名無しさん
2005/06/19(日) 08:24:270411デフォルトの名無しさん
2005/06/19(日) 08:52:08FileStreamから作ればいいのか。
0412デフォルトの名無しさん
2005/06/20(月) 05:41:35パレットに256色のColorをセットする所まではわかるのですが、例えば
これをグレースケールにしたい場合、Flagsの解釈を0x00000002にする
必要があります。
ところが、なぜかわかりませんが、ColorPalette.Flagsはgetしかありません。
どうやったらグレースケールにパレットをセットできるのでしょうか?
0413デフォルトの名無しさん
2005/06/20(月) 10:43:010414デフォルトの名無しさん
2005/06/20(月) 11:32:42コンソールアプリですが、Mainからbitmapを引数とするvoidメソッドが呼べません。
コンパイラ0120エラーなんですが、どのような記述を追加or削除する必要がありますかね?
0415デフォルトの名無しさん
2005/06/20(月) 11:35:44激しく池沼
エラーメッセージに書かれてるとおりだが。
オブジェクト指向の基礎から教えるにはここは向かないぞ。
0416デフォルトの名無しさん
2005/06/20(月) 11:54:09やはりそうですよね
吊ってきます
0417デフォルトの名無しさん
2005/06/20(月) 12:12:480418デフォルトの名無しさん
2005/06/20(月) 13:21:42ありがとう。うまく行きました。
0419デフォルトの名無しさん
2005/06/20(月) 15:11:05ものを実現するには、やはりメンバ関数によるしかないのでしょうか?
0420デフォルトの名無しさん
2005/06/20(月) 15:35:52まあそうだな。あとは用途が幾らか異なるがインデクサ。
しかし必要と思うことはあんまり無いので別にいいや。
ガイドラインでも1つより多くは使用するなって書いてるし。
0421デフォルトの名無しさん
2005/06/20(月) 22:39:31同期ソケットをマルチスレッドで使いたいんだよ
プール?使うかボケ
結局クラス作らなきゃいけねーしあほくさ
0422デフォルトの名無しさん
2005/06/21(火) 20:51:08NewRow()で作ったDataRowをフォームに表示して、詳細を入力させてから
[OK]でDataTable.Rows.Add(DataRow)しているのですが、
たとえば今回新規のキーが5で、フォームで[キャンセル]されると、
次に新規作成するとき6が出てきます。
作ったDataRowを結局使わなかったときに、次のNewRow()でまた5が
出てきてほしいのですが、どうにかできませんか?
0423デフォルトの名無しさん
2005/06/21(火) 21:03:59いっそ非表示にしてても良いくらいだ。
0424デフォルトの名無しさん
2005/06/21(火) 23:32:36ま、コレクションを返すプロパティで代用くらいかな。
0425デフォルトの名無しさん
2005/06/21(火) 23:59:01代用って言うか、そもそも C# で index 付きプロパティがサポートされてない理由って、
コレクションのプロパティで実現すべきだと判断されたからじゃないの?
0426デフォルトの名無しさん
2005/06/22(水) 03:20:41君が作り方を知らないだけ
0427デフォルトの名無しさん
2005/06/22(水) 09:17:29コールがとても遅い気がするのです。C++ではメンバ関数の呼び出しが
高速だったので、とても気になります。
0428デフォルトの名無しさん
2005/06/22(水) 09:29:060429デフォルトの名無しさん
2005/06/22(水) 13:37:34カレンダーみたいに方眼状にパネルを貼り付けるアプリケーションを作りたいのですが、レイアウトの所は自分で実装しないと駄目ですか?
0430デフォルトの名無しさん
2005/06/22(水) 13:44:49いくつか転がってるような感じだが、逆に面倒かモナー。
ttp://www.google.com/search?oe=utf8&q=C%23+GridLayout
0431デフォルトの名無しさん
2005/06/22(水) 16:14:21使ってないけど。
0432デフォルトの名無しさん
2005/06/22(水) 17:18:11this.TopMostがしたいんだけどコンソールアプリだから、thisがないんだけど、どうしたらいいかな?
0433デフォルトの名無しさん
2005/06/22(水) 17:38:190434デフォルトの名無しさん
2005/06/22(水) 21:07:40VB.NETだったらソースの頭に Option Compare Text って入れると
== は大文字小文字区別しないけど Equals だと区別するっつー事で
異なる動きするから気をつけないといけないみたいだけど
C#はこの問題は無いみたいだし、Equalsメソッドでの比較はただ見づらいだけだと思うんだけど。
0435デフォルトの名無しさん
2005/06/22(水) 21:13:36強いて言うならEqualsはObject型のStringインスタンスでも文字列の比較になる点とか。
0436デフォルトの名無しさん
2005/06/22(水) 21:43:00C#はぬるぽじゃないけどついついぬるぽと言ってしまう
0437デフォルトの名無しさん
2005/06/22(水) 21:58:47ぬ る り
0438デフォルトの名無しさん
2005/06/22(水) 23:01:54object b = "a";
a == b はtrueかfalseか?
0439デフォルトの名無しさん
2005/06/22(水) 23:26:08Avalon / XAML 待ち。
0440デフォルトの名無しさん
2005/06/22(水) 23:45:48false
(string)a == (string)b はtrueか
0441デフォルトの名無しさん
2005/06/22(水) 23:46:01任意のRowを書き換えたいときってどうしたらいいですか?
dataSet1.Tables["hoge"].Rows[i] = row;
にするとdataSet1.Tables["hoge"].Rows[i]は読み取り専用って起こられます。
Rows[i]を削除して、iにrowをInsertするしか手はないんでしょうか?
0442デフォルトの名無しさん
2005/06/23(木) 00:15:28そうじゃないとRowStateの管理がやってられないからな。
0443441
2005/06/23(木) 00:21:45RowStateとやとやらは触ったことがないのですが、
扱うときは心してかかります。
ありがとうございました。
0444デフォルトの名無しさん
2005/06/23(木) 00:33:39コンソールのウィンドウを閉じて、
フォーム側で全制御を行いたいのですが、
コンソールのウィンドウってどうやって閉じればいいんでしょうか?
0445デフォルトの名無しさん
2005/06/23(木) 01:27:01してくれますが、これをwidthChange系のイベントで取得することは可能なのでしょうか?
ColumnStyleクラスでWidthが変化したときのイベントを拾って処理をしたいのですが
どうしたらいいのかな
0446デフォルトの名無しさん
2005/06/23(木) 10:27:530447デフォルトの名無しさん
2005/06/23(木) 10:40:47DataGridView待ち。
0448デフォルトの名無しさん
2005/06/23(木) 13:26:31┃┌╋──╋┐┃
└╋┘ └╋┘
┃ ・ ・ ┃ ┌━━┐
●━╋┐ ┌╂━━━━╂┐ ┃
└━┷┴━━╂┘ └╋━┘
同じスレにはコピペ ┌╋┐ ┌╋┐
できるけど、違う ┃└╋╋━━╋╋┘┃
スレにはコピペでき ┃ ┃┃ ┃┃ ┃
ない不思議コピペ ┃ ┃┃ ┃┃ ┃
└━┘┘ └└━┘
てすと
0449デフォルトの名無しさん
2005/06/23(木) 13:42:07他のスレに貼れないかどうか試して〜〜〜
という心理を狙った荒らし?
0450デフォルトの名無しさん
2005/06/23(木) 18:58:24隠蔽を意図的にやろうとしてもコンパイル時にエラーで叱られる。
というか、バグじゃないかこれ?
for文中でfor (int i = として宣言した i は、for文のスコープが切れると
消滅するが、その後で int i = としようとすると、CS0136エラー発生。
0451デフォルトの名無しさん
2005/06/23(木) 19:01:24forの外のスコープから見ればiを2つ宣言してるじゃん。
0452デフォルトの名無しさん
2005/06/23(木) 19:05:36・・・ばか?
0453デフォルトの名無しさん
2005/06/23(木) 19:13:39その間のモジュールコールがすごく遅くならねえ?
同一ファイルにあるアセンブリは一緒にJITによってネイティブに落とされるが、ファイル
が違うと、JITはその都度ネイティブを発生するのかねえ。
まだ検証中の段階だけど、すごくよく呼び出される関数は、同一ファイルに入れて
しまった方がずっとコールが速いようだ。
0454デフォルトの名無しさん
2005/06/23(木) 20:48:03二重になっていると、括弧毎に自動的にインデントされてしまい、前に
どんどん空白が入るんですけど、何とかなりませんか?
↓こんな具合
int[,] i = new int [5,5] {
{1,1,1,1,1},
{2,2,2,2,2},
{3,3,3,3,3},
{4,4,4,4,4},
{5,5,5,5,5}};
0455デフォルトの名無しさん
2005/06/23(木) 20:54:22糞だよあれは。
0456デフォルトの名無しさん
2005/06/23(木) 21:18:58そうなんですか・・・・・
そしたら、コピー前に // でも入れてコピペして、後から // を取る、とかの
エディタを騙す方法で行くしかないですね。ありがとうこざいました。
0457デフォルトの名無しさん
2005/06/23(木) 21:19:24○>>455
0458デフォルトの名無しさん
2005/06/23(木) 23:10:03そんなくだらないことに悩んでる暇があったら変数名変えろ。
>>453
それはC#の話ではないんではないか?
0459デフォルトの名無しさん
2005/06/24(金) 02:24:17リファクタ機能もないし
「定義へ移動」するとバカチョンで候補がいっぱい出てくるし
どうなっとるんじゃ。
0460デフォルトの名無しさん
2005/06/24(金) 02:37:140461デフォルトの名無しさん
2005/06/24(金) 03:03:24したら、素晴らしいね。
0462デフォルトの名無しさん
2005/06/24(金) 07:14:02どっちも2005で付いてるよ
0463デフォルトの名無しさん
2005/06/24(金) 11:31:59貼り付け直後にUndoするといいかもです。
左端に//書いた行をコピペするとインデント位置まで寄ってしまう現象は
それで回避してます。
0464デフォルトの名無しさん
2005/06/24(金) 15:22:01VB6のときは、一度閉じたフォームのインスタンスをまたShowしたり、
コンストラクタでコントロールにアクセスすると勝手にロードされるとか
いろいろあったので使い分けの基準があったのですが、Windows Formsだと
どうせ閉じるたびにインスタンス作成からやり直しなので、開くたびに
コンストラクタもLoadも通るのだからどっちでも同じな気がします。
hWndが必要な処理だけはLoad、とかそんな感じでしょうか?
0465デフォルトの名無しさん
2005/06/24(金) 16:05:44Application Dataで、ローミングユーザーと非ローミングユーザーってあるけど、
どう使い分けたらいいの?
0466デフォルトの名無しさん
2005/06/24(金) 16:07:07+=でハンドラを加えるのではなく単に現在のハンドラと置き換える方法はありますか?
0467デフォルトの名無しさん
2005/06/24(金) 16:17:37ttp://www.technewsgroups.net/group/microsoft.public.dotnet.general/topic4196.aspx
でいけるかもしれない。
0468デフォルトの名無しさん
2005/06/24(金) 16:29:43EventDescripterはAddEventHandler(), RemoveEventHandler()というメソッドを持っていますが
イベントの保持するマルチキャストデリゲートのコレクションは公開していないし、
それらを一挙に消したり直接置き換えたりすることはできないようですね。
私のような要求は特に珍しくも無いと思うのですが、一般に皆さんはどうやっているのでしょうか?
0469デフォルトの名無しさん
2005/06/24(金) 17:18:570470デフォルトの名無しさん
2005/06/24(金) 18:08:07結局、本当にやりたいのは追加型ではなく置き換え型でイベントハンドラを操作したかっただけなので、
イベントハンドラ群を明示的に他の場所に保存しておき、
-=で削除してから+=で追加という愚直な方法でとりあえず対応しました。
0471デフォルトの名無しさん
2005/06/24(金) 19:12:37文字通りローミングするかしないかで使い分ける。
一般的にはユーザー固有のものをMachine Independentかどうかで判断する。
例えば、「前終了したWindowの位置」なんて情報はローミングするとダメポ。
こういう情報を保存して次に起動されたときにその位置に復元するってのがよくある使い方。
でも、あるMachineで1600*1200の解像度を持っていて、終了時に
1400, 1024の位置で終了して、次もその位置で表示するとする。
これが他のMachineで使われたとして、そのMachineの画面全体の解像度が
1024*768だったら画面外に表示してしまうだろう?
逆の例はIMEのユーザー辞書とか。これはどのMachineで使用されてもOKなので
ローミングされるべき。
ただ、サイズの関係でローミングしないという判断をすることもある。
ローミングは(一般的には)ネットを通じて移動するので重いっちゃ重いから。
ただ、運用で解決できるのでこれはあまり考慮しなくてもよい。
っていうかこういう詳しい話はDesigned for WindowsXPとか嫁。
0472デフォルトの名無しさん
2005/06/24(金) 19:27:17どっちでもいい場合が多いけど、一般的にはコンストラクタで
重かったり例外出すようなことはするな。コンストラクタはシンプルなほうがいい。
っていうか、一般的に処理は遅らせられるだけ遅らせるべき。
表示直前まで必要のないことはLoad、作った瞬間から必要なものはコンストラクタ
でやる。
0474デフォルトの名無しさん
2005/06/25(土) 02:04:21イベントハンドラのに登録するメソッドでデリゲートを呼び出すようにして、
イベントを置き換えたいときはそのデリゲートをいじればいい
例えば
MouseEventHandler onMouseDown;
public MyForm() {
...
button.MouseDown += new MouseEventHandler(OnMouseDown);
}
private void OnMouseDown(object sender, MouseEventArgs e) {
onMouseDown(sender, e);
}
みたいにしてbutton.MouseDownを置き換える代わりにonMouseDownの中身を変えればいい
0475デフォルトの名無しさん
2005/06/25(土) 02:15:56タブがない部分の後ろに見えるタブコントロールを透過したいのですが何か方法はありませんか?
0476デフォルトの名無しさん
2005/06/25(土) 02:16:43イベントハンドラの候補がNコあったりするとそれではつらいのでは
ないでしょうか。
0477デフォルトの名無しさん
2005/06/25(土) 02:41:33無理。
だけど自分で塗ることは出来る。
0478デフォルトの名無しさん
2005/06/25(土) 03:44:24それはマルチキャストの場合ってこと?
0479475
2005/06/25(土) 23:41:44無理ですか。
自分で塗るというのはどうすればいいんでしょうか?
TabControlを継承した自作TabControlクラスのOnPaintをオーバーライドしてみましたが、
OnPaintイベント自体呼ばれない様子・・・
ちなみに現在は、タブのない部分にフォームを親に持つパネルを貼り付けて、
パネルを透過させることでタブコントロールの背景が見えないようにしています。
0480デフォルトの名無しさん
2005/06/25(土) 23:48:420481デフォルトの名無しさん
2005/06/26(日) 04:57:54例えば、あるクラスの配列を新しい型として定義したい時は、どうすれば
いいのでしょうか?
0482デフォルトの名無しさん
2005/06/26(日) 06:44:420483デフォルトの名無しさん
2005/06/26(日) 06:50:42わかりました。ありがとうございます。
0484デフォルトの名無しさん
2005/06/26(日) 15:02:26(ArrayList.RemoveAt(int)が使いたい)
ってどう書くのがスマートですか?
ループまわして一個ずつ読み込んでってのがきれいじゃないので…
0485デフォルトの名無しさん
2005/06/26(日) 15:13:30string[] strArray = {"123", "456", "789"};
ArrayList lstString = new ArrayList(strArray);
lstString.RemoveAt(0);
foreach (string str in lstString)
{
Console.WriteLine(str);
}
0486デフォルトの名無しさん
2005/06/26(日) 15:20:03その配列をメンバーに含んだクラスを定義するのじゃ駄目なの?
0488デフォルトの名無しさん
2005/06/27(月) 12:44:45メリットって何だろ。それを書けば代替策のレスがつくかもしれない
ですね
0489デフォルトの名無しさん
2005/06/27(月) 13:59:19いえ、単に読みやすさを考えての事だったんです。
それと、C/C++の癖が抜けて無くて。それだけです。
0490デフォルトの名無しさん
2005/06/27(月) 14:52:14違いがわかならくてインターフェースの場合
複数継承できるってぐらいしか思いつかないだけど
どう使い分けるの?
0491デフォルトの名無しさん
2005/06/27(月) 16:35:35abstract class は実装を持てる。
interface は文字通りインターフェースのみを持てる。
なので、全ての派生クラスに共通する何らかの処理を基底クラスでやりたかったら
abstract class を使わないと駄目。
そういう必要がなければ interface を使う。
0492デフォルトの名無しさん
2005/06/27(月) 18:37:46abstractなものを含め、基底クラスはひとつしか持てない。
ライブラリやコンポーネントなど他人が書いたものを
利用するときにinterfaceは役に立つ。
0493デフォルトの名無しさん
2005/06/27(月) 21:40:59インターフェイスとは何かとか抽象化とは何かを考えてみるのもいいかもな。
0494デフォルトの名無しさん
2005/06/27(月) 23:27:37フリーソフトでシェアウェア使うのもなんだし・・・
0495デフォルトの名無しさん
2005/06/27(月) 23:35:490496デフォルトの名無しさん
2005/06/27(月) 23:37:420497デフォルトの名無しさん
2005/06/27(月) 23:50:05フォームデザイナーで編集可能なものと考えてくれ。
>>495
Magic Docking(+DockingManagerExtender)以外なら教えてくれ。
0498デフォルトの名無しさん
2005/06/27(月) 23:55:08SandDock
http://www.divil.co.uk/net/controls/sanddock/
0499デフォルトの名無しさん
2005/06/27(月) 23:57:37前に使ったことあるんですが、何かが気に入らなくてやめたような・・・
思い出せないので、また使ってみます。
ありがとうございました。
0500デフォルトの名無しさん
2005/06/28(火) 01:08:220501豆腐
2005/06/28(火) 17:23:12RS232Cでつないだ機器から出力されるデータ(文字列)を保存したいと思っています。
こういった場合、逐次ファイル一行づつ書き込みを行えばいいのか、テキストボックスなどに
格納しておいて出力が終了されてからファイルに書き込めばいいのかわかりません。
後者のほうは、メモリを食いそうです。前者のほうは、ファイルの書き込みがおいつけるのか?
という疑問があります。
こういった場合、一般的には、どのようにしてファイルに保存するのでしょうか?
ご教授をお願いします。よろしくお願いします。
0502デフォルトの名無しさん
2005/06/28(火) 17:43:41ファイルの書き込みストリーミングでは、書き込みメソッド呼んでも、ある程度は自動的にメモリにバッファされて、まとめてHDDに書き込まれる仕組みだと思う。
ストリーミングをクローズする処理で確実に全部書き込まれるみたいにね。このバイト値を大きく設定すれば、自動的に無駄なHDDアクセスはコントロールできるような気もする。
少なくとも、自分はクローズしていない時点で、ファイル開いてみたら、書き込まれているはずのテキストが書き込まれていなかったというバグを作った。
多分HDDへの書き込みが追いつかないという問題は発生しないと思うけど、いずれにせよ、ずっとガアガアHDDにアクセスしてるのはパフォーマンス的にスマートな方法じゃないのは確かだと思う。
最初に書いたWriteメソッドのバッファがうまく使えれば使うか、配列もしくは、テキストボックスで効率よいバッファリングができるのなら、その方向で考えたらいいんじゃないかな?
0503デフォルトの名無しさん
2005/06/28(火) 17:47:06いずれにせよ真っ当なOSならバッファを使って読み書きするから大した問題ではないがな。
あとテキストボックスって何さ。なんで文字列の一時保存にわざわざコントロール?
stringなりStringBuilderなりに溜めていきゃいい話。
ついでに表示もしときたいってんならわからんでもないけど。
0504デフォルトの名無しさん
2005/06/28(火) 21:09:43schtasksコマンドを実行すると、
現在ログオンしているユーザーのパスワードを求められます。
以下のコードに何を追加すればパスワードも与えられるんでしょうか?
p = new Process() ;
p.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec") ;
p.StartInfo.CreateNoWindow = false ;
p.StartInfo.UseShellExecute = false ;
p.StartInfo.RedirectStandardInput = true ;
p.StartInfo.RedirectStandardOutput = true ;
p.StartInfo.Arguments = arg;
p.Start() ;
p.WaitForExit() ;
0505デフォルトの名無しさん
2005/06/28(火) 21:17:310506デフォルトの名無しさん
2005/06/28(火) 23:17:440507デフォルトの名無しさん
2005/06/29(水) 07:36:43public class Item{}
public int this[int i] { get{ return 0; } }
// ^^^^ error CS0102:クラス 'A' に 'Item' の定義が既に含まれています。
}
なぜこのようなエラーが出るのか、どなたか解説していただけないでしょうか。
0508デフォルトの名無しさん
2005/06/29(水) 08:09:58> public int this[int i]
これは内部でプロパティ 'Item' として作られるので、
> public class Item
この内部クラスと名前がぶつかる。
0509デフォルトの名無しさん
2005/06/29(水) 08:15:27ああ、それをすっかり忘れていました!
サンクス。
0510デフォルトの名無しさん
2005/06/29(水) 08:16:260511デフォルトの名無しさん
2005/06/29(水) 13:51:34サンクス
0512デフォルトの名無しさん
2005/06/29(水) 13:56:52コードレビューで文字列のある桁数毎に"-"を挿入する処理があったのだが、その"-"を HAIHUN って定数きってそれを使うように作ってあった。
こういう場合って普通定数きるもん?ハイフンに対してハイフンって定数きってもしょうがない気がするのだが。
何故定数名がローマ字なのかも気になるがそこは無視してくれ。
0513デフォルトの名無しさん
2005/06/29(水) 14:02:56美しく書くなら、区切り文字を受け取るオーバーロード作ってそれに処理を任す。
0514デフォルトの名無しさん
2005/06/29(水) 14:41:14そりゃ単なる、よくある糞コードです。
そのコードを書いた人をののしってくるといいでしょう。
0515デフォルトの名無しさん
2005/06/29(水) 15:46:43後に変更が入った時に一箇所変えるだけで全部に対応できるようにする為の物。
512の例だったらハイフンにハイフンって名前を付けてるので意味が無い。
やるなら513があげた様にSeparatorとか"-"がどういう意味かを表す名前にするか、直書きするか。
いつか"-"じゃなくて別の値に変更になるかもとかが無いんだったら直書きで良いんでないの。
0516デフォルトの名無しさん
2005/06/29(水) 20:09:37今はこれを試してるんですがどうもデザイナでの配置がうまくいかないんだよなぁ・・・。
ttp://www.codeproject.com/cs/menu/rebarcontrol.asp
0517デフォルトの名無しさん
2005/06/29(水) 20:38:480518デフォルトの名無しさん
2005/06/29(水) 20:53:380519デフォルトの名無しさん
2005/06/29(水) 21:03:440520デフォルトの名無しさん
2005/06/29(水) 21:19:140521デフォルトの名無しさん
2005/06/30(木) 00:46:01Dim client As New TcpClient(server, port)
Dim message As String = Chr(&H2) & "hoge" & Chr(&H3)
Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
とmessageを送りたいんですが、
C#だとどのように書いたらよろしいでしょうか?
ヒントでも結構ですので教えていただけますか?
0522デフォルトの名無しさん
2005/06/30(木) 00:52:44つ C# プログラマーズ リファレンス string
0523デフォルトの名無しさん
2005/06/30(木) 00:54:18string message = ?????
byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
0524デフォルトの名無しさん
2005/06/30(木) 01:41:10探してみます。ありがとうございます。
0525デフォルトの名無しさん
2005/06/30(木) 10:51:18ファイル名として無効な文字を含んだ文字列を貼り付けると、それだけ
はじかれて張り付いたり、無効な文字のキーをタイプしても
無反応だったりするんですが、これをTextBoxでやるには
どうしたらよいでしょう。
0526デフォルトの名無しさん
2005/06/30(木) 11:01:100527521
2005/06/30(木) 12:43:41TcpClient client = new TcpClient(server, port);
string message = "\x02" + "hoge" + "\x03";
byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
0528デフォルトの名無しさん
2005/06/30(木) 21:21:26なおかつ、キャンセルを押した場合、シャットダウンを中止するにはどうしたらよいでしょうか?
確認ダイアログまではWinProcオーバーライドしてできるのようなのですが
シャットダウンを中止する方法がわからないのですが
0529デフォルトの名無しさん
2005/06/30(木) 21:30:42Microsoft.Win32.SystemEventsクラスのSessionEndingイベントで通知をもらう。
SessionEndingEventArgsが渡ってくるので、Cancelプロパティをセット。
0530デフォルトの名無しさん
2005/07/01(金) 02:25:33文字列を半角英字(アルファベット)で始まるかをチェックするために、
Char.IsLetter( input[0] );
を利用しようとした所、全角文字でもTrueが返ってきてしまいます。
(そういう仕様の様です)
私が望む事を実現するために、使える手段を探しています。
やはり、正規表現を使うしかないのでしょうか?
0531デフォルトの名無しさん
2005/07/01(金) 02:43:31だと動かんの?
0532デフォルトの名無しさん
2005/07/01(金) 02:43:54とかではまずいのか
0533530
2005/07/01(金) 11:29:10なぜか、そういうメソッドを探すの一生懸命になってました。
視野が狭くなっていたんだなぁ、と勉強になりました。ありがとうございます。
ちなみに、531は&&ではなく、||ですよね?
0534デフォルトの名無しさん
2005/07/01(金) 12:58:36||だと全ての文字がヒットするだろw
0535534
2005/07/01(金) 13:00:490536デフォルトの名無しさん
2005/07/01(金) 13:05:28C#においてこの書き方って有効なのか?
0537デフォルトの名無しさん
2005/07/01(金) 13:09:14あと、クラスのメンバを現在のネームスペースの外からはアクセスできないようにすることはできますか?
0538デフォルトの名無しさん
2005/07/01(金) 13:59:13クラスAのコンストラクタで引数を秘密の合言葉にして、
それをクラスBの中に仕込む。
あと、現在のネームスペースを別DLLにしてメンバをinternalにする。
0539531
2005/07/01(金) 14:06:060540デフォルトの名無しさん
2005/07/01(金) 20:18:11無効。「'a' <= input[i]」 の時点で bool になってドボン
>>537
クラスBをクラスAの内部クラスにするとか
0541デフォルトの名無しさん
2005/07/01(金) 20:46:08One=1, Two=2,}
ってあった場合に文字列の "One" から Hoge.One に変換する方法きぼん
0542デフォルトの名無しさん
2005/07/01(金) 20:48:460543デフォルトの名無しさん
2005/07/01(金) 20:50:540544デフォルトの名無しさん
2005/07/01(金) 21:25:53enum. じゃ反応せえへん
enum って System.Enum へのエイリアスじゃないの
0545デフォルトの名無しさん
2005/07/01(金) 21:27:010546デフォルトの名無しさん
2005/07/01(金) 21:41:05サンキュー
typeof(Hoge) ってしてから必死にメンバを探していたぜ
0547デフォルトの名無しさん
2005/07/01(金) 22:07:42特定のAppDomain切り離して停止したり
とかそういうことをやるには、ホストアプリケーションを書かなければ
ならんのでしょうか?
0548デフォルトの名無しさん
2005/07/02(土) 00:29:340549537
2005/07/02(土) 07:49:34class AFactory {
public A CreateA() {return new A(m_key);}
static object key=new object();
public class A {
public A(object o) {
if(o!=Factory.key) throw ApplicationException();
}
}
}
という方法を思いつきました。なんか変態的な気がするのでやらないけど。
0550デフォルトの名無しさん
2005/07/02(土) 08:11:110551デフォルトの名無しさん
2005/07/02(土) 13:51:120552デフォルトの名無しさん
2005/07/02(土) 13:57:070553デフォルトの名無しさん
2005/07/02(土) 16:22:53きいたほうが自然だとおもうんだけど
なんできかないの?
0554デフォルトの名無しさん
2005/07/02(土) 16:29:510555デフォルトの名無しさん
2005/07/02(土) 18:23:52勉強の為に有名なWebアプリのソースを見たいのですが、
BlogやWiliや掲示板でASP.NETの有名なのって無いでしょうか?
Blogは.Textが見つかりましたが、うなぎスクリプトのC#版とか無いですか?・・・
0556デフォルトの名無しさん
2005/07/02(土) 18:49:04LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
とのことで、引数や返り値がC#でどの型にあたるか、HWNDとUINTしか分からず困っていました。
そこでGoogleでSendMessage C#で検索したところ、
http://support.microsoft.com/default.aspx?scid=kb;ja;812425 では
[DllImport("USER32.dll")]
static extern IntPtr SendMessage (IntPtr hWnd , int msg , IntPtr wp, IntPtr lp);
http://dobon.net/vb/dotnet/control/lvcolumnorder.html では
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int [] lParam);
となっていました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html
によると UINT は uint (System.UInt32) と書いてあるし…
P/Invokeについての詳しい解説している本やサイトってないでしょうか。
0557デフォルトの名無しさん
2005/07/02(土) 18:57:44どういう具合にネイティブ型にマップするか、については唯一の正解はない。
動けばいい、とも言えるし、目的によっても違う。
早い話がWin32だとint,long, pointerが全て32bit整数で、まあ符号あり無しの
違いはあるが、全てごっちゃにしてしまえるのも確かだ。
SendMessage()の例でいうと、wParamやlParamは色々な使い方をされる。
ただの整数、ハンドル、ポインタといったものが渡される可能性があって、
Win32ではそれらが全て32bit整数だから、ごっちゃにできるワケだ。
で、あんたのプログラムでただの整数を渡すような使い方しかしないのであれば、
wParamやlParamはたんにintとすればよいし、他のものを渡すのであれば、
IntPtrのほうが便利かもしれない。その辺は、単に利便性の問題。
0558デフォルトの名無しさん
2005/07/02(土) 19:00:10まあ簡単に言えば、サイズさえ合えば何でも良い。
32bitプラットフォームなら、ポインタをInt32でやろうがUInt32でやろうがIntPtrでやろうがshort二つ並べようが、
はたまたclassインスタンスの参照を渡そうがref参照を渡そうが。
使いやすいものを使えばいい。
UINTは(Win32なら)unsigned INT32としてどっかのヘッダで定義されてるから、UInt32でやるのが自然だが別にInt32でやってもいいし。
が、まあプラットフォームの縛りから逃れるにはInt32やらUInt32やらInt16*2やらは避けた方が無難だ。
実際にはそうも言ってられないが。
0559デフォルトの名無しさん
2005/07/02(土) 20:22:02>早い話がWin32だとint,long, pointerが全て32bit整数で、
>まあ簡単に言えば、サイズさえ合えば何でも良い。
ああ、なるほど、なんとなく分かった気がする。ありがとう
0560デフォルトの名無しさん
2005/07/02(土) 21:03:490561デフォルトの名無しさん
2005/07/02(土) 21:07:20ていうか何の速さだよ。
0562デフォルトの名無しさん
2005/07/02(土) 21:14:16>勉強の為に有名なWebアプリのソースを見たいのですが、
>BlogやWiliや掲示板でASP.NETの有名なのって無いでしょうか?
WiliじゃなくてWikiでいいのかな?
とりあえず、http://www.atmarkit.co.jp/ad/ms/aspnet0503/asp01.html のリンクに
ASP.NETで作られたBlogやらWikiがあります。
また、http://www.microsoft.com/japan/msdn/asp.net/starterkit/ のスタートキットや
http://www.microsoft.com/japan/msdn/net/aspnetsolution/ のASP.NET KITも参考になるかと思います。
0563デフォルトの名無しさん
2005/07/02(土) 21:14:17どっかのページでVB.netの特集してて、そこでVB6.0より早くなったってあって
その比較対象にC#があってC#よりはVB.netは遅かった・・・(分かりづらい文章だなw
んと、質問なんですが、DNSサーバーに問い合わせてMXレコードを調べるプログラムと作ろうと思います。
無論、C#で作るんですが、質問の内容自体はC#ぢゃ(ry
一応、あくまでついでということで・・・
DNSとのやりとりってどんな風にしてるのかご存じの方います?
nslookupはつかえんし、
http://setup.value-domain.com/index.php?p=mx_search
こういうページに毎回アクセスかけると拒否られそうだし、
http://www.vector.co.jp/soft/win95/net/se313883.html?y
これはJavaだから解析してもわからんし・・・
お願いいたします・・・
0564デフォルトの名無しさん
2005/07/02(土) 21:18:00無理ならTCPやUDPを生で。TcpClient, UdpClient, Socket の各クラス。
0565デフォルトの名無しさん
2005/07/02(土) 21:29:30TCPやUDPで生でやることを技術的にはできるはずなんですが、
実際、接続してからどんなコマンドやらを送るのかがわからんのです。
つまりC#の話ではないんですが・・・もしも知っているからがいたらなぁってことです
0566デフォルトの名無しさん
2005/07/02(土) 21:44:46私も知らないが
ttp://www5e.biglobe.ne.jp/~aji/3min/index.html
を読めば何となく自前で実装できそうな気がしてくるな。
0567デフォルトの名無しさん
2005/07/02(土) 22:37:33激しくThanksです!!
いやぁUDPだったとは・・・
0568デフォルトの名無しさん
2005/07/02(土) 22:41:40パケットをモニタリングすればわかるかなぁ?
0569デフォルトの名無しさん
2005/07/02(土) 22:49:02これは違います?
0570デフォルトの名無しさん
2005/07/02(土) 23:22:080571デフォルトの名無しさん
2005/07/03(日) 03:07:560572デフォルトの名無しさん
2005/07/03(日) 06:25:40C++/CLIじゃ不満かね?
0573デフォルトの名無しさん
2005/07/03(日) 10:40:020574デフォルトの名無しさん
2005/07/03(日) 12:35:10DNSメッセージをそのままやりとりするだけだが。
ネットワークではビッグエンディアンが普通である点に注意すれば問題ない。
566の、Qnameの解説が微妙に間違ってるけど。(文字長は1バイトで表現する)
0575デフォルトの名無しさん
2005/07/03(日) 14:13:56マジわからんわぁ〜、そのDNSメッセージとやらが分からぬのです(汗;
情けない。。。
あれっす、例えばメール送信の場合はTCPで接続して
HELO xxx.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
DATA
TEST
.
QUIT
みたいな感じぢゃないですかぁ?(雑すぎますが。。。
DNSでMXレコードかける場合はUDPで接続したあとにどんなことをすればいいのか予想がつかぬのです。
Perl勉強すればよかったかなぁ
0576デフォルトの名無しさん
2005/07/03(日) 14:23:35DNSメッセージの構造は分かるね?
まず16bitのIDがあって、続けて16bitのフラグ。
16bitのQDCount、ANCount、NSCount、ARCount。
その後実際に投げる質問。ある場合はその後の回答。
質問や回答は、.で分離して文字列長をプリフィクスにしたQname、16bitのタイプ、クラス、32bitのTTL、16bitのRD長、可変長のRD。
で、これらをbyte[]にしてDNSサーバの53ポートにSendして、結果をReceiveして解析するだけ。
0577デフォルトの名無しさん
2005/07/03(日) 14:25:23渡した場合、渡したメモリがネイティブDLL内で使用され続けることはあるのでしょうか?
言い換えると、DLLに渡してすぐMarshal.FreeHGlobalメソッドで開放して問題が起こる可能性はありますか?
0578デフォルトの名無しさん
2005/07/03(日) 14:25:51と
>>569の送信データ生成部分と受信データ解析部分
を
読んで分からないなら無理
0579デフォルトの名無しさん
2005/07/03(日) 14:35:04渡した関数によるとしか言いようがないな。
その関数が自分で完結せずにグローバル変数に渡してたりしたら当然問題は起こりうる。
0580デフォルトの名無しさん
2005/07/03(日) 14:43:48IDisposableを実装してるクラスのインスタンスをメソッドに渡して、
そのメソッドから処理が返ってきてからすぐにDisposeを呼んで問題が起こることだってある、
それと同じだと思うよ。
class Hoge{
private FileStream f;
private void Method1(FileStream fs){
this.f = fs;
}
public void Method2(){
using(FileStream file = File.Create(@"c:\aaaaa.txt") ){
Method1(file);
}
}
}
0581555
2005/07/03(日) 17:08:01いや〜ん、想像以上です。素晴らしいです。
ご親切にどうも有難うございます。
こんなにあっただなんて知りませんでした。
どうも有り難うございました。
0582デフォルトの名無しさん
2005/07/03(日) 18:59:29賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。
プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/
理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
0583デフォルトの名無しさん
2005/07/03(日) 19:28:22DLLやらなにかないのかなぁ〜
そこら辺で配布されている簡単なメーラーもこんな処理してるんでしょうか?
0584デフォルトの名無しさん
2005/07/03(日) 19:31:560585デフォルトの名無しさん
2005/07/03(日) 19:35:04C#から直接P/Invokeするには共有体がでかすぎて絶対やりたくないけど。
0586デフォルトの名無しさん
2005/07/03(日) 20:11:550587デフォルトの名無しさん
2005/07/03(日) 20:21:100588デフォルトの名無しさん
2005/07/04(月) 15:14:12Inherits System.Exception
'コンストラクタ
Public Sub New(ByVal Msg As String)
MyBase.New(Msg) ←ココ
End Sub
End Class
というサンプルがあるのですがC#だと←部分ってどう書くのでしょうか?
0589デフォルトの名無しさん
2005/07/04(月) 15:16:34C# 言語の仕様 10.10.1 コンストラクタ初期化子
0590デフォルトの名無しさん
2005/07/04(月) 21:24:57ArrayList TestList = new ArrayList();
TestList.Add(new TestObject(aaa, bbb, ccc));
System.Xml.Serialization.XmlSerializer serializerTest = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList));
serializerTest.Serialize(fileTest, TestList);
こんな感じで実行すると、
XML ドキュメントを生成中にエラーが発生しました。 ---> System.InvalidOperationException: 型 TestObject は指定されていません。
スタティックに使用できない型を指定するには XmlInclude または SoapInclude 属性を使ってください。
と出てきて保存できない。どうすればよいのだろう。
0591デフォルトの名無しさん
2005/07/04(月) 21:27:49TestObject の宣言をおせ−て
0592デフォルトの名無しさん
2005/07/04(月) 21:32:25コンストラクタを使って、二番目の引数にArrayListに含まれる型を指定してやんな。
0593590
2005/07/04(月) 21:40:12http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemxmlserializationxmlserializerclassctortopic5.asp
コレだね。
出来たよ!!ありがとう。
しかし、投稿から10分で答えてもらえるとは、素晴らしいスレですね。
0594デフォルトの名無しさん
2005/07/04(月) 21:59:230595デフォルトの名無しさん
2005/07/04(月) 22:05:270596デフォルトの名無しさん
2005/07/04(月) 23:59:400597デフォルトの名無しさん
2005/07/05(火) 00:02:13Disposeされるよ
0598デフォルトの名無しさん
2005/07/05(火) 00:03:010599デフォルトの名無しさん
2005/07/05(火) 02:19:44{\colortbl ;\red0\green0\blue255;\red127\green0\blue0;\red255\green0\blue0;}
\viewkind4\uc1\pard\nowidctlpar\cf1\lang1041\f0\fs20 <\cf2 test \cf3 hoge\cf0 =\cf3 "test"\cf1 >\cf0\par
}
<\cf2 test \cf3 hoge\cf0 =\cf3 "test"\cf1 >\cf0\parこの部分を
2.4MB分繰り返したデータを作成します。そのようなRTFをRichTextBoxに食わせると、2.4MB程度で読み込み表示時間が
20分かかるのですがこれはバグなのでしょうか?それとも仕様なのでしょうか?
ちなみに、普通のWindow2000、XP付属のワードパッドだと遅いマシンでも30数秒早いマシンだと10数秒で終わります。
逆汗してみると、糞コード以外の何者でもないのは解るのですがなんとかならないでしょうか?
0600デフォルトの名無しさん
2005/07/05(火) 07:31:030601デフォルトの名無しさん
2005/07/05(火) 08:07:02ReadToEndで一気に読み込んでそれだけ時間がかかってるならそういう仕様なんだろう。
もしStringBuilderを使わずに1行ずつ読んで文字列の足し算やってるなら
そっちで時間がかかってる。
0603デフォルトの名無しさん
2005/07/05(火) 13:19:55C#とかJavaのメモリの使い方で質問なんですけど、
この2つって、クラスのインスタンスを作るときに
必ず new しますよね。
これってクラスのインスタンスは必ずヒープメモリ上
に作られて、スタックに積まれることはないという
認識で良いんでしょうか?
C++の場合はローカル変数として宣言した場合など
スタック上にインスタンスが生成されていると思うんですが、
C#やJavaではメモリの使い方を変えているという認識で
いいんですかね?
C#に関しては理論的には「組み込み型」が存在しないと
思うのですが、スタック上に積まれるのはすべて
参照型なのでしょうか?
0604デフォルトの名無しさん
2005/07/05(火) 13:30:590605デフォルトの名無しさん
2005/07/05(火) 15:41:53Vartypeから派生したものとかなんとか読んだ記憶が
あります。なるほど。参照型じゃないものも確かにありますね。
0606デフォルトの名無しさん
2005/07/05(火) 19:05:44ファイルの相対パスとカレントの絶対パスからファイルの絶対パスを求めたりするメソッドってありますか?
0607デフォルトの名無しさん
2005/07/05(火) 19:13:51前者は必要性が分からないぜ。
0608デフォルトの名無しさん
2005/07/05(火) 19:46:50惜しい!!
0609デフォルトの名無しさん
2005/07/05(火) 22:49:40P/Invoke で PathRelativePathTo あたりを呼び出すとか。
0610デフォルトの名無しさん
2005/07/05(火) 22:52:32Exe も dll も C# で作成したものです。
この時、呼び出される DLL の1本に機能改善を行ないました。
で、その DLL が参照している別のDLL(カスタムコントロール)の
バージョンが、この DLL を当初配布した時と今とでアセンブリ
バージョンが異なっています。
この時、変更を加えた DLL 以外はリビルドなしで、
新しい DLL と共存する事はできないでしょうか?
例として
MENU.exe が FUNC1.DLL と FUNC2.DLL と FUNC3.DLL を呼びだす。
FUNC1,2,3 はどれも CUSTOM.DLL を参照、使用している。
FUNC3.DLL を機能改善した。この時 CUSTOM.DLL のバージョンもあがっている。
この状態で、既に MENU.EXE, FUNC1,2,3 が導入されている PC に
新しい FUNC3.DLL と CUSTOM.DLL を導入し、従来の MENU.EXE,
FUNC1, FUNC2 と、新しい FUNC3 を共存させたいということになります。
やはり無理でしょうか?わかりづらいかと思いますがよろしくお願いします。
0611デフォルトの名無しさん
2005/07/05(火) 23:05:540612デフォルトの名無しさん
2005/07/05(火) 23:33:23これの話か?とりあえず読んでみれ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconAssemblyVersionRedirection.asp
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_04/idnfw11_04_02.html
0613610
2005/07/05(火) 23:36:32あぁ、すみません。実際に試した結果でできなかったので、
何か方法ややり方があるのであればアドバイスを頂きたく
思いました。
実際やってみた結果は
「アセンブリの1つ以上の型を読み込めませんでした」
でした。よろしくお願いします。
0614デフォルトの名無しさん
2005/07/05(火) 23:52:42そして、dllのバージョンを全て固定番号にするという行為に出たシステムが……orz
0615デフォルトの名無しさん
2005/07/06(水) 00:01:21俺はそれと似たようなものが最近、必要になった。
複数のファイルを管理する都合で。
0616デフォルトの名無しさん
2005/07/06(水) 00:03:07既存のライブラリのint Hoge(char* name, int length)というメソッドを呼び出すときに、
C#側でint Hoge(byte[] name, int length)でないと上手く行きませんでした。
一つ目の引数をchar[] name にするとダメでした。
Cのchar*に、C#のchar[]では何故いけないのでしょうか?
0617デフォルトの名無しさん
2005/07/06(水) 00:05:560618デフォルトの名無しさん
2005/07/06(水) 00:06:54というかbyte[]でうまくいくのか。
俺ならIntPtrにしてるところだな。
0619デフォルトの名無しさん
2005/07/06(水) 00:18:58C#ではchar型は16bitだったのですね
char = 1だと思い込んでました。
ありがとうございました。
あともう一点・・・
void*はC#では何に対応するのでしょうか?
4byteだからint[]とかで大丈夫かと思ってやってますが(今のところ動いてます
一般的にvoid*はどうするべきですか?
0620デフォルトの名無しさん
2005/07/06(水) 00:22:59読み書きとかバイト配列との相互コピーとかメモリ確保とかはSystem.Runtime.InteropServices.Marshalクラスの各メソッドで行う。
面倒だから対象の関数にマッチするのを使うことも多いけどな。
0621デフォルトの名無しさん
2005/07/06(水) 00:25:23COMだとtypelib使って自動でラッパ生成させる方法しかやったことないんで
よくわからんが、
DLLの場合だと、DllImportAttributeでCharSet指定すれば、Unicodeと
Ansiの変換は勝手にやってくれるはずよ
[ DllImport( "foo.dll", CharSet=CharSet.Ansi )]
とか。
StringBuilderでもいいはず。
詳しくは.NET SDKドキュメントなり、interopサンプルでも見ればいい。
0622デフォルトの名無しさん
2005/07/06(水) 00:28:14最近P/Invoke使ってないから忘れたけど
0623622
2005/07/06(水) 00:28:370624デフォルトの名無しさん
2005/07/06(水) 00:28:55>>618
>>620
Cに明るくないのでポインタは避けたかったのですが明日試してみることにします。
ありがとうございました。
0625622
2005/07/06(水) 00:30:36何かに使えるかもしれないから覚えとこう
0626デフォルトの名無しさん
2005/07/06(水) 00:31:41Cに明るくないのにP/Invokeってある意味猛者だな
0627デフォルトの名無しさん
2005/07/06(水) 00:32:52Cのchar*はテキストであるとは限らないから
ANSI<->Unicode変換を避けたければ当然byte[]しかないだろうね
0628デフォルトの名無しさん
2005/07/06(水) 00:32:53一つ注意を。
関数に配列を渡すだけなら良いけど、関数でその配列の要素に書き込みが発生する場合、そのままでは変更は破棄される。
変更を受け取るにはその配列型の引数にSystem.Runtime.InteropServices.OutAttribute属性を付ける必要がある。
0629デフォルトの名無しさん
2005/07/06(水) 00:35:52ms-help://MS.NETFrameworkSDKv1.1.JA/cpguidenf/html/cpconmarshalingstrings.htm
でも見れ
0630デフォルトの名無しさん
2005/07/06(水) 00:41:03//ヘルプなら直接URI書くよりタイトルを書いて欲しいところ。
0631デフォルトの名無しさん
2005/07/06(水) 00:43:48.NET Frameworkを使用したプログラミング
-->アンマネージドコードとの相互運用
をざっくり嫁
上のページは「文字列のマーシャリング」だ
0632599
2005/07/06(水) 00:50:50結局なんも代わらない。やっぱりどうにもなんようだ。
どこかに簡単に色付きTextEdit作れそうな土台ないかな?
0633デフォルトの名無しさん
2005/07/06(水) 01:41:320634デフォルトの名無しさん
2005/07/06(水) 02:04:01当たり前w
でもUNIX上に乗るCLIがあれば、UNIXのシステムコールをするだろ。
0635デフォルトの名無しさん
2005/07/06(水) 07:49:11それはJavaに対する利点
0636デフォルトの名無しさん
2005/07/06(水) 07:54:290637デフォルトの名無しさん
2005/07/06(水) 11:33:26自分はc#+マネージドダイレクトxを学習中のものですが、
一応ダイレクトインプットで
キーボードとマウスはコントロールできるようにはなったのですが、
ジョイスティックをコントロールするにはどうすれば良いのでしょうか?
もしかしてまだジョイスティックはコントロールできないのでしょうか?
バージョンアップを待つか、c++とネィティブなダイレクトxに手を出すか
するしかないのでしょうか?
知ってる方いらしましたらお願いします。
0638デフォルトの名無しさん
2005/07/06(水) 11:55:350639デフォルトの名無しさん
2005/07/06(水) 12:20:16> ジョイスティックをコントロールするにはどうすれば良いのでしょうか?
から
> もしかしてまだジョイスティックはコントロールできないのでしょうか?
に飛躍するのか聞いてみたいもんだ。
列挙体とかにもそれっぽいのがあったりするだろうに。
0641デフォルトの名無しさん
2005/07/06(水) 13:41:08対応するのはJNIでしょ。
でおそらくc#のネイティブ呼び出しほどJNIは使われてない気がする。
javaプログラマにjavaから入った人が多いからか
「その機能はjavaだから無理です」って言いやすいからか。
0642デフォルトの名無しさん
2005/07/06(水) 16:49:07単純にお手軽さが違うからでしょ
0643デフォルトの名無しさん
2005/07/06(水) 22:37:480644デフォルトの名無しさん
2005/07/06(水) 23:23:480645デフォルトの名無しさん
2005/07/06(水) 23:33:500646デフォルトの名無しさん
2005/07/06(水) 23:40:100647デフォルトの名無しさん
2005/07/07(木) 00:23:26そもそもDirectXが必要なソフト開発でC#を使う必要性がない希ガス
0648デフォルトの名無しさん
2005/07/07(木) 00:25:15音を自由に出力するにはDirectSoundを使うしかないのだが
0649デフォルトの名無しさん
2005/07/07(木) 00:34:54World Wind
0650デフォルトの名無しさん
2005/07/07(木) 00:47:41C#でもDirectXの知識は必要。
0651デフォルトの名無しさん
2005/07/07(木) 00:59:090652デフォルトの名無しさん
2005/07/07(木) 18:12:37サーバ側:ASP.NET WEBサービス + クラスライブラリ
という形で開発してるんだけど質問させてください
サービスからクラスライブラリを使ってサーバ側のフォルダにファイルの保存と呼び出しを行いたいのですが
クラスライブラリで指定するファイルの保存場所はどういった形式で書けばいいのでしょうか?
現在は@"C:\Image\"+ファイル名
という形で指定してますが、読み込み時に指定されたパスのフォーマットはサポートされませんといったエラーがでてしまいます
ウィンドウズアプリケーションから直接クラスライブラリを呼び出した場合は問題なく動くのですが・・・
解決策を知ってる方がいたら教えてください。お願いします
0653デフォルトの名無しさん
2005/07/07(木) 21:09:53正体不明の「クラスライブラ」の質問などされても誰も答えられないから、
FileStream あたりで試してみてから質問するべきでは・・・
0654デフォルトの名無しさん
2005/07/07(木) 21:11:570655デフォルトの名無しさん
2005/07/07(木) 23:16:410656デフォルトの名無しさん
2005/07/07(木) 23:19:390657デフォルトの名無しさん
2005/07/07(木) 23:41:21Streamを使ってシリアルの送受信をしてるので
受信待ち受けのために閉じるわけにはいかないんです
0658デフォルトの名無しさん
2005/07/07(木) 23:47:320659デフォルトの名無しさん
2005/07/08(金) 14:48:31天秤座の聖衣のことか?「クラスライブラ」って。
0660デフォルトの名無しさん
2005/07/08(金) 16:30:49「イベントハンドラ」って言ったら正確には何を指すんですか?
(1)イベント用に定義したデリゲート(XxEventHandler)
(2)そのデリゲートのインスタンス(MyControl.Xx)
(3)そのインスタンスに入れるメソッド(myControl1_Xx())
0661デフォルトの名無しさん
2005/07/08(金) 17:45:26特にそんなのの正確な定義ってない気もするけど、
俺の認識では (3)。
0662デフォルトの名無しさん
2005/07/08(金) 23:57:45メソッドの中で、自分が属してるクラス名やメソッド名の文字列を取り出す方法ありませんか?
検索しても見つからなくて。
属してるusing名も取り出せるのかな?
0663デフォルトの名無しさん
2005/07/09(土) 00:00:59クラス名はthis.ToString()とでもすればいいだろ(staticメソッドでなければ)
メソッド名はリフレクションを使う
System.Reflection.MethodBase.GetCurrentMethod().Name
とかそんな感じだ
0664デフォルトの名無しさん
2005/07/09(土) 00:23:55ありがとうございます、今からやってみます。
0665デフォルトの名無しさん
2005/07/09(土) 00:50:22※This.GetType()もダメよ。
確実にやるなら
System.Reflection.MethodBase.GetCurrentMethod()からたどれ。
0666デフォルトの名無しさん
2005/07/09(土) 01:36:07sutaticメソッドとmain()以外は問題なく出来ました、ありがとうございます。
using名も出てくるんですね。
用途は単なるエラーログです。
sutaticはthis.ToStringがだめでした。
0667デフォルトの名無しさん
2005/07/09(土) 01:44:14メソッドを書いてるクラスじゃなくて派生クラスの名前が
出ちゃうと思うけど、それは問題ない?
0668デフォルトの名無しさん
2005/07/09(土) 02:53:28ログ用途ならlog4j.net使え。独自仕様のログ処理とか無駄の極致。
前任者が独自仕様のログ処理してた場合、後任の人間は激しく気分が悪い。
0669デフォルトの名無しさん
2005/07/09(土) 02:56:470670599
2005/07/09(土) 03:22:46たぶん、ログ吐かせたい訳ではなくおそらくそのエラー吐くクラスを特定されると
まずいから、小細工してエラーを独自に吐かせようとしてるんじゃね?それだとlog4でも辛くないか?
0671デフォルトの名無しさん
2005/07/09(土) 04:09:23従来C++で
signal(Ctrl+Cをあらわす定数, 実行される関数)
というようにあらわしていた割り込みシグナルを
c#で実現するにはどのようにしたらよいのでしょうか。
signal関数に該当するものはC#では見当たらないので
ちょっと悩んでしまって、、、当方初心者なんですが
何かアドバイスいただけたらと思います。
0672デフォルトの名無しさん
2005/07/09(土) 11:14:41.NET 2.0ではSystem.Consoleのイベントで拾えるようになったけど、
.NET 1.Xでは標準ライブラリではそういう機能はないと思う。
まあ、最悪Cのsignalを直接使う手もあるんだけどね。
const int SIGINT = 2;
delegate void sigfunc(int n);
[DllImport("msvcrt.dll")]
static extern void signal(int sig, sigfunc f);
static void Main() {
signal(SIGINT, new sigfunc(SigTest));
Console.ReadLine();
}
static void SigTest(int sig) {
Console.WriteLine("called.");
}
0673デフォルトの名無しさん
2005/07/09(土) 11:18:11今のところ問題はないようです。(5クラスぐらいしか出していないが)
有難うございます。
>>668
log4j.netを知らないので、調べてみます。(チラッと見た限りでは用途が違うような
>>670
もう、なんといっていいか、人間不信か?
0674デフォルトの名無しさん
2005/07/09(土) 14:49:53昔からJAVAでもいるけど仕様にあってないヤバイ作りこみしていて
出るはずのないエラーを隠すために小細工するやつはよくいるよ。
0675デフォルトの名無しさん
2005/07/09(土) 15:17:310676デフォルトの名無しさん
2005/07/09(土) 15:26:12これか。
http://logging.apache.org/log4net/
0677デフォルトの名無しさん
2005/07/09(土) 16:13:30>>671です。
「.NET2.0のイベントで拾える」、というのは
System.Console.CancelKeyPress
等を利用する、ということでしょうか。
当方の開発環境は残念ながら.NET2.0ではありませんので、
アドバイスに従い、まずはCで記述して確認してみます。
0678660
2005/07/09(土) 17:38:58私も個人的には(3)でした。Webを見ると(1)や(2)に使ってる
こともよくあるので。。。
でも今考えたら、デリゲートを関数ポインタだと思えば(1)もそうだし、
だったら(2)もそうだという気もします。
なんか納得しました。
0679デフォルトの名無しさん
2005/07/09(土) 18:30:02>>671です。
672さんの方法で確認したところ、
問題なくCtrl+Cのシグナルを拾うことができました。
ありがとうございます。
signalでの割り込みシグナル受信時の実行関数の指定って、
C++だったら頻繁に使われる手法だと思っていたんですが
C#ではなかなかすっきり書けないんですね。
皆さん困ってないのかな…。
0680デフォルトの名無しさん
2005/07/09(土) 18:51:09C Runtimeの関数を使うよりも、Windows API(SetConsoleCtrlHandler)を使った方がいいんじゃね?
0681デフォルトの名無しさん
2005/07/09(土) 19:06:55DictionaryBaseを継承すると、foreachのときにGetEnumeratorが
DictionaryEntryを返すので、キャストするのが面倒なんですが
インデクサで返す型と同じ型を返すようにする方法はないですか?
またはそれに適した基底クラスはないですか?
0682デフォルトの名無しさん
2005/07/09(土) 19:10:09ぼくもそうおもいます
0683デフォルトの名無しさん
2005/07/09(土) 19:45:40HashtableみたいにValuesメンバが値のコレクションを返すようにしたら?
0684デフォルトの名無しさん
2005/07/09(土) 20:38:07明示実装されてるのかな、DictionaryBaseのインターフェイスとしては出てこないね。
IDictionaryにキャストしたら使えると思うが…
0685デフォルトの名無しさん
2005/07/09(土) 21:18:39C++でクリティカルセクションを使用していたのですがC#に書き直したいと思っています。
同じ機能が実現できればいいのですが.NETにはこのような機能はないのでしょうか?
排他制御をかけたい部分をlock (this)ステートメントでくくる、あるいはMutexを使用する、
という方法があるようですが、2つの使い分け方や違いがよくわかりません。
それとも、もっと簡単な方法があるのでしょうか。ご教授ください。
関数A
InitializeCriticalSection( &critSec );/*初期化
/* _beginthreadで関数Bをスレッド起動 */
DeleteCriticalSection( &critSec );/*解放
関数B
EnterCriticalSection( &critSec );/* 処理スタート
/* メモリへの書き込み処理 */
/* 同一クラスの関数Cもそのメモリに書き込むので */
/* 排他制御をかけたい */
LeaveCriticalSection( &critSec );/* 処理終了
関数C
EnterCriticalSection( &critSec );/* 処理スタート
/* メモリへの書き込み処理 */
/* 同一クラスの関数Bもそのメモリに書き込むので */
/* 排他制御をかけたい */
LeaveCriticalSection( &critSec );/* 処理終了
0686デフォルトの名無しさん
2005/07/09(土) 21:26:17同一の機能ならWindows APIの方が望ましいのでしょうか。
0687デフォルトの名無しさん
2005/07/09(土) 21:27:27Mutexはプロセス間での排他制御も行ないたい場合。
0688たびたびすみませんが・・
2005/07/09(土) 21:43:07すると、lockで排他制御を実現するんですね。
早速実際にやってみたところ、下記メソッドBの
lockステートメント内でクラスのメンバ変数に値を代入したのですが
◎部分でメンバ変数内を参照すると反映されていない…
lockステートメント内での変数の変更は
ステートメント外には反映されない、ということなんでしょうか?
メソッドA {
スレッドB = new Thread(new ThreadStart(メソッドB));// スレッド処理
スレッドB.Start();// スレッドの開始
}
メソッドB {
lock (this) {/* 処理スタート
/* メモリへの書き込み処理 */
/* 同一クラスの関数Cもそのメモリに書き込むので */
/* 排他制御をかけたい */
メンバ変数 = 1;
Console.WriteLine("{0}", メンバ変数);
}/* 処理終了
/* ◎lockステートメント外で参照すると・・・
Console.WriteLine("{0}", メンバ変数);
}
メソッドC {
lock (this) {/* 処理スタート
/* メモリへの書き込み処理 */
/* 同一クラスの関数Bもそのメモリに書き込むので */
/* 排他制御をかけたい */
}/* 処理終了
}
0689& ◆yFciIU7CCs
2005/07/09(土) 21:46:45lockステートメントを使って再度確認してみます。
0690デフォルトの名無しさん
2005/07/09(土) 21:58:07いや、それじゃ変数の値が反映されないだろ。
0691デフォルトの名無しさん
2005/07/09(土) 22:19:48ttp://www.atmarkit.co.jp/fdotnet/mthread/index/index.html
0692デフォルトの名無しさん
2005/07/09(土) 23:42:36を見ながら、複数のフォルダに入っている複数のファイルをひとつのLzhに圧縮しようとしてます。
c:\hoge\a.txt
c:\hoge\b.txt
c:\hoge\hage\c.txt
c:\hoge\hage\d.txt
というファイルがあるとするとき、
a.txtとc.txtだけを階層関係を維持したまま、圧縮するにはどうしたらいいでしょうか?
上記のURLの最後の例で、ベースディレクトリにc:\hoge\ レスポンスファイルにa.txt[改行]hage\c.txtと記述しても
LZH圧縮されません。(圧縮が行われず、LZHファイルも作成されない。)
どう記述すればいいんでしょうか?よろしくお願いします。
0693デフォルトの名無しさん
2005/07/10(日) 01:46:53.NETでは、標準入出力にテキストデータしか使えないのですか?
0694デフォルトの名無しさん
2005/07/10(日) 10:58:58OpenStandard〜メソッド参照。Streamで使えるよ。
0695デフォルトの名無しさん
2005/07/10(日) 21:02:40Bottom line In plain English this means you can use this library in commercial closed-source applications.
は「簡単に言えばこのライブラリは商用クローズドソース
アプリケーションに使ってもいいよ。」
って言うことですか?
つまりフリーソフトに使うときでもソースコードを開示しなくてもよいということでFA?
0696デフォルトの名無しさん
2005/07/10(日) 21:06:37たしか、DLL 参照による使用に関しては、こっちのコードまで GPL が感染する事は無かった筈
多分その意味で在ってる。
0697デフォルトの名無しさん
2005/07/10(日) 23:07:41ライブラリ利用が認められているのは LGPL じゃないと駄目だった気がするが。
0698デフォルトの名無しさん
2005/07/10(日) 23:16:11>The library is released under the GPL with the following exception
「ライブラリは以下の例外事項を含んだGPLでリリースされている。」
0699デフォルトの名無しさん
2005/07/10(日) 23:44:58サンクス。
ちなみにふつうのGPLライセンスだと
DLL参照かどうかに関わらず感染するみたいです。
Wikipedia オープンソース・LGPLの項より
〜GPL はリンクされるすべてのソースコードが GPL であることを要求するので、ライブラリとしての価値を低くしてしまう。つまり、ライブラリが GPL であると、そのライブラリは GPL のソフトウェアを作るためにしか使えないものとなってしまう。
0700デフォルトの名無しさん
2005/07/11(月) 00:48:210701デフォルトの名無しさん
2005/07/11(月) 08:49:57プラグインとして設定したdll、クラスを使用できるようにしといて。
0702デフォルトの名無しさん
2005/07/11(月) 14:16:48いっしょに配布したらだめだろうと思う。
ユーザーが他者から勝手にダウンロードしてリンクした場合はダークだな。(気持ち的には大丈夫かな?
ただ、ソフトの説明に、ダウンロード先や使い方の説明をしたらだめだろうと思われ。
ただここまでして、GPLを使うならぐらいなら、そんなの自分で作る。w
0703デフォルトの名無しさん
2005/07/11(月) 18:22:15DLLとメモリ上で実行時に結合するので、DLLを使用するソフトはDLLの二次著作物である。
そしてDLLの二次著作物は、配布するときはGPLに基づいて配布しなければならない。
意見2
DLLを呼び出すのは、ただ単に呼び出し規約に従って呼び出すだけだから、二次著作物でもなんでもない。
二次著作物でない以上、ソフトウェアを作っても何の義務も負わない。
ライセンスとかGPL関連のスレで散々繰り返されてきた議論。
そしてどちらの意見が日本において正しいかは、判例がないので、裁判になるまで分からない。
仮に意見1が正しかった場合、DLL参照でもリフレクションでもアウト。
意見2が正しければ、DLL参照でもリフレクションでもOK。
判例がないので
0704デフォルトの名無しさん
2005/07/11(月) 18:42:50アメリカ等の判例は無いのか?
0705デフォルトの名無しさん
2005/07/11(月) 18:53:240706デフォルトの名無しさん
2005/07/11(月) 19:03:15たぶん無かったと思うよ
0707デフォルトの名無しさん
2005/07/11(月) 19:03:21スレ違いだけど、オープンソース一般とGPLを一緒にしないで。
0708デフォルトの名無しさん
2005/07/11(月) 19:13:010709デフォルトの名無しさん
2005/07/11(月) 19:22:440710デフォルトの名無しさん
2005/07/11(月) 19:47:160711デフォルトの名無しさん
2005/07/11(月) 20:39:490712デフォルトの名無しさん
2005/07/11(月) 20:58:190713デフォルトの名無しさん
2005/07/11(月) 21:15:15つーか意見2だったらLGPLいらんやん
0714デフォルトの名無しさん
2005/07/11(月) 21:18:08使う側をGPLにしたくない時はGPLなライブラリは初めから使わない事にしてる。
一旦GPL絡みで叩かれ始めると、もう際限なく違法だのアンフェアだのと叩かれ
捲くる。単にソースを手に入れたいだけの奴や面白がって叩く奴まで集まってき
たら正当性も糞もない。危うきには近寄らずが一番。
0715デフォルトの名無しさん
2005/07/11(月) 21:19:14そうだよ
0716デフォルトの名無しさん
2005/07/11(月) 21:29:310717デフォルトの名無しさん
2005/07/11(月) 21:45:08アセンブリ、参照、
アプリケーションがリソースにアクセスする方式、、、
これらのことをわかりやすく教えてくれないでしょうか?
または、教えてくれる書籍かwebなどありましたらお願いします。
今日一日、あっちこっちの本屋を巡ってみたのですが、
一通り最新のc#参考書を読んでみたのですが、かなり詳しい本でも、
その辺の情報はほとんど無いに等しかったです。
詳しい人は一体どこから情報を手に入れているのでしょうか?
知ってる人いましたらお願いします。
0718デフォルトの名無しさん
2005/07/11(月) 21:57:030719デフォルトの名無しさん
2005/07/11(月) 22:58:54解決法が見つけられなかったのでお願いします。
Visual Studio 2003のC#でGroupBoxの中にGroupBoxを作り
それぞれFlatStyleをSystemにし、マニフェストでXPスタイルにします。
すると内側GroupBoxのフォントとフォントサイズがおかしく表示されるようになりました。
(最も外側のGroupBoxはちゃんと正常されます)
はじめは問題なかったのですが、.NET Framework1.1 SP1をあてると?正常に表示されなくなるようです。
どなたか解決方法をご存知でしたらよろしくお願いします。m(_ _)m
0720デフォルトの名無しさん
2005/07/11(月) 23:18:42ttp://blogs.axosoft.com/dans/archive/2005/06/30/1824.aspx
0721デフォルトの名無しさん
2005/07/11(月) 23:24:32TopItem で期待した値が返ってこないのはなぜ
0722デフォルトの名無しさん
2005/07/11(月) 23:32:51ex: int a = 1; a.ToString()→01 ←こんな感じにしたいんです。
0723デフォルトの名無しさん
2005/07/11(月) 23:41:400724デフォルトの名無しさん
2005/07/12(火) 02:10:25c#からdllファイルを作成する方法は、
コマンドラインコンパイルしか方法がないのですか?
今日は、コマンドラインからコンパイルできるように設定するだけでえらく時間食われてしまいました。
俺のは古いバージョンなのですが、新しいバージョンを入れてる人なら、
dllファイルを作成するビルドオプションがビジュアルエディタからワンクリックで
設定できたりしますか?
こんな最新のエディタがコマンドラインからしかコンパイルできないなんて
漏れ的にはちょっとしたカルチャーショックなのですが、皆さんはその辺、どうですか?
0725デフォルトの名無しさん
2005/07/12(火) 02:12:55VSなら、簡単だが。
0726デフォルトの名無しさん
2005/07/12(火) 02:17:46それなら解決法がここに載ってる
http://dobon.net/vb/dotnet/vs/stdmakeclasslibrary.html
俺も検証してないけど
0727デフォルトの名無しさん
2005/07/12(火) 02:31:24スタンダードです。
>>726
ありがとうございます。
みてます
0728デフォルトの名無しさん
2005/07/12(火) 02:57:27今日の夕方パソコンつけると起動時間に10分ぐらいかかりほかの動作もかなり時間かかったので、
プロセス見ると48個も開いてました。
おまけにさっきまで要領あったローカルディスク(C)を見たら500MBぐらいになっており、 「元:28GB 残り:9GBぐらい」
ローカルディスクCの場所で、プロパティ開いたらほぼ使ってるんですが。
windowsやプログラムファイルス見てもそこまで要領食ってるものはないのですが。
やっぱりこれってウイルスですよね・・
思い当たるウイルスなどありましたら教えてください。
ノートンの検索でもひっかからなかったらしいので。対処できません・・
よろしくおねがいします
os:windowsXP
0729デフォルトの名無しさん
2005/07/12(火) 02:59:460730デフォルトの名無しさん
2005/07/12(火) 04:09:53何でまたC#スレに?
HDDの容量が減る、でピンと来るのはウイニー関係のウイルスだろ。w
0731デフォルトの名無しさん
2005/07/12(火) 04:41:30パソコンが重たくて中々動作しなかったので、一番上にあった奴に書かしてもらったんです・・・。すいません蛇魔でした。
ウィニー最近久しぶりに立ち上げた時exeファイルでも踏んだかな。。
取り合えず調べます どうもです
0732デフォルトの名無しさん
2005/07/12(火) 06:44:070733デフォルトの名無しさん
2005/07/12(火) 10:08:08ほら、Cドライブだから。
0734デフォルトの名無しさん
2005/07/12(火) 11:10:10多くの個人情報が流されたのは間違いが無い。
今度はどんなニュースに。w
0735デフォルトの名無しさん
2005/07/12(火) 16:15:54threadpoolのQueueUserWorkItemでinvokeを呼ぶメソッドを25個登録すると、
24個目のinvokeを呼ばれた時にSystem.InvalidOperationException
(メッセージ:操作を完了するために十分なスレッドがThreadPool
オブジェクトにありませんでした)が発生します。
対処法としては、QueueUserWorkItemで登録するメソッド数を制限する以外
ないのでしょうか?
0736デフォルトの名無しさん
2005/07/12(火) 16:59:00ん〜、ごく簡単なコードでは再現しないな。
普通に25個実行して残りは待機する。
再現コード書けない?
0737デフォルトの名無しさん
2005/07/12(火) 17:39:11ありがとうございました。
無事解決できました。
0738デフォルトの名無しさん
2005/07/12(火) 19:19:03サンプルソースは以下のものです。
WINDOWSアプリで作成して、対向として
WEBサービスを作成しました。
// 最初にスレッドプールのスレッドを24個使用
private void button1_Click(object sender, System.EventArgs e)
{
for(int i = 0; i < 24; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(TP));
}
}
// 次にWEBサービスを呼ぶ
private void button2_Click(object sender, System.EventArgs e)
{
localhost.Service1 serv = new Req.localhost.Service1();
System.Diagnostics.Process P = System.Diagnostics.Process.GetCurrentProcess();
Console.WriteLine("WEBサービス呼び出し:スレッドID "+P.Id.ToString());
string s = serv.HelloWorld();
Console.WriteLine(s);
}
0739デフォルトの名無しさん
2005/07/12(火) 19:19:23static void TP(Object stateInfo)
{
// No state object was passed to QueueUserWorkItem, so
// stateInfo is null.
MessageBox.Show("TEST");
}
static void ThreadProc(Object stateInfo)
{
try
{
// No state object was passed to QueueUserWorkItem, so
// stateInfo is null.
localhost.Service1 serv = new Req.localhost.Service1();
serv.Timeout = 1000000;
string s = serv.HelloWorld();
}
catch( Exception ex )
{
// button2_Click がクリックされたらここに入ってくる
int i = new int();
int j = new int();
int k = new int();
int l = new int();
ThreadPool.GetAvailableThreads(out i, out j);
ThreadPool.GetMinThreads(out k, out l);
Console.WriteLine(ex.ToString());
}
}
0740デフォルトの名無しさん
2005/07/12(火) 20:51:36Webサービスとなるとあんまり助言はできないが、
Webサービスのプロクシクラスには非同期用メソッドが用意されてるはずだからそれを使ってみるのは?
0741デフォルトの名無しさん
2005/07/12(火) 21:01:51特定のコントロールって条件でなければForegroundしたあとにSendKeysって方法でできたんですが、検索してもコントロールまでは指定できないみたいで・・・
相手プログラムのコントロールのクラス名はわかってます
0742デフォルトの名無しさん
2005/07/12(火) 21:04:20ていうかもうC#じゃないね。
0743デフォルトの名無しさん
2005/07/12(火) 21:11:05button1_Click()でWaitCallbackに指定しとるのはTP()だし
button2_Click()ではWebService呼び出しを単に同期で実行しとるし
そのThreadProc()って、ナニ?
0744デフォルトの名無しさん
2005/07/13(水) 07:47:33すいません ThreadProc() は意味無いです。
非同期はこれから試してみます。
0745デフォルトの名無しさん
2005/07/13(水) 12:22:22DLLが公開しているメソッドを呼び出したいのですが、
・string の終端文字のポインタをどうやって取得するか (targetendp)
・二重ポインタ(findp)の渡し方
の2点をアドバイスしてもらえないでしょうか?
対象のメソッドは次の物で
int foo(
char* pattern, // 検索したい文字列
char* target, // 検索対象の文字列
char* targetendp, // 同、NULL 終端文字へのポインタ
FIND** findp, //(戻り値)FIND 構造体
);
C#側では次のようにしてます。
[DllImport("BREGEXP.DLL")]
public static extern int foo(
string pattern,
string target,
IntPtr targetendp
ref IntPtr findp
);
0746デフォルトの名無しさん
2005/07/13(水) 12:42:32終端文字へのポインタって何でそんなマニアックな。
ん〜、Encoding.GetBytesでバイト配列にして、
Marshal.AllocHGlobal/Copyでバイト配列+終端文字分確保・コピーして、
//ここまでの作業はMarshal.StringToHGlobalAnsi(Auto)とMarshal.ReadByte辺りで代用できるかな。手間は大差ないが
AllocHGlobalで確保したIntPtrにバイト配列の長さ足せば終端文字のポインタになる。
ポインタのポインタはref IntPtrで宣言してるところから見て理解してるように思えるけど?
//普通は呼出側がメモリ確保するだろうし。->Marshal.AllocHGlobal
(string pattern, IntPtr target, IntPtr targetendp, ref IntPtr findp)
0747デフォルトの名無しさん
2005/07/13(水) 12:55:59「終端文字のポインタ」は「NULL 終端文字へのポインタ」を変に略したものと思われ。
0748747
2005/07/13(水) 12:59:11回線切ってry
0749デフォルトの名無しさん
2005/07/13(水) 13:09:01ありがとうございます。
某正規表現DLLのラッパー作らないといけなくなり、そのための質問でした。
0750745
2005/07/13(水) 14:54:43報告まで
string target_base="foobar";
IntPtr target = Marshal.StringToHGlobalAnsi( target_base );
IntPtr targetendp = new IntPtr(p.ToInt32() + Encoding.Default.GetByteCount(target) );
0751デフォルトの名無しさん
2005/07/13(水) 19:42:140752デフォルトの名無しさん
2005/07/13(水) 19:54:24……名前解決で失敗してるっぽいのが気になるけど気にしなーい。
0753デフォルトの名無しさん
2005/07/13(水) 20:29:00重いけどけっこう重宝するんだよな。
0754デフォルトの名無しさん
2005/07/13(水) 23:50:09WindowsCEの_wfopen(fopenは使えないっぽい)ではカレントディレクトリの概念がないのか
相対パスを使ってオープンできないようなので
仕方なく実行ファイルのパスを取得して絶対パスにしようと考えたのですが、
http://dobon.net/vb/dotnet/vb6/apppath.html
上記のサイトにある
System.Reflection.Assembly.GetExecutingAssembly.Location
Application.StartupPath
Application.ExecutablePath
System.AppDomain.CurrentDomain.BaseDirectory
のいずれの方法もCompact Frameworkでは削られていて使うことが出来ません。
現在はGetModuleFileNameをp/Invokeで呼び出して取得していますが、
できればp/Invokeを使わずに取得したいのです。
何かいい方法はないでしょうか?
0755754
2005/07/13(水) 23:51:51↓
WindowsCEではカレントディレクトリの概念がないのか
に訂正します
0756デフォルトの名無しさん
2005/07/14(木) 00:01:47ttp://www.gotdotnet.com/japan/quickstart/CompactFramework/doc/getappdir.aspx
0757デフォルトの名無しさん
2005/07/14(木) 00:02:350758デフォルトの名無しさん
2005/07/14(木) 00:07:15にでてるサンプルコードやそれをコンパイルしたものって
自作フリーウェアに勝手に添付していいものなんでしょうか?
どうも権利関係の記述が見つからないんですが……
0760デフォルトの名無しさん
2005/07/14(木) 14:00:29その中にTextBoxがあって、テキストボックスにフォーカスが当たってる
状態で開きたいんですけど、TabIndexの設定の仕方がわかりません。
コンテナの中のコントロールが、どうしてもコンテナより順番があとに
なってしまいます。あとForm_LoadでtextBox1.Focus()とかやっても
無効でした。
0761デフォルトの名無しさん
2005/07/14(木) 14:03:13「Load」と「Focus()」という文だけ読んで脊髄反射してみる。
http://www.atmarkit.co.jp/fdotnet/dotnettips/226winloadfocus/winloadfocus.html
0763デフォルトの名無しさん
2005/07/14(木) 21:54:08Threadを使用して呼び込むとうまく動作してくれません。具体的には
--mainLoop-------------------------------------
GetKeyboradState(byte)
↓
if(((int)byte[(int)Keys.A]&0x80)!=0)
Console.WriteLine("A");
-----------------------------------------------
という処理をしているのですがこれを普通に
mainLoop()
で呼ぶと動作するのに
Thread t=new Thread(new ThreadStart(mainLoop));
t.Start();
で呼ぶと動作してくれません。state[(int)Key.A]の値が 1 or 0でキーが入力されたことに
なってくれません。
ループでまわしているのでThread使ってやったほうが楽に終了・一時停止しょり出来るので
使いたいのですが、原因がわからなくて困っています、どなたかご存じないでしょうか。
環境
WindowsXP
Microsoft Visual Studio 2003
0764デフォルトの名無しさん
2005/07/14(木) 22:00:350765デフォルトの名無しさん
2005/07/14(木) 22:01:190766デフォルトの名無しさん
2005/07/14(木) 22:01:41MSDNには目を通したかい?
> スレッドがメッセージキューからキーボードメッセージを削除すると、仮想キーの状態が変化します。
> キーボードメッセージがスレッドのメッセージキューにポストされたり、
> 他のスレッドのメッセージキューへのキーボードメッセージのポストや削除が発生しても、状態は変化しません。
> 対応するキーボードメッセージがメッセージキューから取得されたかどうかにかかわりなく、
> 個別のキーの現在の状態を取得するには、GetAsyncKeyState 関数を使います。
メインスレッドで実行させるようにInvokeを使うのも有りだな。
つかわざわざ各スレッドで取得せんでも、取得してからスレッドを起動させるようにしちゃいかんのかね。
0767デフォルトの名無しさん
2005/07/14(木) 22:53:500768デフォルトの名無しさん
2005/07/14(木) 23:44:34ありがとうございます(*´∇`*)MSDN…Googleばっかり使ってて存在忘れてましたorz
> つかわざわざ各スレッドで取得せんでも、取得してからスレッドを起動させるようにしちゃいかんのかね。
流れ的には
メインスレッド起動
↓
バックグラウンドでスレッド起動
↓
ループ処理(ゲーム)
↓
メインスレッド終了
↓
自動的にバックグラウンドスレッド終了となるので毎回バックグラウンドスレッドのなかで呼び出して状態を取得しなければならないんですよ。ゲームあまり作ったことがないので定石をしらず、終了したときにループを終了する方法が
isExit=false
do
{
//何か処理
}while(!isExit);
Form_Close()
{
isExit=true;
}
程度しか思いつかなかったのでこのスレッドをわける方法をとったんですよ、もっと綺麗な方法があるのならばそちらを使いたいのですが…それにInvoke…初めて聞きました、調べてみたのですが使い方がよくわかりません。
0769デフォルトの名無しさん
2005/07/14(木) 23:45:16--Keyboard[class]--------------------
private byte[] state;
void Get(){
GetKeyboardState(state);
}
bool isPress(Keys key)
(省略)
-------------------------------
--mainLoop[class]--------------------------
delegate void KeyboardGetDelegate();
--mainLoop(Form owner)---------
Keyboard key = new Keyboard();
do{
owner.Invoke(new KeyboardGetDelegate(key.Get));
if(key.isPress(Keys.A))
Console.WriteLine("A");
}
------------------------------
一応呼び出し元であるForm1を引数として渡してInvoke使ってみたんですがうまくいきませんでした。
0770デフォルトの名無しさん
2005/07/15(金) 00:12:09GetAsyncKeyState使いました、これだとリプレイ機能付けるのが大変なんですがこの際だから仕方ないです。
ありがとうございました(*^-^)
0771デフォルトの名無しさん
2005/07/15(金) 12:30:08リプレイ機能って、ゲームか。
0772デフォルトの名無しさん
2005/07/15(金) 15:04:300773デフォルトの名無しさん
2005/07/15(金) 17:11:06DBにユーザ情報テーブルと職業種別テーブルがあり、
ユーザ情報を登録・編集するWebアプリを作成しています。
Panelの上に以下のような感じで項目が乗っています。
名前:TextBox
住所:TextBox
.
.
.
職業種別:DoropDownList
この条件で以下のようなふたつの処理を両立させることが
可能でしょうか?
1.事前に職業種別のDoropDownListの項目を職業種別テーブル
よりDataBindで設定したい。
2.既存項目の編集時にPanelのDataBindで各項目にユーザ情報
テーブルの値を設定したい。この際、職業種別のDoropDownList
のSelectedValueもDataBindで設定したい。
自分が試したところ、DoropDownListのDataBindで1と2の処理が
同時に走ってしまい、いまいちうまくいきません。
なにかうまい方法があればお教え下さい。よろしくお願いいたします。
0774デフォルトの名無しさん
2005/07/15(金) 23:32:06MIDIを使用して音を出すようなプログラムを書こうと思ったのですが
色々な本をみても、そのようなプログラムのサンプルや説明が見つからず四苦八苦しています。
とりあえず、ドレミファソラシドと音を出す程度のものでよいので、どうすればいいか教えていただけませんでしょうか。
0775デフォルトの名無しさん
2005/07/15(金) 23:38:050776デフォルトの名無しさん
2005/07/16(土) 00:13:05http://www.codeproject.com/cs/media/MIDIToolkit.asp
0777デフォルトの名無しさん
2005/07/16(土) 02:41:24Document Explorerの使用期限がついに来たので、面倒ながらベータ2を入れることにした。
何故かベータ1をアンインストールする際にVS2002付属のDocument Explorerの終了も強制させられた。
SDKまで入れ終わったあと、VS2002付属のDocument Explorerを起動したら、目次のツリーのアイコンが変わってた。
ついでに中身もWOW64に関する記事とかが入ってたがこれはベータ2を入れたからなんだろうか。
しかしベータ2付属のDocument Explorer、ベータ1の時に比べて大幅に速くなったなー。
ベータ1(2.0.4****)で作成したのをベータ2(2.0.50215)で実行したら、XmlReader.Disposeメソッドが見つかりませんと実行時例外が出て焦る。
再コンパイルしたら問題なくなった。
ベータ1で作ったのは一通り再コンパイルが必要だな。
流石にベータだけあってクラスの変更が多い。
ベータ1でXSLTの処理クラスとして導入されたXsltCommandクラスがあっさりObsolete、XslCompiledTransformに置き換えられたり。
そもそも2.0ベータ1で追加されたSystem.Xml.Query名前空間が消滅、System.Xml.Xslに出戻ってたり。
//こんな記事にもなったのにねぇ。
//ttp://www.itmedia.co.jp/enterprise/articles/0501/24/news009.html
System.Windows.Forms.Direction列挙体を汎用に使おうかと思ったらSystem.Windows.Forms.ArrowDirectionと巧妙な名前付けがなされるようになったり。
以上、チラシの裏。
0778デフォルトの名無しさん
2005/07/16(土) 02:44:18データが追加されようがどうしようが選択されたセル番号不変にする方法
ないですか?
DataGridの選択しているRowの一覧を収めたDataTableはプロテクトメソッドの
ため逆汗して見えるけど使えない。どうすりゃいいだろ?
0779デフォルトの名無しさん
2005/07/16(土) 20:03:4216未満の時に、0Fというようにするにはどうすればいいでしょうか?
10進の文字列表記の際の桁数指定は使えないようなのです。
0780デフォルトの名無しさん
2005/07/16(土) 20:21:515.ToString("X2");
で問題ないだろ?
0781スレ違い?ならゴメン
2005/07/18(月) 11:20:43at NUnit.Framework.EqualAsserter.FailNotEqual()
at NUnit.Framework.EqualAsserter.Assert()
at NUnit.Core.Tests.ExpectExceptionTest.MethodThrowsArgumentOutOfRange()
が発生するのって俺だけ?
.NET Version: 1.1.4322.2032
0782スレ違い?ならゴメン
2005/07/18(月) 11:20:55【ExpectExceptionTest.csより】
[TestFixture]
internal class TestThrowsArgumentOutOfRangeException
{
[Test]
[ExpectedException(typeof(ArgumentOutOfRangeException),
"the message\r\nParameter name: param\r\nActual value was actual value.")]
public void TestThrow()
{
throw new ArgumentOutOfRangeException("param", "actual value", "the message");
}
}
[Test]
public void MethodThrowsArgumentOutOfRange()
{
TestResult result = RunInternalTest( typeof( TestThrowsArgumentOutOfRangeException ) );
Assert.AreEqual(true, result.IsSuccess );
}
日本語ローカライズされててArgumentOutOfRangeExceptionのメッセージは
「the message\r\nパラメータ名 : param\r\n実際の値は actual value です。」
になるから、単純にテストコードの各国語対応バグと考えていればいいのかな。
NUnitのExpectedException属性に詳しい人、教えて。
0783デフォルトの名無しさん
2005/07/18(月) 19:21:29private struct Keyid
{
int id;
string name;
};
private Keyid[] ketData = new keyid[]
{
{1,"aaa"}, <----エラー
{5,"bbb"}, <----エラー
};
上記のように、定数を入れたいのですが、方法は分からなくて。{では駄目みたいで・・
お願いします。
0784デフォルトの名無しさん
2005/07/18(月) 19:22:150785デフォルトの名無しさん
2005/07/18(月) 19:32:35private struct Keyid
{
int id;
string name;
public Keyid(int id, string name) {
this.id = id;
this.name = name;
}
};
private Keyid[] ketData = new keyid[]
{
new keyid(1,"aaa"),
new keyid(5,"bbb"),
};
0786デフォルトの名無しさん
2005/07/18(月) 19:33:290787デフォルトの名無しさん
2005/07/18(月) 19:40:052chでのタイプミスです。
>>785
なんと、そんな方法なのですか。何処探しても見つからなかった・・・・
今からやってみます。
0788デフォルトの名無しさん
2005/07/18(月) 19:44:53うまくいきました、有難うございます。
0789783
2005/07/18(月) 21:00:33何でわざわざstructに・・・・(C++の過去知識影響だろうな〜
じゃここにキー名が一致確認でID戻しのメソッド置いて・・・・とか思ってしまうし。
ただ単に文字列キーのID数値変換だけなのだが、もっとスマートな方法が有るんじゃないかと
思ってしまうのですが、ひょっとして有りますか?
0790デフォルトの名無しさん
2005/07/18(月) 21:03:25Hashtable table = new Hashtable();
table["aaa"] = 1;
table["bbb"] = 5;
……でいいんでない?
0791783
2005/07/18(月) 21:33:27うぐ、一番簡単そう・・・・・(C++時はスピード優先がデフォルトで入っていたから^^;
ちなみに逆変換は。↓な感じですか?
Hashtable tableRv = new Hashtable();
table[1] = "aaa";
table[5] = "bbb";
たいした数も無いので、これでいいかな。
起動時とパラメーターセーブ時だけ生成すればいいし。(な考え方でもいいかな?
0792デフォルトの名無しさん
2005/07/18(月) 21:38:590793783
2005/07/18(月) 21:42:36妙なクラスを複数と検索等の複数メソッド作るより。
1クラスで単純に管理できるのこれにします。
有難うございました。
0794デフォルトの名無しさん
2005/07/18(月) 22:54:180795デフォルトの名無しさん
2005/07/18(月) 23:06:240796デフォルトの名無しさん
2005/07/18(月) 23:07:450797デフォルトの名無しさん
2005/07/18(月) 23:10:000798790
2005/07/18(月) 23:10:59「C++時はスピード優先が〜」 なんて言っちゃったからのような気がする
0799デフォルトの名無しさん
2005/07/18(月) 23:12:04それ、俺も思った。
0800デフォルトの名無しさん
2005/07/18(月) 23:13:04>たいした数も無いので、これでいいかな。
といっとるがな。
0802デフォルトの名無しさん
2005/07/18(月) 23:15:030803デフォルトの名無しさん
2005/07/18(月) 23:16:34プギャー
0804783
2005/07/18(月) 23:20:51一言言ってみる、色々な意味でハッシュより余裕で速い要素数だ。
0805デフォルトの名無しさん
2005/07/18(月) 23:22:26とか付けなくていいよ
0806デフォルトの名無しさん
2005/07/18(月) 23:22:39非標準ではないが、STLport(SGI系)にはハッシュとそのコンテナが入っている。
でも実際使ってみるとわかるが、遅い遅い。
0807デフォルトの名無しさん
2005/07/18(月) 23:23:00○標準ではないが
orz
0808デフォルトの名無しさん
2005/07/18(月) 23:23:410809デフォルトの名無しさん
2005/07/18(月) 23:24:17何で付けなくていいか、理由を説明よろ。
0810デフォルトの名無しさん
2005/07/18(月) 23:26:28バカの壁読んでごらん
0811デフォルトの名無しさん
2005/07/18(月) 23:28:32プログラム初心者ならわかるけど。
0812デフォルトの名無しさん
2005/07/18(月) 23:29:03藻前、C/C++よくしらんだろ。
0814デフォルトの名無しさん
2005/07/18(月) 23:31:34こんなバカも珍しいな
0815デフォルトの名無しさん
2005/07/18(月) 23:31:42ヲタからみればしらないレベルかもねw
0816デフォルトの名無しさん
2005/07/18(月) 23:36:02仲良く行きましょうや
0817デフォルトの名無しさん
2005/07/18(月) 23:52:58おまけに「C++はスピード重視だから」とか言い訳するとこがみっともない
0818デフォルトの名無しさん
2005/07/18(月) 23:53:350819デフォルトの名無しさん
2005/07/18(月) 23:55:25頭が悪そうと書かれてからの文体の変わり様が783の人の浅さをよく表している
0820デフォルトの名無しさん
2005/07/19(火) 00:39:480821デフォルトの名無しさん
2005/07/19(火) 00:47:410822デフォルトの名無しさん
2005/07/19(火) 02:03:25矩形選択のようなものをTabPage上で実現したいのですが、
どのように処理をするのが望ましいのでしょうか?
他にも描写しているものがあり、マウスが動くたびに再描写では
すごく重くて悩んでいます。
0823デフォルトの名無しさん
2005/07/19(火) 02:08:04ControlPaint.FillReversibleRectangle のようなもの?
0824デフォルトの名無しさん
2005/07/19(火) 04:17:33> マウスが動くたびに再描写ではすごく重くて
どうやろうが最終的にはマウスが動くたびに再描画しなくちゃなんねぇぜ。
0825デフォルトの名無しさん
2005/07/19(火) 04:22:37ちらついたりコントロール上が再描写されなかったりと問題がありました。
実際は一部だけ再描写する技術を身に付けたほうが良いのでしょうか?
0826デフォルトの名無しさん
2005/07/19(火) 20:24:21更新しなければいけない部分だけ再描画すればいいだけのこと!
0827デフォルトの名無しさん
2005/07/20(水) 15:06:000828デフォルトの名無しさん
2005/07/20(水) 21:58:300829デフォルトの名無しさん
2005/07/20(水) 22:19:20ttp://www.gotdotnet.com/japan/team/windowsforms/windowsformspainting.aspx
0830デフォルトの名無しさん
2005/07/20(水) 22:26:16一番下の画像ワロス
0831デフォルトの名無しさん
2005/07/20(水) 23:03:21なにがおもしろいのか、それが禿しく疑問
単なる皮肉じゃんw
0832デフォルトの名無しさん
2005/07/20(水) 23:38:25[STAThread]
これってstart thread なんすか?
なんて読むの?
廃スレ?
禿げ既スマソ
0833デフォルトの名無しさん
2005/07/20(水) 23:40:29つづり合ってたっけ?
0834デフォルトの名無しさん
2005/07/20(水) 23:56:22ちなみにCOMで使われる概念な。
0835デフォルトの名無しさん
2005/07/21(木) 00:04:30やったことないんだけど。
0836デフォルトの名無しさん
2005/07/21(木) 00:08:03そのほかは扱うCOMの設計次第。
COMを扱わないなら関係ないが、内部で使ってる可能性は捨てられない(Windows Formsのように)。
0837デフォルトの名無しさん
2005/07/21(木) 00:19:30ttp://dobon.net/vb/dotnet/form/notopenform.html
0838デフォルトの名無しさん
2005/07/21(木) 10:31:27動かない、ということはあった。
その人は、手でMain()書いたから[STAThread]を書いてなかった。
0839デフォルトの名無しさん
2005/07/21(木) 13:35:20内部でCOM使ってるらしい。
0840デフォルトの名無しさん
2005/07/21(木) 16:25:39いつも ToString() と "+" で連結して使ってるんですが、面倒で・・・・
0841デフォルトの名無しさん
2005/07/21(木) 16:29:060842デフォルトの名無しさん
2005/07/21(木) 16:29:52すみません。Console.Write()です。要するに、Cのsprintf()のような事を
させたいのです。
0843デフォルトの名無しさん
2005/07/21(木) 16:32:51のことか?
0844デフォルトの名無しさん
2005/07/21(木) 16:36:58そう、それです。それをstringに対して適用したいのです。
0845デフォルトの名無しさん
2005/07/21(木) 16:38:11String.Formatのことだな。
0846デフォルトの名無しさん
2005/07/21(木) 16:39:01俺は>>844を見てもわからなかったのに、お前はすごいな。
0847デフォルトの名無しさん
2005/07/21(木) 16:39:39ありがとうございます!まさにそれです。これでだいぶ楽になります。
0848デフォルトの名無しさん
2005/07/21(木) 16:43:17言葉足らずで済みません。sprintf()に例えれば分かってもらえると
思ったのですが・・・この中にはC/C++を知らない人もいるんでした。
失礼しました。
0849デフォルトの名無しさん
2005/07/21(木) 17:22:27C++を知っていたとしてもあれでは普通わからん。
0850デフォルトの名無しさん
2005/07/21(木) 17:22:32sprintf といわれたら分かるけど、
Console.Write() を string にって言われても一瞬、意味分からなかった。
Write() メソッド、何パターンもオーバーロードがあって、format 指定無しのものもあるし。
0851デフォルトの名無しさん
2005/07/21(木) 18:18:33これから質問の仕方に気をつけます。
0852初心者
2005/07/21(木) 23:29:070853デフォルトの名無しさん
2005/07/21(木) 23:31:42http://pc8.2ch.net/test/read.cgi/tech/1120720976/
0854XP
2005/07/21(木) 23:36:530855Me
2005/07/21(木) 23:47:430856デフォルトの名無しさん
2005/07/21(木) 23:51:06しかも汚い
0857XP
2005/07/21(木) 23:56:020858デフォルトの名無しさん
2005/07/21(木) 23:57:35何と比べてどういうところがダメダメで汚いの?
0859デフォルトの名無しさん
2005/07/22(金) 00:01:27お前の頭がダメダメ
0860デフォルトの名無しさん
2005/07/22(金) 00:01:590861デフォルトの名無しさん
2005/07/22(金) 00:03:38Intelのコンパイラに比べればマシ
AMDでエラーが出るようにコンパイルされるとか終わってる。
0862デフォルトの名無しさん
2005/07/22(金) 00:20:38CPUベンダーが自社のCPUに最適なコンパイラを作るのは当然だと思うが
互換性はあくまでAMD側が維持するべき問題だろ
それ以前に拡張命令に対応したコンパイラを自社開発できないAMDはうんk
0863デフォルトの名無しさん
2005/07/22(金) 00:21:540864デフォルトの名無しさん
2005/07/22(金) 00:22:110865デフォルトの名無しさん
2005/07/22(金) 00:47:370866デフォルトの名無しさん
2005/07/22(金) 00:51:49(他のアプリよりも先に)知るにはどうしたらよいでしょうか?
他のアプリが閉じる前にやりたい処理があるのですが
0867デフォルトの名無しさん
2005/07/22(金) 10:45:48エキスパンドゥーってなんですか?Web辞書には載ってなかったんですが。
0868デフォルトの名無しさん
2005/07/22(金) 12:07:37ふらっとC♯(初心者用) Part6
http://pc8.2ch.net/test/read.cgi/tech/1122001458/l50
0869デフォルトの名無しさん
2005/07/22(金) 12:34:40単純に文字列連結すればいいのはわかってるんだけど
0870デフォルトの名無しさん
2005/07/22(金) 12:39:190871869
2005/07/22(金) 12:44:42どっかソース落ちてたら楽かなーとか思ったんだけど
手組みするかね・・・だるぅ
0872デフォルトの名無しさん
2005/07/22(金) 12:53:24XSLTを使う手法もあるが。
ttp://www.ailight.jp/blog/mnow/archive/2005/01/15/3706.aspx
0873869
2005/07/22(金) 13:03:29まぁいいや、今から組んでくる
0874デフォルトの名無しさん
2005/07/22(金) 13:42:53普通のやつは複雑なことを複雑に考える。
馬鹿は単純なことを複雑に考える。
頭のいいやつは複雑なことを単純に考える。
シンプルにやれるものはシンプルにやろうや。
0875デフォルトの名無しさん
2005/07/22(金) 14:14:23WM_QUERYENDSESSIONでもグローバルフックすれば?
・・・出来るんかいな?
0876869
2005/07/22(金) 15:21:38StringBuilder sb = new StringBuilder();
foreach(DataRow dr in data.Tables[0].Rows){
for(int i = 0;i<dr.ItemArray.Length;i++){
sb.Append(dr[i]);
if(dr.ItemArray.Length != i+1){
sb.Append(",");
}
}
sb.Append("\r\n");
}
return sb.ToString();
}
もっとシンプルになるかな?
0877デフォルトの名無しさん
2005/07/22(金) 17:29:40SetProcessShutdownParameters
0878デフォルトの名無しさん
2005/07/22(金) 23:49:28データ中の区切り文字の処理せんと
0879デフォルトの名無しさん
2005/07/23(土) 03:56:20Form2 f2 = new Form2();
f2.ShowDialog(this);
として開いたForm2から,Form1のpublicなプロパティMobilityにアクセスしたいのですが,
this.Owner.Mobilityとすると
'System.Windows.Forms.Form'に'Mobility'の定義がありません
とエラーが出てしまいます.
何が間違っているのでしょうか?
0880デフォルトの名無しさん
2005/07/23(土) 04:24:07つか、Mobilityってなに?
Form1 form1 = this.Owner as Form1;
if(form1 != null)
{
// form1.Mobilityを使う
}
0881つまらないことかもしれませんが・・・
2005/07/23(土) 04:24:34★ArrayクラスのCopyToメソッドを使うか?
★ループでインデックスをカウントアップし要素を一つずつ代入するか?
どちらが早いですか?
パフォーマンスをあげたいとき一般的にはどっちを使います?
0883デフォルトの名無しさん
2005/07/23(土) 04:44:27Array.Copyを使え。
0884デフォルトの名無しさん
2005/07/23(土) 06:53:08プリミティブ型ならBuffer.BlockCopyがたぶん一番速い
0885デフォルトの名無しさん
2005/07/23(土) 14:02:57static void Main()
{
Application.Run(new Form1());
ArrayList al = new ArrayList();
al.Add( new ClassSample("田中", 2359));
al.Add( new ClassSample("鈴木", 0324));
al.Add( new ClassSample("佐藤", 0830));
al.Sort();
foreach( ClassSample cs in al )
{
System.Diagnostics.Debug.WriteLine(cs.ToString());
}
}
0886デフォルトの名無しさん
2005/07/23(土) 14:03:55public class ClassSample : IComparable
{
public string name;
public int time;
public ClassSample(string name, int time)
{
this.name = name;
this.time = time;
}
public int CompareTo( object obj )
{
return 0;
}
public override string ToString()
{
string moji;
moji = String.Format("{0} {1}", name, time);
return moji;
}
}
0887デフォルトの名無しさん
2005/07/23(土) 14:04:32佐藤 830
鈴木 324
田中 2359
と、苗字のあいうえお順に並べ替えられます。
これをClassSampleの2番目の引数の数値を基準に小さい順に
並べ替えたいのですが、どのように書けばいいのかわからず
困ってます。
数値は第一引数に置かなければいけないのでしょうか。
それとも、何か書き方があるのでしょうか。
0888デフォルトの名無しさん
2005/07/23(土) 14:17:00CompareToの引数は比較されるオブジェクトなので、
キャストするなりして使う。
返値は比較した結果を返す。0未満なら自分(this)のほうが小さい。
0なら同じ。1以上なら引数のほうが大きい。
public int CompareTo( object obj )
{
ClassSample o = obj as ClassSample;
if(o != null)
{
// timeフィールド同士を比較する
return this.time.CompareTo(o.time);
}
else
{
// ClassSampleと別のクラスが比較された。ここでは現状維持
return 0;
}
}
0889デフォルトの名無しさん
2005/07/23(土) 14:22:24>定義により、すべてのオブジェクトは null 参照 (Visual Basic では Nothing) よりも大きく、また 2 つの null 参照は互いに等しくなります。
>obj パラメータは、このインターフェイスを実装するクラスまたは値型と同じ型である必要があります。それ以外の場合は、 ArgumentException がスローされます。
という実装が要求されることに注意。
//実用上困ることはないと思うが。
0890887
2005/07/23(土) 14:28:34できました。
CompareToの中身をいじればよかったのですね。
al.Sort(1)とかal.Sort(time)とかal.Sort周りばかりいじってました。
CompareToの中身がどんな仕組みか完全に理解しきってないので、いろいろいじって
試してみようと思います。
どうもありがとうございました。
0891デフォルトの名無しさん
2005/07/23(土) 15:20:05見落としとった。
>>890
Sortに投げ込むのはIComparerのほうだな。
動的にソートの条件を変えるならこっちのほうが便利。
あと、MSDN読むことに慣れておいたほうがいい。
0892887
2005/07/23(土) 15:53:31アドバイスありがとうございます。
IComparableとIComparerがあるんですね。
IComparerは動的に条件変えれて便利と。
MSDNってわかりにくいので、できるだけ読むのは避けてたのですが
今度から、調べるときにちょくちょく見て慣れておくことにします。
0893デフォルトの名無しさん
2005/07/23(土) 16:26:40書籍やらネットだとこんな情報得られないしね
0894デフォルトの名無しさん
2005/07/23(土) 16:35:33クラスライブラリを調べるのがやりやすいかもしれない。
どうせドキュメントの目的の大半はライブラリのドキュメント調べだし。
それがわかればあとはVS付属のやつもMSのオンラインのも似た要領でどうにかなるな。
0895887
2005/07/23(土) 16:53:07見るのに慣れたら便利なしろもののようなので、さっきも見てみましたがまだ見ぬくいのですが
ネットで調べてもあまり情報がないものを調べるときに助かるかもと思うので
がんばって見慣れようと思います。
どうもありがとう。
0896デフォルトの名無しさん
2005/07/23(土) 18:20:30どうすればいいでしょうか
0897デフォルトの名無しさん
2005/07/23(土) 18:31:461.なんか意味ありげで婉曲的な表現を
適当な日付に表示するプログラムを作る。
2.キバヤシのPCに入れる。
3.あとは自動的にこじつけてくれるので当たる、
当たらないは関係なくなる。
0898デフォルトの名無しさん
2005/07/23(土) 18:32:510899デフォルトの名無しさん
2005/07/23(土) 19:36:580900デフォルトの名無しさん
2005/07/23(土) 20:06:52【名-1】 模倣{もほう}
ウナギを1万匹用意すればよい。
0901デフォルトの名無しさん
2005/07/23(土) 20:19:30{
}
このように既にAlarmDataクラスを継承しているRendaAlarmDataクラスに、更にIComparable
を実装しようとすれば、どのように書けばいいのでしょうか。
継承元のAlarmDataは
public class AlarmData : IComparable
{
}
のように書いて、既にIComparableが実装されているので、AlarmDataを継承しているRendaAlarmData
クラスもIComparableは実装されているので書く必要はないという解釈で正解でしょうか。
public class RendaAlarmData : AlarmData IComparable や
public class RendaAlarmData : AlarmData : IComparable とか
書いてみましたが、エラーが出ます。
継承してるからRendaAlarmDataにも実装済みってことになるのかなあと迷ってます。
0902デフォルトの名無しさん
2005/07/23(土) 20:19:49,.‐'´ `''‐- 、._ヽ /.i ∠,. -─;==:- 、ゝ‐;----// ヾ.、
[ |、! /' ̄r'bゝ}二. {`´ '´__ (_Y_),. |.r-'‐┬‐l l⌒ | }
゙l |`} ..:ヽ--゙‐´リ ̄ヽd、 ''''  ̄ ̄ |l !ニ! !⌒ //
. i.! l .::::: ソ;;:.. ヽ、._ _,ノ' ゞ)ノ./
` ー==--‐'´(__,. ..、  ̄ ̄ ̄ i/‐'/
i .:::ト、  ̄ ´ l、_/::|
! |: |
ヽ ー‐==:ニニニ⊃ !:: ト、
おれたちはとんでもない思い違いをしていたようだ。これを見てみろ。
まず「ナマズ10000」を英字で表記する
『NAMAZU10000』
これを逆にすると、
『00001UZAMAN』
これは暗号になっていると思われるので0000→O4、1→Iと変換すると
『O4IUZAMAN』となる。意味不明な文字列なのでアナグラムと考え
並び替えてみると『ZI4N』と『UMA』と『UO』いう文字が浮かび上がる。
するとできあがる言葉は・・・・・・『地震』と『UMA』と、Fを足して『UFO』。
ここまでくれば間違いない。
つまり!地震はUMAによって起こされるということを暗示しているんだ!!
0903デフォルトの名無しさん
2005/07/23(土) 20:23:53public class RendaAlarmData : AlarmData , IComparable
{
}
インターフェイスはこれで複数継承できるが、
クラスは多重継承できない。為念。
0904デフォルトの名無しさん
2005/07/23(土) 20:24:04基底クラスのインターフェイスの実装を変更しないのなら、
基底クラスを継承するだけで基底クラスが実装するインターフェイスを扱える。
そうじゃなきゃ変なことになる。
public interface IInterface {
void Do();
}
public class A : IInterface {
void Do() {}
}
public class B : A {
}
public static void Main() {
IInterface ii = new B();
ii.Do();
}
0905903
2005/07/23(土) 20:26:490906デフォルトの名無しさん
2005/07/23(土) 20:27:22C# 言語の仕様 13.4.4 インターフェイスの再実装
を読む。
0907901
2005/07/23(土) 20:34:23そのように書けばいいのですね。ただし複数継承できるけど、クラスを2つ以上継承はできないということですね。
>>904
ということは、RendaAlarmDataに
public class RendaAlarmData : AlarmData , IComparable
{
}
と書かなくても、AlarmDataに実装されているIComparableは扱えるので
書かなくても大丈夫なのですね。
>>906
調べて目を通しとこうと思います。
皆さんどうもありがとうございました。これでまた頓挫したところから前へ進めます。
0908デフォルトの名無しさん
2005/07/25(月) 10:25:21http://upload.squares.net/upload/src/file0139.txt //FruitList.csです
http://upload.squares.net/upload/src/file0140.jpg //画面の画像です
テキストボックスに入力して、リストボックスに追加。
追加したリストボックスをダブルクリックすると編集できるというものなのですが。
リストボックスに、
果物1タブからのみリストボックスに追加した場合、編集はうまくいきます。
果物2タブからのみリストボックスに追加した場合も、編集はうまくいきます。
ところが、
果物1タブ、果物2タブ両方ごちゃまぜでリストボックスに追加したあと
果物2タブで入力した項目を編集しようとするとエラーがでます。
しかし、果物1タブで入力した項目はちゃんと編集できるんです。
どのようにすれば、果物1タブと果物2タブからごちゃまぜに追加したリストボックスの
果物2タブから追加した項目を編集するときにエラーがでないようにできるのかわからず
困っています。
エラー内容は
'System.InvalidCastException'のハンドルされていない例外がtest26.exeで発生しました。
追加情報:指定されたキャストは有効ではありません。
とでますが、FruitData2 item = (FruitData2)(it.Current);
の部分は(FruitData2)でキャストしないと
item.SetG(g); が使えなくなるので困っています。
0909デフォルトの名無しさん
2005/07/25(月) 10:47:15IDisposable は解放時には便利なのですが、例外発生時の処理はそれぞれを中に書く必要が生じます。
つまり毎回このように↓書かなくてはいけません。
using(...)
{
try
{
//処理
}
catch
{
//例外発生時処理
}
}
これを、こう↓書くだけで、
using(...)
{
//処理
}
あとはIDisposableを実装するクラスで処理したいのですが、可能でしょうか?
つまり Disposeメソッドで直前の処理が例外か否かを判定できれば実現できると思うのですが。
IDisposableにCatchメソッドがあったり、ICatchableインターフェイスとかあったら便利なのに・・・
と思ってはいけないのでしょうか。
0910デフォルトの名無しさん
2005/07/25(月) 10:48:400911デフォルトの名無しさん
2005/07/25(月) 10:50:37いやそりゃthis.allの中にFruitDataとFruitData2があるのに、
なんでもかんでもFruitData2にキャストしようとしちゃFruitDataの方はInvalidCastExceptionが出るだろ。
派生クラスのインスタンスは基底クラスのオブジェクトとして扱えるが、逆は不可なんだから。
キャストできるかどうかの判断のためにインスタンスの型を調べるには is 演算子とか as 演算子を使う。
0912デフォルトの名無しさん
2005/07/25(月) 10:54:33なに言ってるか分からん。
0913デフォルトの名無しさん
2005/07/25(月) 11:01:53それができたとして、
Catchメソッドにどんな例外が投げられるのか分からないのにどんなCatchメソッドを作るの?
デリゲート? try-catchでいいじゃん。
0914デフォルトの名無しさん
2005/07/25(月) 11:04:30なんだかしらんが void Commit() { _commit = true; }; とか定義しておいて、
using (..) {
a.hoge;
a.commit();
}
などしてDisposeで ! _commit なら失敗時の処理を行うようにでもしてみては?
0915908
2005/07/25(月) 11:05:25FruitData2 item = (FruitData2)(it.Current); の部分を
FruitData2 item = new FruitData2();
if(it.Current is FruitData2)
{
item = (FruitData2)(it.Current);
}
と、書き直し、it.Current is FruitData2 でFruitData2か判断してから
FruitData2に入れたところ
ちゃんと、果物タブ2で入れた項目も編集することができました。
いったいどこが問題があるのかさっぱりわからず困っていたので大変助かりました。
どうもありがとうございました。
0916909
2005/07/25(月) 14:40:56やりたいことは数多くある既存のコードに対して、部分的に
開始処理・終了処理・例外処理をつけたいということです。
(ちなみにこれらの追加処理は同じクラスのメソッドを呼びます)
ひとつひとつの箇所に以下のようなコードを書くのが面倒なため
もう少しシンプルな方法はないかと思案中でした。
try
{
//開始処理
//【既存の処理】
//終了処理
}
catch
{
//例外処理
}
これらの箇所をメソッドに限定した場合、カスタム属性でも実現可能なのでしょうか?
>>909
すいません、努力します。
>>913
例外の種類は特定されている必要は無いと思います。
GetType()で調べられるし、方法はいくらでもあると思います。
>>914
それはいけるかもしれません。検討してみます。
ですが、できればその「commit()」の部分を無くしたいのです。
0918デフォルトの名無しさん
2005/07/25(月) 15:37:33基本的に
・「構造化例外」の概念を分かってない
・IDisposable.Disposeの概念を分かってない
と思われる。
そのメソッドローカルで扱うオブジェクトをどのように扱うかは
そのメソッドの責任。オブジェクトに責任はないから混ぜるな。
一番近い概念はTransactionだろうがそれはC#言語には現状
組み込まれていないし、RollBackやCommitはどっちにしろ
必要なので、そんな組み込まれ方はしないと思うよ。
それとそのコードはおかしい。
try {
//処理
} catch(Exception) {
//例外処理
} finally {
//終了処理
}
こう。
0919デフォルトの名無しさん
2005/07/25(月) 15:54:20ご指摘ありがとうございます。
IDisposableの概念的には理解していたつもりですが、
応用の例として使えたら便利かも、ということで話に上げました。
手法として良くない様でしたら別の良法を選択します。
コード例を記述して頂きましてありがとうございます。
トランザクションの場合には確かにそのようになるのですが、
今回は成功か否かで処理を分けたいのです。
finallyにて共通の終了処理は必要ではありません。
以下のような処理が汎用化できるかどうかを知りたいのです。
try
{
//開始処理
//既存の処理
//成功時処理
}
catch
{
//失敗時処理
throw
}
0920909
2005/07/25(月) 16:20:14解放と例外は常に密接な関係を持っています。
解放処理はIDisposableで切り出しの汎用化が可能となっているのに
例外処理はtry-catch-finallyの構造を維持し続けなければならず、
拡張性が低いと思います。
なのでICatchable(ITryable?)なる切り出し用のインターフェイスがあっても良さそうなもの、
と思った次第なのです。
0921デフォルトの名無しさん
2005/07/25(月) 17:16:330922デフォルトの名無しさん
2005/07/25(月) 19:05:260923デフォルトの名無しさん
2005/07/25(月) 19:12:16ある程度の範囲(0-9A-Zあたり)ならintにキャストしてからKeysにキャストしてやればいいが。
0925デフォルトの名無しさん
2005/07/25(月) 20:58:26・終了時処理の勘違いがある。
IDisposable.DisposeはGCの動作の想定している理想状態ならば必要ないもの
(つまりすべてのリソースが無限に存在する)だが、現実の問題としてDBの
コネクション等リソースは有限でクリティカルなものがある。そういうもの「のみ」を想定して
いて「クリティカルリソースを開放してもよいというフラグをオブジェクトに通知する」のが
IDisposable.Disposeなの。もっと言えば実は終了処理なるものとはまったく関係がない。
終了処理に破棄処理(IDisposable.Dispose)を含めるかどうかはメソッド側の責任。
・構造化例外の勘違い
try句の中に書くものは成功時&失敗時処理(?)等「すべての処理を含める」のが普通。
もっと言えばtry句は「(例外条件を除いて)成功することを強く想定してかくべき」。
なんていったらいいかな、「try-catch構文って言うのはif文のように処理フローを分岐させる
ためにあるわけではない」とか?ぶっちゃけていえばフローチャートをかいたときにその中には
(catch句は)絶対にかかない。
メソッドというか手続きを書くときには絶対「想定条件」というものが設定される。例を
挙げればまず間違いなくほとんどの手続きで想定されているのが「メモリがたりなくなる
ことはない」とか。何でかっていえば、すべての条件を想定して書けばコードは非常に
複雑になるから。条件を設定する必要性を認め、その場合でも問題のないようにかくことを
可能にしたのがtry-catch構文。
きみはtry-catchに「例外が発生すれば失敗」等の考え方を抱いているようだが違う。
例外発生は「想定条件外事象が発生した」以上の意味はない。それが失敗かどうかは
メソッド側って言うかcatchした側が決める。
>解放と例外は常に密接な関係を持っています。
これがそもそも変で君が勝手に結び付けてるの。分けるのが合理的だと考えたから
こうなっていることを理解すべき。拡張性が低いというのはむしろ君の考え方のほうが
低い(しかも実用に耐えないほど)。
0926デフォルトの名無しさん
2005/07/25(月) 21:26:240927デフォルトの名無しさん
2005/07/25(月) 21:29:450928デフォルトの名無しさん
2005/07/25(月) 21:32:19ごめん
0929デフォルトの名無しさん
2005/07/25(月) 21:39:20多分こうだろうという推測。
・using句の意味を変更。
IDisposableだけじゃなくICatchable(仮)を実装するオブジェクトにも適用できるようにする。
・ICatchableはCatchメソッドを定義。Catchメソッドはusing句の終了時に自動的に呼び出される。
・Catchメソッドの仮引数にはExceptionがあり、
using句が正常に終了した場合はnull、例外が発生した場合は発生したExceptionが渡される。
・発生した例外はCatchメソッド終了後自動的に再スローされる
要するにusing句に使えるからと安易にDisposeを出してきたのが混乱の原因。
個人的にはこんな機構イラネ。
0930デフォルトの名無しさん
2005/07/25(月) 21:46:17try{
using(…){
}
}
catch(…){
}
finally{
}
ってのが多いと思う。
using(…){
try{
}
catch(…){
}
}
ってどういうことよ
0931デフォルトの名無しさん
2005/07/25(月) 21:48:18状況によるんじゃない?
0932デフォルトの名無しさん
2005/07/25(月) 22:33:020933927
2005/07/25(月) 23:02:34例外とIDisposableの意味を根本的に誤解しているような気はするが、
ああ、結局何がしたいのかさっぱりわからん。
0934デフォルトの名無しさん
2005/07/25(月) 23:11:33セッションを識別する良き方法を知りたいのですが
0935デフォルトの名無しさん
2005/07/25(月) 23:42:49<add key="DataPath" value[]={"E:\" , "C:\"} />
みたいに。できないなら別の方法を教えてください。できるならデータの取得方法を教えてください.
よろしくお願いします。
0936デフォルトの名無しさん
2005/07/25(月) 23:55:09適当に区切り文字で区切れば良いんじゃね? 取り出す側が分割する。
0937デフォルトの名無しさん
2005/07/26(火) 06:45:32Bが前面にある状態のまま、AにあるオブジェクトをD&DでBに移したいと思った時
どのタイミングでDoDragDropを実行すればよいのでしょうか?
現在、AのあるUserControlにMouseDown>MouseMove時にDoDragDropを発行しているのですが
MouseDownした瞬間にAが前面に出てきてしまいD&Dがしにくい感じになってしまったいます。
WindowsでExploreを二つ立ち上げてウィンドウ間でのD&Dでは
ちゃんと背面のウィンドウが背面のままD&Dできているのでそのようにしたいのですが
0938909
2005/07/26(火) 09:10:28安易に実現できるのが便利だから、という理由です。
別に解放処理云々は割とどうでも良いです。
なので>>925さんとは少し論点が違います。
前にも言いましたが、特定の場所のコードに対し、安易なアプローチで
終了処理を汎用化できる手段の例、として話に出したまでです。
>分けるのが合理的だと考えたからこうなっていることを理解すべき。
分かれたのではなく、もともと別ですよね。何も無理矢理一緒のステートメントでやるべきだ、
なんて思ってません。ただ、例外用のインターフェイスが用意されていて、
プログラマの一つの選択肢としてあっても良いのではないか、という単なる思いつきです。
>>929さん
>要するにusing句に使えるからと安易にDisposeを出してきたのが混乱の原因。
今のところusingはIDisposeしか対応してないですね。(元々それだけのためなのでしょうけど)
もっと色々なインターフェイスに対応すれば更に柔軟になると思うのです。
確かにusingがなければ余計な混乱はなかったかもしれません。
でも記述量は減りますよね。ILはtryステートメントと同様のコードになるようですし。
ttp://www.divakk.co.jp/aoyagi/csharp_tips_using.html
これは余談ですがVC++2005での情報です。
ttp://mag.autumn.org/Content.modf?id=20050506023118
主たる疑問は、類似した例外処理(に関わる同様の処理)は如何に汎用化できるか、です。
既存のコードへの手入れを最小限にして同様の処理を組み込める手段を模索しています。
0939デフォルトの名無しさん
2005/07/26(火) 09:34:17> >要するにusing句に使えるからと安易にDisposeを出してきたのが混乱の原因。
> 今のところusingはIDisposeしか対応してないですね。(元々それだけのためなのでしょうけど)
> もっと色々なインターフェイスに対応すれば更に柔軟になると思うのです。
> 確かにusingがなければ余計な混乱はなかったかもしれません。
> でも記述量は減りますよね。ILはtryステートメントと同様のコードになるようですし。
ここを読み違えるか……
0940デフォルトの名無しさん
2005/07/26(火) 09:41:260941デフォルトの名無しさん
2005/07/26(火) 09:49:22IDisposableのDisposeメソッドは、実装するクラスの破棄処理だが、
汎用的な「失敗時処理」とはなんだ?
0942デフォルトの名無しさん
2005/07/26(火) 09:53:59public void Catch(Exception ex){
//?
}
}
using(HogeStream hs = new HogeStream()){
}
ここまで頭に思い浮かべたのだが、普通にHogeStreamのメソッドで、例外をスローするメソッドの中で処理を行えば済む話
0943デフォルトの名無しさん
2005/07/26(火) 10:03:06class HogeStream : Stream, ICatchable{
public void Catch(Exception1 ex){
//失敗したときの処理1
}
public void Catch(Exception2 ex){
//失敗したときの処理2
}
public void Finally(){
}
}
class Hoge {
using(HogeStream hs = new HogeStream()){
//既存のコード
}
}
Catchメソッドをどうやって複数実装するのかわからんけど
0944デフォルトの名無しさん
2005/07/26(火) 10:04:59例外をスローするメソッドに書けばすむ話なのだが。
0945デフォルトの名無しさん
2005/07/26(火) 10:05:51それは実装できないだろ。CatchがExceptionを受け取ってその内部でisとか使って判断してやるんだろうな。
うむ必然性がわからん。
0946デフォルトの名無しさん
2005/07/26(火) 10:09:23どういうこと?
0947デフォルトの名無しさん
2005/07/26(火) 10:15:32そもそもエラーをどうしたいか、そのクラスには判断できないから
スローしているのであって。
なんか考え方が根本からおかしいぞ
0948デフォルトの名無しさん
2005/07/26(火) 10:16:55HogeStreamのWriteメソッドが例外をスローするとして
HogeStreamのCatchメソッドでそれを受けて何か処理をするぐらいなら
最初からWriteメソッドに処理を書けばいいじゃないか
0949デフォルトの名無しさん
2005/07/26(火) 10:21:19仮に違う手法でできるとしても、新しい構文やインターフェイス?がもっと整備されないとダメじゃないかな。
0950デフォルトの名無しさん
2005/07/26(火) 10:26:37>>943 どうでもいいがHogeクラスにはメソッドが必要と思われる。
0951デフォルトの名無しさん
2005/07/26(火) 10:36:490952デフォルトの名無しさん
2005/07/26(火) 12:07:32こういう機構があったら、いままでこう書いてたコードがこんなに短くできて便利ですよーとか。
サンプルコードが欲しい。
0953デフォルトの名無しさん
2005/07/26(火) 12:52:00using System;
public interface ICatchable : IDisposable {
void Catch(Exception x);
}
public class Test : ICatchable {
public void Catch(Exception x) {
Console.WriteLine("Catch: " + x.Message);
}
public void Dispose() {
Console.WriteLine("Dispose");
}
public void DoTest() {
Console.WriteLine("Test");
throw new Exception("m9(^Д^)プギャー");
}
}
0954デフォルトの名無しさん
2005/07/26(火) 12:52:41let using2 (ic :> ICatchable) f =
try
try f()
with x -> ic.Catch(x)
finally ic.Dispose()
let obj = new Test()
let _ =
using2 (obj) begin fun () ->
obj.DoTest()
end
(実行結果)
Test
Catch: m9(^Д^)プギャー
Dispose
0955デフォルトの名無しさん
2005/07/26(火) 13:08:24Catchメソッドを自前で追加しても意味ナイト
0956デフォルトの名無しさん
2005/07/26(火) 13:10:350957952
2005/07/26(火) 13:20:21DoTest内でthrowする代わりにCatchを呼んじゃいけないの?
0958デフォルトの名無しさん
2005/07/26(火) 13:32:10DoTest内で例外投げてるのはとりあえずテストということで、
本来ならusing2ブロック内のどこかから例外が飛ぶことを想定してます。
0959名無しさん♯
2005/07/26(火) 13:41:21http://pc8.2ch.net/test/read.cgi/tech/1122352650/l50
あとは1000まで心おきなくICatchable話をドゾ。
0960952
2005/07/26(火) 14:06:43あーなるほど。
でもやっぱり、それが役に立つ状況ってのが想像しがたいんですが。
自分のクラス以外から例外が飛んだとして、Catchでそれを受けて一体どんな処理を行えというのか。
0961デフォルトの名無しさん
2005/07/26(火) 14:27:41例外発生イベントの代わりみたいなもんですかね。
WinFormsのApplication.ThreadExceptionみたいなやつ。
0962デフォルトの名無しさん
2005/07/26(火) 14:43:550963デフォルトの名無しさん
2005/07/26(火) 15:02:36つ[Extension Methods, Lambda Expressions]
0964デフォルトの名無しさん
2005/07/26(火) 15:10:59そんなのはM$に言えよ。このスレで揉めたって永遠に実装されんよ。
0965デフォルトの名無しさん
2005/07/26(火) 15:12:01○ICatchable
0966デフォルトの名無しさん
2005/07/26(火) 15:14:440967デフォルトの名無しさん
2005/07/26(火) 15:58:120968デフォルトの名無しさん
2005/07/27(水) 01:15:45つか、C#が3.0まで持つかどうかが最大の問題では?
0969デフォルトの名無しさん
2005/07/27(水) 01:36:22というような文字列の”ABCDEFG”だけを半角にしたいのですが、
str.Replace("A", "A");
のように文字数分繰り返す以外の簡単な方法はないでしょうか。
0970デフォルトの名無しさん
2005/07/27(水) 01:47:40Microsoft.VisualBasic.Strings.StrConv
0971デフォルトの名無しさん
2005/07/27(水) 09:06:11LCMapString()
0972デフォルトの名無しさん
2005/07/27(水) 13:06:40Regex.Replace あたりでカスタム変換
0973デフォルトの名無しさん
2005/07/28(木) 18:58:170974デフォルトの名無しさん
2005/07/28(木) 19:00:28英語版が11月だから、年末ギリギリぐらいじゃない?
0975デフォルトの名無しさん
2005/07/28(木) 21:10:010976デフォルトの名無しさん
2005/07/28(木) 21:16:310977デフォルトの名無しさん
2005/07/28(木) 21:31:000978デフォルトの名無しさん
2005/07/29(金) 08:20:160979デフォルトの名無しさん
2005/07/29(金) 09:56:44System.Diagnostics.Process を使い、自分自身に対応する Process を
何とかして手に入れる。
そうしたら、Process.Threads で ProcessThread インスタンスにアクセス
してゴチャゴチャやればできそうに思う。
もし成功したらコードのせてくれ。
0980デフォルトの名無しさん
2005/07/29(金) 11:24:030981デフォルトの名無しさん
2005/07/29(金) 15:37:22Process myProcess = Process.GetCurrentProcess();
ProcessThreadCollection threads = myProcess.Threads;
これでスレッドの配列が取得できたが
コンソールプログラムでやったら10個もスレッドがあった。
0982デフォルトの名無しさん
2005/07/29(金) 16:04:590983デフォルトの名無しさん
2005/07/29(金) 16:05:510984デフォルトの名無しさん
2005/07/29(金) 16:06:440985979
2005/07/29(金) 16:07:11もしかして実際に動いているスレッドに対応する Thread クラスのインスタンス
が欲しいのか?そうであるなら取得は無理かも。自前で管理するしか
ないんじゃないのか?
>>981
俺もやってみた。9個もスレッドあった。.NET Framework 側でいろいろ
持っているのかもしらん。
0986デフォルトの名無しさん
2005/07/29(金) 17:21:130987デフォルトの名無しさん
2005/07/29(金) 17:21:510988デフォルトの名無しさん
2005/07/29(金) 17:24:540989デフォルトの名無しさん
2005/07/29(金) 17:39:55C#で(C#じゃなくとも)どのように書けばいいのか。googleでいろいろ検索したのですが
見つからず、疲れちゃったので書き込みました。
NTPサーバの一覧とか、NTPクライアントソフトの紹介とか、DOSプロンプトからコマンド使って合わせる方法
とかそういったものばかり検索されます。
私の検索の仕方が悪いのでしょうか。
どなたか何かアドバイスいただけると助かります。
0990デフォルトの名無しさん
2005/07/29(金) 18:01:13っていうかたぶんThreadPoolのやつだ。
0991デフォルトの名無しさん
2005/07/29(金) 18:21:22つwww.codeproject.com/csharp/ntpclient.asp
よく読んでないから違うかも知れん
0993デフォルトの名無しさん
2005/07/29(金) 18:48:420994デフォルトの名無しさん
2005/07/29(金) 18:49:520995デフォルトの名無しさん
2005/07/29(金) 18:50:070996デフォルトの名無しさん
2005/07/29(金) 18:50:240997デフォルトの名無しさん
2005/07/29(金) 18:50:450998デフォルトの名無しさん
2005/07/29(金) 18:50:550999デフォルトの名無しさん
2005/07/29(金) 18:51:261000デフォルトの名無しさん
2005/07/29(金) 18:51:30http://pc8.2ch.net/test/read.cgi/tech/1122352650/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。