1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 c++厨の嵐はスルー汁。 前スレ C#, C♯, C#相談室 Part45 pc11.2ch.net/test/read.cgi/tech/1200911737/ その他テンプレ>>2-5 くらい
75 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 11:10:42 ] 721 名前:デフォルトの名無しさん :2008/05/02(金) 19:08:31 MSは.NETをいいかげん諦めたらいいのに。 Javaはほぼ全てのOSでサポートされてるから、仮想マシンという考え方が現実に役に立ってるが、 .NETのCLRはXP以降のWindowsでしか完全に動作しないし、 処理が重くなる以外、糞の役にも立っていない。 VistaがLonghornと呼ばれてた頃は、.NETがネイティブAPIになり、 Win32APIはなくなるとかいわれて、騙されて慌てて.NETを始めた犠牲者が、 騙されたことに気づいた今でもモッサリプログラムを作り続けてると思うとうんざりする。 結局Win32で作られた軽快なアプリ資産があるかぎりWin32APIは永遠になくすことができないし、 そのために.NETは永遠に脇役でモッサリのまま。 これが現実。 738 名前:デフォルトの名無しさん :2008/05/02(金) 20:26:23 .NETの元凶は、遅くなるだけで存在意義がないCLRにあるんだから、 MSは.NETのクラスライブラリと完全互換のネイティブC#を出せばいいんだよ。 開発プラットホームのスタンダード争いは完全にJavaに敗北したんだから、 もうJavaと張り合うためにバーチャルマシンに拘る必要はない。 速くて快適なEXEを作れる言語の方が誰にとっても実利的だろ。 そして.NET Frameworkにはひっそりと死んでもらうと。 大体、ビルゲイツが一線を退いてからのMSはVistaとか.NETとか失敗だらけで見てられない。 顧客(開発者、ユーザ)を苦しめることばかりしている。
76 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 11:45:53 ] >>75 そんな元スレで失笑買ってたレスをこぴってこなくても
77 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:08:59 ] VC++ の頃: DWORD ? LPSTR ? 何それ? C# に移行してから: DWORD や LPSTR がない? 一体どういうこっちゃ。 ('A`)
78 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:40:41 ] なにがいいたいのかわからない
79 名前:デフォルトの名無しさん [2008/05/03(土) 13:00:34 ] つまり慣れってことですね、わかります
80 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:46:10 ] pHandle = OpenProcess(PROCESS_VM_READ, FALSE,PID); // ハンドルの取得 if(pHandle == NULL) // 失敗時の処理 { cout << "Cannot Open Process !" << endl; exit(-1); } buf = (LPSTR)malloc(READ_SIZE); // バッファの確保 ReadProcessMemory(pHandle,Adr,buf,READ_SIZE,NULL); CloseHandle(pHandle); fp = fopen("Result.bin","wb"); fwrite(buf,READ_SIZE,1,fp); free(buf); に相当する操作をC#でAPIを使わずに書きたいんだけど、どうすればいいんでしょうか?
81 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:46:13 ] >>76 詳細希望
82 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:57:53 ] >>80 無理
83 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:59:26 ] >>81 ここ pc11.2ch.net/test/read.cgi/tech/1207063618/
84 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:01:44 ] APIを使わずにってのはどういう要求なんだろう WinFormsの中でだって大量に使われているのに
85 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:08:06 ] コピペ君って馬鹿だな、まで読んだ。
86 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:18:03 ] C/C++ だと何行も書かないといけないけどC# なら2,3行でさくっと出来るって聞いてC# に移行した。 要は楽をしたいだけ。API を使ってごちゃごちゃやらなきゃいけないんじゃC#に移行した意味がない。
87 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:28:04 ] だれがそんな嘘を吹き込んだんだよ
88 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:30:16 ] >>80 みたいなことにC#を使うのが間違い
89 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:25:50 ] C#でXMLを扱う勉強をしています。 XMLに入っている大量のデータ(IDと名前)を読み込んで、 プログラムに入力されたIDとマッチさせて名前等のデータを表示させたいのですが どのようなアプローチをするのがいいのでしょうか? 検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし かといって膨大なデータを全て配列等に格納するのも資源の無駄遣いのような気がして悩んでいます。 XMLの構造は <Person> <ID>774</ID> <Name>Hiroyuki</Name> </Person> が延々と続いたものです。
90 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:31:47 ] どんだけ膨大か知らんけど普通にオブジェクトのコレクションとして取り込めばいいんじゃない? 内部でXMLとして保持する意味なんて無いっしょ。
91 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:39:40 ] >>89 >検索は何度でも行えるようにしたいので、その都度ファイルにアクセスするのは効率が悪そうだし 2回目以降はキャッシュに載ってると思うけど。 結局OSのディスクキャッシュと同じものを作ることになるんじゃない? もちろんアプリケーションサイドでやればOSのディスクキャッシュより効率は良くなるだろうけど 費用対効果考えて判断すればいいんじゃなかろうか。 OSのディスクキャッシュよりもヒット率の低いデータをメインメモリにため込むのはよろしくないと思う。
92 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:51:40 ] キャッシュのことは完全に頭から抜けていました。 データをメモリに展開しない方向で考えてみます。
93 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 02:38:28 ] LINQの出番
94 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 07:21:32 ] ここでしていいのか微妙な質問なのですが・・・ Visual Studio 2005で作成しWebサイトの作成をしているのですが、 aspx側のJavaScriptで記述されたfunctionを、cs側のイベントの途中で記述して 呼び出したいのですが、どうしても方法を思い出せません。 順番としてはボタン等によるイベント→aspx画面表示→JavaScript呼び出しよるアラーム等 でできるはずなのですが、どなたかわかる方いらっしゃいましたらご教授をお願いしたいです。
95 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:57:44 ] InvokeScript
96 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:18:27 ] vs2008の3か月フリー版でC#をいじってます。 VC++Ver6ではDefWindowProc を追加するのは仮想関数のオーバーライド ってところでやってましたが、C#では同様なことをするにはどうすれ ば追加できますか? どちら様かご教示のほど、よろしくお願いしますm(__)m
97 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:37:32 ] 生のメッセージ捕まえたいのならWndProcをオーバーライド
98 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:56:54 ] >>97 早速の回答、ありがとうございます。 開発環境の使い方がいまいちわからないのですが、 オーバーライドするときは対象の関数を自分でタイプするような かたちなのでしょうか?それともどこかのメニューから追加でき るのでしょうか。 申し訳ありませんが、よろしくお願いします。
99 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 19:02:54 ] クラススコープでいきなり override スペースって打ってみな。一覧がでてくるから。 選らんでエンターでメソッド雛形出来る
100 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:46:10 ] >>99 実装できました。 どうもありがとうございましたm(__)m。
101 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:10:36 ] VS2008で書いたプログラムで蛍光表示管に画像表示させて遊んでいます。 C#のSerialPortクラスにあるWriteメソッドを使って 蛍光表示管にデータ送信をしているのですが 送信途中でブルースクリーンが表示されてWindowsが落ちてしまうことがあります。 一度のデータ送信で300bytes弱、 それを延々と繰り返すようなプログラムを書いています。 そのループ中に、Windowsが落ちることがある、という状態です。 なぜブルースクリーンが出るのか、 どうすれば、ブルースクリーンが出なくなるか、が分かりません。 教えて下さい!
102 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:20:32 ] ブルースクリーンの内容も書かずに質問とな 大体、複数のPCで試したのか?落ちるコードは?ふざけてんの?
103 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:21:10 ] むしろSerialPortクラスでOSが落ちるってどんなコードかいてるのかこっちが聞きたいよ。 っていうか、だからとりあえずチミの環境でその現象が起こる最小のコードを晒そうよ。
104 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:54:22 ] ハード的な問題とか? その辺素人なんでよく分からんけど。異常な電圧がかかってるとか?
105 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:59:25 ] ブルースクリーンってハードかドライバだろ
106 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 02:48:34 ] >>105 十中八九そうだろうね ただ、「デバイス、ドライバ、etc.が異常である」とOSが判断した結果なわけだから ソフトウェア的な要因も無きにしも非ず。2000/XPならほぼ無いと思うけど
107 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 03:43:51 ] ブルースクリーンのエラーの内容を書くのが先じゃね
108 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 04:57:10 ] あれ一瞬で消えること多いのに、MSのサポートにはエラー番号のページを参照してくださいとか書いてあるよね。
109 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 05:42:36 ] んでエラー番号検索かけてみたら見つからないと・・・
110 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 06:51:11 ] >>108 システムプロパティの[詳細設定]の[起動と回復]の [自動的に再起動する]にチェックが入ってるからだろ。 大抵のエンドユーザーはブルースクリーン出たら再起動するだけで、 内容見てもわけわかんないんだから Microsoftは親切にデフォルトで[自動的に再起動する]にチェックが入ってる。
111 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:37:59 ] それすらも知らないって事はそれすらもしてないって事か
112 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:44:37 ] string[] arg = new string[3] { "a", "b", "c" }; string value = ""; arg.Where(((s ,i) => { value += s + i.ToString() ; return false; })).Count(); Console.Write(value); こういうことってやっておkですか?
113 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:05:36 ] きもちわるいです
114 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 17:11:24 ] string用のSum書けば?
115 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 18:44:14 ] ラムダ式は書き方によってうんこになりすぎるな。
116 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:10:55 ] class newobj { public object o { get; private set; } public newobj(object o) { this.o = o; } } 例えばこんなクラスがあったとして object[] arg = new object[3] {1,2,3}; newobj[] list = new newobj[arg.Count()]; arg.Where((obj, i) => { list[i] = new newobj(obj); return false; }).Count(); こんなことできたら便利だなと思いましたが確かにキモイですね。 素直にfor文使います
117 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:12:46 ] せめて、int i を引数に取る Aggregate 書くとかした方が。
118 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:27:19 ] Array.ConvertAllだろどう考えても せいぜいSelect
119 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:37:01 ] なんだこの Where, return false, Count 厨は
120 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:41:32 ] 俺なら >>112 は var arg = new [] { "a", "b", "c" }; var value = arg.Aggregate(new StringBuilder(), (b, i) => b.Append(i)); Console.WriteLine(value.ToString()); >>116 は var arg = new [] { 1, 2, 3 }; var list = arg.Select(i => new newobj(i)).ToArray(); と書くな。 副作用を目的としたWhereなんて嫌すぎる。
121 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:55:47 ] newobj[] list = Array.ConvertAll<object, newobj>(arg, (obj) => new newobj(obj)); こういったメソッドも用意されていたのですね。 SQL?の知識が無いためSelectの使い方がよく解らなかったのですがそういう風に使えるんですね。 Aggregateはヘルプ見たのですがいまいち使い方わからなっかのですが便利そうですね。様々な使い方できそうです。 皆様どうもありがとうございました。
122 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 20:00:10 ] >>120 112の方、仕様満たせてないぞ
123 名前:101 mailto:sage [2008/05/06(火) 21:11:59 ] >>102-111 レスありがとうございます。 >>110 の設定は知りませんでした…ありがとうございます。 ・ブルースクリーンのエラー内容を見たところ、以下の通りでした。 STOP: 0x000000D1 (0x00000000, 0x00000002, 0x00000000, 0xBABC9185) vrcomIT2k.sys Address BABC9185 base at BABC8000, DateStamp 3ec3702e www.uploda.org/uporg1408089.jpg.html (FYI: >>106 「デバイス、ドライバ、etc.が異常である」ということで思い出したのが、 PCのUSB端子から、蛍光表示管メーカーが用意している仮想COMドライバを使って 蛍光表示管にデータ送信している、ということをやっています。 もしかしたら本件と関係があるかもしれないので、書いておきます。) 他PCでの再現性については、PCを1台しか持っておらず、 申し訳ないのですがすぐ確認できる状況にはありません。 最小のコードについては、現在調査中です。再現ができ次第、UPしたいと思います。
124 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:41:38 ] > 蛍光表示管メーカーが用意している仮想COMドライバ 臭いな。というかたぶんこれだろう。
125 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:50:39 ] >>123 エラー内容みるかぎり、蛍光管メーカーに問い合わせるのが正解かと ここで聞いても、運よく同じメーカー同じドライバで同じトラブルに見舞われている人以外には分からないかと。 とりあえずは、ドライバがそのOSに対応しているのか、そのへんから全部チェックしてみたらどうだ? 2kとかついてるから、Windows2000専用とかそういうのないか?
126 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:06:52 ] STOP: 0x000000D1 は、メモリエラーの可能性も無きにしもあらずだから、 念のためmemtest86かけてみたら?まあ、そのエラーでブルースクリーンは シリアル周り(ハードウェアモデムとか)のエラーとしてすっごくありふれた ものだから、たぶんドライバの問題だろうね。
127 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 18:53:43 ] VS2008は起動してるだけでメモリアクセスしてるから たまに起動してるだけでブルスク(0x9C)になることがあるぜ。 まあ原因は安物メモリのせいかもしれないが。
128 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:46:29 ] それがみんな出ていたらFAQに入るわ
129 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:59:12 ] あきらかにハードが原因だろ
130 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:50:15 ] >VS2008は起動してるだけでメモリアクセスしてるから そりゃそうだろ。 メモリアクセスしないアプリがあったら見てみたい物だ。
131 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:42:28 ] >>130
132 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:47:01 ] >>131
133 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:50:47 ] >>132
134 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:08:25 ] >>133
135 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:20:16 ] >>134
136 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:25:29 ] >>135
137 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:13:00 ] >>137
138 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:43:39 ] >>139
139 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 06:10:53 ] >>139
140 名前:130 mailto:sage [2008/05/09(金) 12:01:02 ] あれ?なんか変なこと言った?
141 名前:デフォルトの名無しさん [2008/05/09(金) 12:17:29 ] ArrayList arrayをDataGridViewに表示させたいのですが、DataSource=arrayとやっても何も出ません。 何か良い方法はありませんでしょうか?
142 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 12:19:48 ] >>140
143 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:03:35 ] >>142
144 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:06:51 ] >>141 System.Collections.ArrayList array = new System.Collections.ArrayList(); array.Add(new { X = 3, Y = 4 }); array.Add(new { X = 5, Y = 6 }); this.dataGridView1.DataSource = array; 動作します、原因はArrayListに追加した要素が、プロパティーではなくフィールドになっていたとか、そんなオチでは?
145 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:58:27 ] arrayが空っぽ
146 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 22:10:19 ] そろそろ麻雀やろうか
147 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:22:23 ] readonly(private setじゃなくてコンストラクタ以外で変更できないようにする方ね)にするためだけに 自動プロパティを使うのを諦めてフィールドを手書きするのが悔しい
148 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 06:34:59 ] public struct T_INFO_DATA { public uint Id; public uint Fixed; public byte[] Array; }; switch (WParam.ToInt32()){ case 0x1200: COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(LParam, typeof(COPYDATASTRUCT)); T_INFO_DATA a = (T_INFO_DATA)Marshal.PtrToStructure(cds.lpData, typeof(T_INFO_DATA)); ←ここでエラー 〜 WM_COPYDATA受信時に上記のような処理を行うと下記のエラーメッセージが出ます。 保護されているメモリに読み込みまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。 誰かどのように修正すれば直るのか教えてください。 構造体Arrayの中に入ってる配列数は48個です。 これ以外の構造体(配列を使っていない構造体)の受信は正常に取得できます。よろしくおねがいします。
149 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:55:28 ] 良くわかんないけど C側のイメージとしては struct T_INFO_DATA { DWORD Id; DWORD Fixed; BYTE * Array; } となっているわけですが、問題ないのですか?
150 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:59:51 ] >>149 +アルルファ byte [] Array の位置にはポインタが入っているわけでなく、メモリーブロックへのハンドルが入っています。 byte [] オブジェクトを確保して、そこに格納する必要があるのではとか? ぱっとみ思いつく限り
151 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:48:21 ] やったことはないけども、 int とか IntPtr にして MarshalAs でなんとかできないかな。
152 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:55:02 ] なぜか Word .doc だけど、↓なんてどうだろう。 download.microsoft.com/download/4/f/d/4fd49a94-8772-4bd0-88ca-bf46e2d029fc/WHITEPAPERS/Accessing%20the%20eID%20Middleware%20from%20.NET%20 (Version%201.0).doc
153 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:07:22 ] メモリハンドルをIntPtrで受け取っておいて、LocalLock、Marshal.Copy、かな。 あと、Arrayというメンバは名前をhMemとかに変えろ。
154 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:16:46 ] >hMem むしろキモイ
155 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:23:41 ] そうか? すぐAPIに渡すものなら、APIの引数名に合わせた方がわかりやすいだろ?
156 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:34:18 ] C#を一から始める際に参考になるサイトとか教えてもらえませんか?
157 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:38:40 ] ケースバイケースだろうね。 Win32APIはともかく、デバイス屋が提供している制御用のAPIなんて 意味不明すぎる命名がされてること多いし。
158 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:45:03 ] >>156 「C# 入門」でぐぐって一番上。
159 名前:148 mailto:sage [2008/05/11(日) 17:40:01 ] >>149 C側のイメージだと、 struct T_INFO_DATA { DWORD Id; DWORD Fixed; BYTE Array[48]; } という認識です。 ポインタを送るほうがいいのでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:23:15 ] >>159 構造体メンバの固定長配列は、 unsafe 限定で fixed って構文がある。 ufcpp.net/study/csharp/sp_unsafe.html#fixed
161 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:42:03 ] 属性使っていろいろする必要がある。 [StructLayout(LayoutKind.Sequential)] public struct T_INFO_DATA { public uint Id; public uint Fixed; [MarshalAs(UnmanagedType.ByValArray, SizeConst=48)] public byte[] Array; }; なお、コンパイルは通してないからこのままでOKかどうかの保証はない。 あとは調べてくれ。
162 名前:148 mailto:sage [2008/05/13(火) 07:16:56 ] >>161 ありがとうございます。 構造体をその記述にするだけでうまくいきました。
163 名前:デフォルトの名無しさん [2008/05/13(火) 15:55:00 ] 相談内容 RS232C通信のプログラムを作っているのですが、 デバックの効率化のために実際の通信内容を別Windownにてモニタリング できないか検討してます。 本当はStreamにフックするだけで使えるものが他のデバックにも使えて 望ましいのですが、そんな便利なクラスってないれすか?
164 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:02:31 ] .Net には、フックの類はないよ 自分がやるとしたら、Streamクラスから派生したクラスにフックコードを挿入したアダプタクラスを作って RS232C通信をアプリ側でフックする 引き続いてWCFを使ってプロセス間通信ができるように、サービスを作って 別ウインドウで作ったデバッグウインドウは、そのサービスに接続して、状況を読み取るといった形式にすると思う。 ついでに、通信情報以外の各種情報もモニターできるようにするかな。
165 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:09:14 ] 昔、まさにそういうツールがフリーであって重宝したなあ。 NTで動いてたから、今でも使えるとは思うが何って言ったっけな。
166 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:12:25 ] 便利とは思うが、盗聴まがいのAPIはよろしくないから無くした方がいいと思う。 キーボードフックを筆頭に。
167 名前:163 mailto:sage [2008/05/13(火) 16:38:31 ] >>164 さん,165さん レス有難う御座います。 アダプタクラスですか・・ 腑抜けの私には、むりっぽそうですw。 申し訳ない、追加で質問なんですが、 フックがだめなら、 またStreamの中身を盗見することって難しいのでしょうか? 普通に考えると ReadStreamは一度読み取ると消えちゃうし、 WriteStreamはそもそも読めないですよね。 これができれば、何とか簡易もどきが作れそうな気がするのですが
168 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:47:43 ] >>167 中身みるよりアダプタの法がよっぽど楽だ、Streamクラスの抽象関数オーバーロードして、呼び出しをそのままReadStreamなりWriteStreamなりに渡せば以上終了だぞ。
169 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:53:10 ] >>167 いい機会だからデザインパターンを勉強しような
170 名前:163 mailto:sage [2008/05/13(火) 16:57:26 ] >>168 そうですか。了解です。 普段は組み込み関連の仕事が多いもので、 不慣れな環境なんで、他に良い手がないか、 無駄に時間をつぶして調べ回っていました。 アダプタ法で頑張ってみます。 勉強になります。有難う御座います!!
171 名前:163 mailto:sage [2008/05/13(火) 17:20:28 ] ぐは、早くも生きづまった・・ SerialPortクラスのBaseStreamメンバはReadOnly・・・ Streamの継承クラスを渡せない・・ 早くもだめぽw そうすると専用のStreamReadrとWriterを自作するのが王道でしょうか? それとも、SerialPortクラスを継承してメソッドを書き換えるか・・ >>169 さん アドバイス有難う御座います 今度本を買ってきます。 デザインパターンの根本的なところを理解していないのに、 何か作ろうとするから、いつもメタメタになる・・
172 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:39:58 ] 本買って読むのもいいが、この種の本は場数が足りんとどうせ読めんよ。 自分で頭をひねって考えるのが重要。 class MyStream : Stream { Stream rs232 = ここで、BaseStream を突っ込む override 関数各種() { rs232.同名の関数() ; } } 基本は、こうやって作る。とにかくオブジェクト図を描くこと。 オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。 さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
173 名前:163 mailto:sage [2008/05/13(火) 17:55:08 ] >>172 さん 有難う御座います。 コードまで書いて頂き、お時間を取らせてしまって、 すいません。 なるほど!!、こうすればBaseStreamそのものがReadOnlyでも制御できる。 こうすれば、デフォルトのStreamReaderが使いまわせる。 つくづく自分の頭の固さが嫌になります。 >とにかくオブジェクト図を描くこと。 >オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。 >さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。 こういった、アドバイス非常にありがたいです。!! 自分でもあがいてはいるのですが、 周りにこういった話が出来る人がいないんです。 オブジェクト図ですね。書きまくって見ます!!
174 名前:163 mailto:sage [2008/05/13(火) 18:04:07 ] >>172 さん まだいらっしゃるかな・・ >オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。 もしよろしければ、この部分についてもう少し解説していただけないですか? これは、どんなときに考えるのでしょうか。 クラスの責務の振り分け/分割時? またメッセージの接続が最小になると、どんな良いことがあるのでしょうか? 質問ばかりですいません。
175 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:11:30 ] オブジェクト指向のもっとも重要なポイントは、クラスではなくインスタンス。 インスタンスが主役であって、クラスはオマケ。継承がウンタラとかいう連中もいるが間違っているから相手にするな。 今四つのインスタンスがあるとする、それぞれ A , B , C , D 粒度が細かすぎて取り扱いにくいので、二つにまとめてみようと考えてみる。 インスタンスAがBを呼び出すなら A --関数名--> B と書いてみる。 まとめる方法は[A,B,C] [D]がよいか[A,B] [C,D]がよいか。 呼び出しが最少になるような図を考えてみよという事。 適当に矢印書きまくって、最小になるように分離してみるといい。 あとは応用。