ふらっとC#,C♯,C#(初心者用) Part21
■ このスレッドは過去ログ倉庫に格納されています
0001ななしぃ#
2007/11/18(日) 15:53:41「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0268デフォルトの名無しさん
2007/12/02(日) 01:14:00今MSDNでLinkedListとLinkedListNodeをもう一度見てた所ですが、
ちょっと頭混乱して来ました…_| ̄|○
なんか見てると、264氏や267氏の言われるようにLinkedListに直接
突っ込んで行けば良いのは分かってきましたが、LinkedListNodeと
LinkedListとの関係が分からなくなってしまいました。
> そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
私の言いたいのも正にそこでして、自クラスのコンストラクターで空
のノードを用意出来れば良いと思ってたので、
LinkedListNode<String> lln = new LinkedListNode<String>();
としたかった訳ですが、これだとコンパイルエラーとなります。
リストにデータを入れて行く場合は良いのですが、リストからデータ
を読む場合や消す場合、LinkedListNodeのPrev/Nextが必要になる
と思うのですが、その場合どの様にすれば良いでしょうか?
0269デフォルトの名無しさん
2007/12/02(日) 02:07:05LinkedListからLinkedListNodeを取り出したければ、
LinkedListのFirst/Lastプロパティ。ほかFind/FindLastメソッドも。
こっちからLinkedListNodeを作る必要はない。
LinkedListの要素をなめたいだけならforeachにも突っ込める。
0270デフォルトの名無しさん
2007/12/02(日) 06:57:57そもそも内部構造の詳細を意識しなくても利用できる、
内部構造の違いにかかわらず操作できる、
ようにするためにコレクションのクラスがあるんだから。
LinkedListNodeは構造を意識した直接的な操作も
サポートするために使えるようになってるだけで
コレクションを表すのはあくまでLinkedListの方、使うのも普通はこっち。
0271デフォルトの名無しさん
2007/12/02(日) 14:09:05LinkedListNode<string> lln = new LinkedListNode<string>(null);
としておくか、アイテムなければ
= new LinkedListNode<string>(null);
するかでいいんじゃね?
0272デフォルトの名無しさん
2007/12/02(日) 14:09:56としておくか、アイテムがなければ
= new LinkedListNode<string>(1つ目のアイテム);
するかでいいんじゃね?
0273デフォルトの名無しさん
2007/12/02(日) 14:51:04LinkedList<string> ll = new LinkedList();
だけでおk
0274デフォルトの名無しさん
2007/12/02(日) 17:40:13LinkedListNode自体がデータを含んでいる実体な訳ですね。
で各LinkedListNodeをLinkedListで繋いでいると。
LinkedListNodeとLinkedListの機能を逆の意味にとられえてたので混乱
してました。
リスト構造の頭と尻尾を自前で管理しようと思って、HeadNode/TailNode
見たいなのを作る為に、LinkedListNodeが存在してる物と思ってたんで
すが、LinkedListのFirst/Lastがその役割をもっててLinkedListクラス内
で自動的に管理されてる訳ですね。
どうもお騒がせ致しました。
0275たろう
2007/12/02(日) 18:11:05現在googleの検索エンジンの機能をWindowsアプリで作成しようと
思っています。
作成すると言っても検索エンジンを1から作るのでは無く、
実際にはWindowsフォームのTextBoxに入力されたら(入力値を�@とする。)
Google(http://google.co.jp)画面内の入力エリア
に�@をコピーし、Googleの検索ボタンを自動で押下し、
表示された検索一覧(データ)をWindowsフォーム内に表示したいと
考えています。
WEBページの内容を取得する方法は知っているのですが、
「Google等の検索エンジンに検索値を入力し検索ボタンを
自動で押下して検索データを取得する。」
という方法が分かりません。
何か参考になるサイト等ごございましたらお教え願います。
0276デフォルトの名無しさん
2007/12/02(日) 18:13:19"http://www.google.co.jp/search?q=�@"
0277たろう
2007/12/02(日) 19:13:57ありがとうございます。
因みに
"http://www.google.co.jp/search?q=�@"
といったWEBページのボタンを押した時にWEBサーバに送られる情報
はどの様にして調べているのでしょうか?
何か参考になるWEBサイトをご存知でしょうか?
例えば、Googleについては上記の方法で行ける事は分かったのですが
Yahoo / MSN Serch等も時間に余裕が出来たらチャレンジしてみたいと
思っています。
0278デフォルトの名無しさん
2007/12/02(日) 20:37:230279デフォルトの名無しさん
2007/12/02(日) 20:46:41とりあえず文字列はUrlEncodeしなきゃだめよ
0281デフォルトの名無しさん
2007/12/02(日) 21:32:550282デフォルトの名無しさん
2007/12/02(日) 21:57:36バイナリをあれこれ弄って一つのファイルに書き出そうとしています。
出力時には元のファイルを100KBずつ読み込んで、FileStreamとBinaryWriter を使って、
順次書き出ししようと考えているのですが、
BinaryWriter をCloseしないとファイルに何も書いてくれないという状況です。
どなたか、順次書き出しの手ほどき、よろしくお願いします。
0283デフォルトの名無しさん
2007/12/02(日) 22:03:190284デフォルトの名無しさん
2007/12/02(日) 22:05:210285デフォルトの名無しさん
2007/12/02(日) 22:19:54埋め込まれたリソースとして動画ファイル(.aviファイル)を埋め込んだのですが、このファイルを再生するにはどうしたらよいのでしょうか?
.wavファイルや.jpgなどはGetManifestResourceStreamでストリームを取得した後、コンストラクタに入れてやれば再生できたのですが
動画クラスって見つからなかったので、どうやって再生したらよいのでしょうか?
MediaPlayerやDirectShowはどうやらファイル名を指定して再生するようで今回のようにストリームから再生することができませんでした。
0286デフォルトの名無しさん
2007/12/03(月) 08:00:19つけなければアクセスに時間がかかるとか何か不都合がありますか?
0287デフォルトの名無しさん
2007/12/03(月) 08:12:190288デフォルトの名無しさん
2007/12/03(月) 08:42:46ありがとう!早速直します!
0289デフォルトの名無しさん
2007/12/03(月) 10:46:56その理由を簡単にでも教えてください
0290デフォルトの名無しさん
2007/12/03(月) 11:05:130291デフォルトの名無しさん
2007/12/03(月) 11:05:440292デフォルトの名無しさん
2007/12/03(月) 11:07:22状況も聞かずに無条件につけるべきなんていう奴は知らない。
0293デフォルトの名無しさん
2007/12/03(月) 11:10:19拡張メソッドと分けて見やすくする目的だとthisはつけないほうがいい
0294デフォルトの名無しさん
2007/12/03(月) 12:11:120295デフォルトの名無しさん
2007/12/03(月) 12:47:46プレフィックスはインテリセンスの利きを悪くするし可読性も落ちるだろ
0296デフォルトの名無しさん
2007/12/03(月) 13:07:19IronPythonのコードがそうなってる。
0297デフォルトの名無しさん
2007/12/03(月) 13:21:21C++な人が多いからとか、VB.NETではつけないとプロパティ名と被りやすいから
それに合わせてるとかきっとそういうことだろうけど
0298デフォルトの名無しさん
2007/12/03(月) 13:24:16どっちにしろインテリセンスの利きは悪くなる
可読性は_ならたいして落ちないだろうけど
C#の標準命名規則にはそんなんないのだ
0299デフォルトの名無しさん
2007/12/03(月) 13:33:060300デフォルトの名無しさん
2007/12/03(月) 13:37:070301デフォルトの名無しさん
2007/12/03(月) 13:45:430302デフォルトの名無しさん
2007/12/03(月) 13:48:320303デフォルトの名無しさん
2007/12/03(月) 13:48:45公式には無いよ
「C#コーディング標準」ではプリフィックス付けてもいいとされてるし、
大文字小文字を区別した名前を付けるなとあるから、それを守るんであれば
何か付けないとプロパティと被る
0304デフォルトの名無しさん
2007/12/03(月) 14:05:51sleepで数秒寝かせて無限ループで取得という方法でいいんでしょうか?
0305デフォルトの名無しさん
2007/12/03(月) 14:10:190306デフォルトの名無しさん
2007/12/03(月) 14:11:52でもその方法だとなぜか重すぎてキャンセルとか受け付けてくれないんですよ
0307デフォルトの名無しさん
2007/12/03(月) 14:21:14どうせ0秒から3秒くらいのランダムとかして平均1.5秒でアクセスしてるんだろう。
0308デフォルトの名無しさん
2007/12/03(月) 14:39:130309デフォルトの名無しさん
2007/12/03(月) 14:47:29mainのなかでwhile使って無限ループさせてるんでそうだと思います
guiのプログラミングって何が何だかわからない
0310デフォルトの名無しさん
2007/12/03(月) 14:48:470311デフォルトの名無しさん
2007/12/03(月) 15:12:18教えてくださいお願いします。
0312デフォルトの名無しさん
2007/12/03(月) 15:39:330313デフォルトの名無しさん
2007/12/03(月) 15:51:42それはジェラート。
0314デフォルトの名無しさん
2007/12/03(月) 16:19:29もたいな文字列が在る場合。↓みたいな感じで表示するにはどうすれば良いですか?
M-SEARCH * HTTP/1.1\r\n
MX: 3\r\n
HOST: 239.255.255.250:1900\r\n
MAN: "ssdp:discover"\r\n
ST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n
\r\n
0315デフォルトの名無しさん
2007/12/03(月) 16:25:330316デフォルトの名無しさん
2007/12/03(月) 19:24:06夢幻ループ化。
処理をWindowsに返さないといけないんです。
Windowsから仕事しロッテ言われてから動けばいいんです。
自分から動きたい場合は、そのタイミングで呼び出してもらえるように約束を取り付けておけばいいんです。
0317デフォルトの名無しさん
2007/12/03(月) 21:27:09GUI関係ないだろ・・・
Timer使え
0318デフォルトの名無しさん
2007/12/03(月) 21:49:01名前空間は、団体名. 技術名. 分野と記述するのが推奨だと始めて知ったのですが、
普通はこの形式で名前空間定義をしているのでしょうか?
0319デフォルトの名無しさん
2007/12/03(月) 21:53:090320デフォルトの名無しさん
2007/12/03(月) 21:59:430321デフォルトの名無しさん
2007/12/03(月) 22:10:15しかし、どこのスレも下らん馴れ合いで嬉しくなっちゃう単細胞な馬鹿が多いな。
0322デフォルトの名無しさん
2007/12/03(月) 22:19:57ググるといろんなサイトや掲示板で、Cなどで作ったdllのimportに苦労してる人がけっこう見つかります。
でも、アドバイスしてる人も“難しい”とは言いますが“不可能”と言ってる人は見かけません。
理論的に不可能ではないが、非常に難しい場合もある、ということでしょうか?
0323デフォルトの名無しさん
2007/12/03(月) 22:36:55Cのdllなら基本的に難しいことはないと思うが・・・。
C++のクラスライブラリをインポートするのは不可能。
0324322
2007/12/04(火) 01:13:57引数が構造体だったりすると大変にならないですか?
実は以前、他所様のCで書かれたdllを使おうと試みたんですが、
引数の構造体の中身が分からなくて断念したことがあります・・・
私の能力が至らないだけで、本当はできるんでしょうか?
>C++のクラスライブラリをインポートするのは不可能。
え、そうなんですか?すいません、どうして不可能なのか簡単に教えて頂けないでしょうか?
0325デフォルトの名無しさん
2007/12/04(火) 01:24:16C#でプログラミングしてるからここに。
TcpClient使ってネットワークストリームから出力すると
レスポンスヘッダと内容自体がいっしょくたになるけど
これをレスポンスヘッダと内容を効率よく分解する方法ってない?
TcpClient以外を使うっていうのは無しで。
0326デフォルトの名無しさん
2007/12/04(火) 01:29:44C++のABIは標準化されてないから
0327デフォルトの名無しさん
2007/12/04(火) 02:19:00構造体なんて定義すればいいだけだよ
C同士だって構造体の中身がわからなければ何もできないでしょ
0328322
2007/12/04(火) 02:51:26アンマネージなC++クラスライブラリだと駄目ってことでしょうか?
やるとしたら、マネージなのに作り直すか、クラスを使わないようにする、という認識で合ってますか
0329デフォルトの名無しさん
2007/12/04(火) 02:55:37もちろんクラスをマネージコードとやりとりしなければいいのであって、DLL内だけで使用する分には問題ないよ。
0330デフォルトの名無しさん
2007/12/04(火) 03:14:460331デフォルトの名無しさん
2007/12/04(火) 04:49:49DllImportのCallingConvention.ThisCallを使えばできるが、
ファクトリや開放用のメソッドが必要になったりで
正直おすすめしない。
0332322
2007/12/04(火) 06:09:38いや、中身が分からないんです。非公開というか勝手に使ってるだけなので。
で、もう一度トライしてみたらできました!朝までかかってしまいましたが・・・
dll内の関数の引数や返り血が構造体のポインタなのですが、C#のほうで適当に
struct hoge{};
と空っぽの構造体を作ってしまいました。とりあえず正常に動きました!(´∀`)ヤッター
でも、何故これで動くのかあんまりよく分かってないのですが、このまま使って大丈夫でしょうか??
unsafeでやってるので少し不安です・・・
>>329
探したら↓などを見つけました。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20010&forum=7
COMを使えばクラスライブラリも呼べるようですが、茨の道みたいですね
>>330
無理してコードを変えるより、そのままC++/CLIでラップするほうが楽だし安全、ということでしょうか。
・・・というか、これ使えば何でもできるんじゃ?もしかして相当すごい機能?
>>331
すいません、まだそういうことできるレベルじゃないです。。
もう寝ます。皆様お付きあい頂いて、ありがとうございました。
0333デフォルトの名無しさん
2007/12/04(火) 10:47:07このMonthCalendarコントロールを表示した際にフォーム内からはみ出た部分が表示され
ないのですが、回避するにはどうしたらよいのでしょうか?
0334デフォルトの名無しさん
2007/12/04(火) 11:39:040335デフォルトの名無しさん
2007/12/04(火) 12:18:46これらを配列として扱うには下記の方法でよろしいでしょうか?
label1〜label4がフォームに置いたラベルです
Label[] lblArr = new Label[4];
lblArr[0] = label1;
lblArr[1] = label2;
lblArr[2] = label3;
lblArr[3] = label4;
考え方がよくなかったりしたら教えてください
0336デフォルトの名無しさん
2007/12/04(火) 12:33:27あらかじめ貼っておくか、追加するときに場所と大きさ計算してフォームのサイズを調整したら
>>335
いいよ
Label[] lblArr = new Label[]{ label1, label2, label3, label4 };
でもいい
0338デフォルトの名無しさん
2007/12/04(火) 13:34:32一応こういうのもある
>>335-336の方が好ましいのでできればやめた方がいいけど
0339デフォルトの名無しさん
2007/12/04(火) 15:05:320340339
2007/12/04(火) 15:10:04タイマーイベントのハンドラの中で、現在押下されているキーをすべて取得するといった内容で考えております。
0341デフォルトの名無しさん
2007/12/04(火) 15:13:29UDPポートをbindして、クライアントから一方的にudpデータが
送られてくる状況で、パケットの取りこぼしが発生してしまいます。
クライアントから送られてくるデータの、先頭2バイトをインクリメントデータの
シーケンス番号としておりまして、これを連続して取り出したところ
最大で10パケットほどごっそり抜けるといった現象が発生しています。
以下がプログラムの流れです。
1.ソケット作成
2.Socket.BeginReceiveFrom〜で非同期受信開始
3.コールバックメソッドで、先頭2バイトを読み出してシーケンス番号を確認。
4. 3.のシーケンス番号を保存して、再びSocket.BeginReceiveFrom〜を呼び出し。
5.再度のコールバックメソッドで、4.で保存したシーケンス番号と
新しいシーケンス番号に2以上の差があるときがある。(おおよそ2〜10程度)
UDP自体は信頼性のないネットワークなのは十分承知しているのですが、
クライアントからのデータはCore2DuoのPCでデータを受信しているので、
CPUパワーからして本当に取りこぼすのか疑問に思っております。
Wiresharkでパケットをキャプチャするとネットワークライン上には
正しくデータは流れているので、Windowsは取りこぼしていないが、
アプリケーションの段階で取りこぼしているのかなと想像はしているのですが……。
どなたか同じような症状の方おりませんでしょうか。
またわかる方がいればご教示願えませんでしょうか。
orz
0342デフォルトの名無しさん
2007/12/04(火) 15:19:061パケットに複数まとまってるんでない?
0343デフォルトの名無しさん
2007/12/04(火) 15:20:32C#の文法規則の意味について教えてください。
C++は理解しており、メンバーに対するアクセス指定は理解できるのですが
クラスに対するアクセス指定の意味がわかりません。
名前空間内でクラス宣言を行うときにクラス自体にpublicかinternalの
アクセス指定ができますが、これらは何を意味するのでしょうか?
理解していること
・名前空間内で指定可能なアクセス指定子はpublicかinternalのみ
・省略するとinternalとなる
0344デフォルトの名無しさん
2007/12/04(火) 15:26:07GetAsyncKeyState()等のAPI 使うとかでどうか
0345デフォルトの名無しさん
2007/12/04(火) 15:29:00http://msdn2.microsoft.com/ja-jp/library/ba0a1yw2(VS.80).aspx
0346339
2007/12/04(火) 16:02:59ビンゴでした。THANKS!
http://www.cam.hi-ho.ne.jp/oishi/tips.html#keystate
を参考に、GetKeyStateで出来ました。
[DllImport("user32.dll")]
private extern static Int16 GetKeyState(VirtualKeyStates nVirtKey);
private enum VirtualKeyStates : int
{
VK_LBUTTON = 0x01,
VK_RBUTTON = 0x02,
}
public void OnTimedEvent(Object sender, ElapsedEventArgs e)
{
bool fLeftPressed = (GetKeyState(VirtualKeyStates.VK_LEFT) & 0x8000) != 0;
bool fRightPressed = (GetKeyState(VirtualKeyStates.VK_RIGHT) & 0x8000) != 0;
}
0347339
2007/12/04(火) 16:16:20private enum VirtualKeyStates : int
{
VK_LEFT = 0x25,
VK_RIGHT = 0x27,
}
必要な定義はこちらでした。
0348デフォルトの名無しさん
2007/12/04(火) 16:51:16ありがとうございます。
『public と宣言された型には、他のすべての型がアクセスできます。
internal と宣言された型には、同じアセンブリに所属する型だけが
アクセスできます。』
とあるのですが、ここでいうアセンブリとはソースファイルという理解
で正しいでしょうか?
0349348
2007/12/04(火) 16:55:18ということは、internal指定のクラスの場合は同一DLL, EXE
からしか参照できなくて、public指定のクラスの場合は
別のDLLやEXEから参照できるということですね。
0350デフォルトの名無しさん
2007/12/04(火) 16:57:510351デフォルトの名無しさん
2007/12/04(火) 16:59:18Keysつかえよ。
0352デフォルトの名無しさん
2007/12/04(火) 22:38:31kernel32.dllやuser32.dllなどといったものは64ビットWindowsにも存在するのでしょうか?
またこれらに64ビットポインタを渡しても問題ないのでしょうか?
手元に64ビット環境がないので、よろしくお願いします。
0353デフォルトの名無しさん
2007/12/04(火) 22:46:1864bitのAPIも同名DLL
WoW64で動くかどうかでどっちを使うか自動判断
明示したけりゃ/platform
0354デフォルトの名無しさん
2007/12/04(火) 23:03:46どうもありがとうございます。
特別な理由がなければ何も考えずに書けばいいんですね。
もう一つ質問があるのですが、32用と64ビット用の二つのdllがある場合、
P/Invokeで実行環境に適したdllを読み込むことはできますか?
0355デフォルトの名無しさん
2007/12/04(火) 23:22:37>>353のレスちゃんと読んでやれよ・・・
0356352
2007/12/04(火) 23:38:07どういうことです?
WOW64上で動作させて32ビット用を読み込めということですか?
ちなみにこの場合のdllはシステムにあるものではなく、自作のdllという意味です。
0357デフォルトの名無しさん
2007/12/04(火) 23:40:210358デフォルトの名無しさん
2007/12/04(火) 23:46:040359デフォルトの名無しさん
2007/12/04(火) 23:49:07シングルトンで実装させれば使う側は気にしなくてすむようになるけど
DLL検索パスを利用してうまいことやればdll名だけ違うDllImportとか書かなくてもなんとかなるかな
0360デフォルトの名無しさん
2007/12/04(火) 23:53:100361352
2007/12/04(火) 23:56:03最悪そうせざるをえないですね。
>>359
実行時に検索パスを設定するorアーキテクチャによって変更するってできるんですかね?
できたらかなりすっきり書けそうですが。
>>360
そうしたら実行環境が限られてしまうんじゃないですか?
0362デフォルトの名無しさん
2007/12/05(水) 00:01:510363デフォルトの名無しさん
2007/12/05(水) 00:02:26PATH
> そうしたら実行環境が限られてしまうんじゃないですか?
限られるんじゃなくて限らせるの。
x86とx64両方つくりゃいいだけ。
0364デフォルトの名無しさん
2007/12/05(水) 00:08:05それはちょっと保守の手間が増えるので避けたいです。
>>362
そうですね。とりあえずその方法でいきたいと思います。
どうもありがとうございました。
0365352
2007/12/05(水) 00:08:480366デフォルトの名無しさん
2007/12/05(水) 00:30:28継承を使って派生させて使うのとどっちがいいのでしょうか?
今までベースクラスに汎用メソッドを書いていたのですが、
Xmlの操作とか、クラスの本質に関係のない部分はユーティリティクラスのほうがいいのかな
と最近思うようになってきました。
HttpUtility.UrlEncodeみたいに、.NETでもユーティリティクラスの存在そのもの
を禁止されているわけではないですよね・・・
0367デフォルトの名無しさん
2007/12/05(水) 00:31:10Mathとか
■ このスレッドは過去ログ倉庫に格納されています