ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
369:デフォルトの名無しさん
08/03/30 20:21:36
358 じゃないですが、プロキシオブジェクトと聞いて・・・
以前からある System.Collections.ArrayList.ReadOnly や System.Collections.ArrayList.Synchronized
に対応する
ジェネリックス版は無いのでしょうか?
見つからなくてとりあえず自作してしまっているので、あれば交換しておきたい所。

370:デフォルトの名無しさん
08/03/30 20:22:31
>>365
そんな最低な仕様は嫌だろ、Linqも何も使えなくなっちまう。

371:デフォルトの名無しさん
08/03/30 20:24:49
>>369
ないよ。なくなっちゃった。

372:デフォルトの名無しさん
08/03/30 20:30:53
List<T>.AsReadOnlyはある

373:デフォルトの名無しさん
08/03/30 20:38:24
>>372
ども、Asが付いたのか
なんとも実装が中途半端だな、問題が見つかったのだろうか?

374:デフォルトの名無しさん
08/03/30 20:38:54
System.Collections.ObjectModel.ReadOnlyCollection<T>ってのもある。
Synchronizedは・・・まぁ手抜きサービスとしてはあまりに
お粗末すぎるから廃止されたんじゃねーの?

375:デフォルトの名無しさん
08/03/30 20:41:39
>>358
敢えてタイトルの中身には突っ込まないでおこう。

376:デフォルトの名無しさん
08/03/30 20:59:46
オンラインMSDNが最近重いからオフラインにインストールしてみたのですが・・・
キーワード検索で「socket」って入れるとSystem.Net.Sockets.SocketExceptionしか出てこない
こんなものでしょうか?、それとも使い方を間違えているのでしょうか?

TcpClient tcp = listener.AcceptTcpClient();
このtcpからリモートのIPを調べる方法を知りたいのです


377:デフォルトの名無しさん
08/03/30 21:19:57
WindowsSDK入れたら表示できるようになったような気がする

378:デフォルトの名無しさん
08/03/30 21:27:27
>>376
TCPは知らないけど、
どのMSDNライブラリを入れたのか?
フィルタが設定されていないか?

これ入れた?
URLリンク(www.microsoft.com)

379:デフォルトの名無しさん
08/03/30 21:49:59
>>374
問題が分ってきた
使いにくい理由は、SyncRootをコンテナが持っているからで
外部から渡せば十分使い物になりそうな感じがするんだけどな。

380:デフォルトの名無しさん
08/03/30 22:36:06
>>377-378
VS2008ExpressJPNX1428694ってDVDでVCSやVCとかも入った物から入れました。
>>378のサイズを考えると上記のDVDには一部しか入っていないようですです。
ありがとうございます。

しかし2464.6 MBはADSLには辛い・・・。


381:デフォルトの名無しさん
08/03/30 23:32:42
>>358
IList<>とIDictionary<>のインデクサの汎用ラッパー作ってみた

public static class Indexer {
public static DictionaryIndexer<TKey, TValue> GetIndexer<TKey, TValue>(this IDictionary<TKey, TValue> dict) { return new DictionaryIndexer<TKey, TValue>(dict); }
public static ListIndexer<T> GetIndexer<T>(this IList<T> list) { return new ListIndexer<T>(list); }
}

public sealed class DictionaryIndexer<TKey, TValue> {
private IDictionary<TKey, TValue> dict;
internal DictionaryIndexer(IDictionary<TKey, TValue> dict) { this.dict = dict; }
public TValue this[TKey key] { get { return dict[key]; } set { dict[key] = value; } }
}

public sealed class ListIndexer<T> {
private IList<T> list;
internal ListIndexer(IList<T> list) { this.list = list; }
public T this[int index] { get { return list[index]; } set { list[index] = value; } }
}



382:デフォルトの名無しさん
08/03/30 23:40:27
C#+ASP.NETの学習で何か良書はありませんでしょうか?
(値段、初心者向け問わず、なるべく内容の濃いもの)

383:デフォルトの名無しさん
08/03/31 15:40:49
C#で
URLリンク(www2s.biglobe.ne.jp)
のような処理を行いたいのですがどうすればよいのでしょうか?
ヒントでも構いませんのでご教授いただければ幸いです。

384:デフォルトの名無しさん
08/03/31 15:49:26
>>383
シェル拡張したいってことかな?
↓こんな話が。
URLリンク(blogs.wankuma.com)

385:デフォルトの名無しさん
08/03/31 16:34:10
>>384
シェル拡張ではない気がします......
キーボードフックでF2キーを監視しているのでしょうか?

386:デフォルトの名無しさん
08/03/31 16:40:49
普通にサブクラス化してるだけじゃないの?

387:デフォルトの名無しさん
08/03/31 17:12:17
配列の中にある数字をすべて足すにはどうすればいいですか?
ちなみに配列は一次配列で内容はint型の整数です。

388:デフォルトの名無しさん
08/03/31 17:20:23
var arr = new { 1, 2, 3 };
var total = arr.Sum();

.NET 3.0かそれ以前なら普通にループ。

389:デフォルトの名無しさん
08/03/31 18:20:39
>>385
見るからにシェル拡張に見えるよ

390:デフォルトの名無しさん
08/03/31 19:13:52
>>388
new[]だろ?

391:デフォルトの名無しさん
08/03/31 20:45:58
C++から移行してきたんですが、C++用のDLLってC#で使えますか?
MFCに依存しないWin32 DLLです

392:デフォルトの名無しさん
08/03/31 20:49:51
C++特有の機能を使っていないただの関数ならできる。
あとはCOMになっているやつもいける。

393:デフォルトの名無しさん
08/03/31 20:52:06
>>389
どうもありがとうございます。
シェル拡張部分をCやC++で書いて処理部分をC#で書く、と言う形になるのでしょうか?


394:デフォルトの名無しさん
08/03/31 20:53:57
>>392
てことは、クラスとかは無理ってことでしょうか

395:デフォルトの名無しさん
08/03/31 20:58:54
C++/CLIつかえばいいよ

396:デフォルトの名無しさん
08/03/31 21:07:27
IDisposable実装してDisposeしたいのですが、メンバのすべてを
自分で明示的にクリアしなければならないですか?
たとえば、プロパティ用の一時変数とかも含めて。

public List<int> hoge;
private string _piyo;
private int _fuga;

↑がある場合は、↓みたいに全てクリアが必要なのでしょうか?

hoge = null;
_piyo = null;
_huga = 0;

397:デフォルトの名無しさん
08/03/31 21:26:14
unmanagedなリソースだけでいい

398:デフォルトの名無しさん
08/03/31 21:37:07
別にIDisposable実装したからってGCに特別な影響があるわけじゃないよ
使い終わったら実行してほしい普通のメソッドを実装するだけ

399:デフォルトの名無しさん
08/03/31 21:39:58
フィールドにDisposeメソッド持っているやつがいたら
そいつは呼んでおけ。

400:396
08/03/31 22:02:30
>>397-399
はい、わかりましたー。

401:デフォルトの名無しさん
08/03/31 22:08:03
>>393
というか要するに複数バージョンのCLRが同一プロセスで動けないのが
問題なわけさ。エクスプローラは単一プロセスにシェル拡張読み込む
ので別バージョンのCLR使うシェル拡張読み込んだ瞬間クラッシュしちまう


それが解決出来るのならなんでもいい。といってもC++ネイチブ使ってアウト
プロセスにしちまうくらいしか思い付かないがまあ確かに出来そう。

402:デフォルトの名無しさん
08/03/31 22:37:24
MSDN引きながらちょろちょろ半分コピペしながら書いてるけど
量が多すぎてC# .Net Frameworkがわかった気がしない・・・。
しかも、なにかやりたいことがあって、それが可能か不可能か
を調べるのに、MSDNに記載されている箇所を正しく見つける
ことができずに、ぐぐって見つけたどこかの海外のフォーラム
とかブログの記事なんかで推測する始末・・・。

403:デフォルトの名無しさん
08/04/01 00:03:34
>>402
量が少なく過ぎよりははるかにマシだから。

404:デフォルトの名無しさん
08/04/01 00:07:43
どのみち外部参照するなら量がすくないほうが無駄時間へって親切

405:デフォルトの名無しさん
08/04/01 00:10:25
MSDNって日本語で読むと混乱するよなw

406:デフォルトの名無しさん
08/04/01 00:12:41
>>404
WPFの適当なドキュメントを見てみろ
今までなんだかんだいって頼りにしてたんだなと痛感する

407:デフォルトの名無しさん
08/04/01 00:13:40
MidPointRoundingの説明なんて誤訳に近いよな。

408:デフォルトの名無しさん
08/04/01 00:14:10
外部でさがすんだろ?
ならないほうがいいじゃん

409:デフォルトの名無しさん
08/04/01 00:19:46
英語読めね

410:デフォルトの名無しさん
08/04/01 00:21:52
勉強するだけでOK

411:デフォルトの名無しさん
08/04/01 00:25:28
いやMSDNを超軽くしてくれればそれだけでいい・・・。あの重さは凶悪だろ・・・。
あれだけで引く気がうせる。

412:デフォルトの名無しさん
08/04/01 00:31:23
ローカルな MSDN はいいんだが、
ネット上の MSDN は最悪だな。

413:デフォルトの名無しさん
08/04/01 00:33:37
まちがって最初にネット検索に設定してからローカルのMSDNをみることができない
だれか助けて><

414:デフォルトの名無しさん
08/04/01 00:43:38
メモリ1Gしか積んでないからかもしれないけど、
ローカルでもSystem.Windows.Forms名前空間みたいに
でかいページを表示しようとするときと移動するときは重い

415:デフォルトの名無しさん
08/04/01 00:49:44
MSDNライブラリのためにPCを買い換えなければならんとは。くちおしや。

416:デフォルトの名無しさん
08/04/01 09:05:42
typedefはないの?

417:デフォルトの名無しさん
08/04/01 09:34:04
要らないの

418:デフォルトの名無しさん
08/04/01 09:50:39
listview+= mouseclickはアイテムが存在しない所では発生しないみたいですが、
これをlistview内であれば発生するようにしたい場合はどうしたら良いでしょうか?

419:418
08/04/01 09:54:13
mousedownか、コントロールとコンポーネントの違いすら理解していなかったorz

420:デフォルトの名無しさん
08/04/01 16:34:24
DataTable.PrimaryKeyを設定したものをWriteXmlした時にファイルの内容を見てみると
プライマリーキーらしい情報が見つからないのですがこれは先頭にあるカラムが自動的に
プライマリーとして扱われるという認識で合っていますか?

421:デフォルトの名無しさん
08/04/01 16:58:56
合ってない。
プライマリキーの情報を書き込みたいなら XmlWriteMode.WriteSchema が必要。

422:デフォルトの名無しさん
08/04/01 17:01:03
クラスなんかC++同士でも怪しいだろ

423:デフォルトの名無しさん
08/04/01 19:28:25
>>406
同感、なんだかんだいってもMS頑張ってるよ、もっともっと頑張って欲しいが
WPFにしてもLINQにしても、めちゃめちゃ使えるのに、リバースエンジェニアリング的なことまでやらないと理解できないのはあまりに寂しい。

>>393
マネージドコードが使えるシェル拡張が強く欲しいよな
しかし、現状では素直にComで作っとけ。

424:デフォルトの名無しさん
08/04/01 20:53:24
listboxでアイテム削除を繰り返しているとインデックスがずれるらしいのですが、どうすれば良いですか?
たぶんこんな感じにずれてます。
index 値
1 AAA
2 BBB
3 CCC

2番を消すと
1 AAA
2 CCC

425:デフォルトの名無しさん
08/04/01 21:25:35
どうと言われてもそういうものだから仕方がない。
何をしたいのか具体的に書いてくれないと、書きようがない。
ヒントとしてはItemsに設定できるのはObjectで、
SelectedItem系でそのObjectが取得できるってこと。

426:デフォルトの名無しさん
08/04/01 21:56:48
わかりました。
ありがとうございました。

427:デフォルトの名無しさん
08/04/01 22:16:12
やっぱり分かりませんでした。
自己定義のクラスのオブジェクトを渡すと、クラス名が表示されてしまいます。
表示名を設定する方法を教えて下さい。

428:デフォルトの名無しさん
08/04/01 22:18:18
自己解決しました。


429:デフォルトの名無しさん
08/04/01 22:31:13
菅直人「1+1は、いったい何なんですか?」
小泉 「2です」
菅直人「ですから、1+1なんですよ。質問に答えてください」
小泉 「2ですね」
菅直人「全く質問に答えていない。国民が聞きたいのは1+1なんですよ!」
小泉 「どうあっても2です」
菅直人「全く説明になっていません」
小泉 「誰が何と言おうと2です」
菅直人「うまく逃げましたね。あなたはいつもそうだ」
小泉 「……?」
菅直人「あまり国民をなめないで頂きたい!」
小泉 「ですからねぇ・・・原則として、1+1は2、
     これは揺らがない、私はずっとそうお答えしています」
菅直人「いいでしょう、最後に私は、小泉総理は1+1について
     国民をあざむいたと、そう申し上げて答弁を終了します」

430:デフォルトの名無しさん
08/04/01 22:35:43
コピペ君って馬鹿だな、まで読んだ。

431:デフォルトの名無しさん
08/04/01 22:53:45
updateで古い物を上にしてソートしたいのですがキャストに失敗してしまいます。
order.Field<DateTime>("update")でフィールドとDateTimeとしてソートしてくれる
のではないのでしょうか?。updateにはDateTime.Now.toString();が入っています。

EnumerableRowCollection<DataRow> query = from order in table.AsEnumerable()
orderby order.Field<DateTime>("update")
select order;

>>421
ありがとうございます。

432:デフォルトの名無しさん
08/04/01 23:23:16
列updateはstring型じゃないのか?
だとすれば、こうだろ

order.Field<string>("update")

433:431
08/04/01 23:32:17
日付としてソートしたかったのですがDateTime.Nowの形ではだめなんですね
カラムの設定を指定したらいけそうです。

434:デフォルトの名無しさん
08/04/02 03:07:56
最近C#の入門書を購入したのですが、やはり内容を丸暗記したほうがいいのでしょうか?(猫でもわかるC#プログラミングという本で400ページくらいのものです)
グーグルで検索してみると、暗記しろと書いてあるところもあれば
必要最低限のところだけ覚えればいいと書いてあるところもあり
どうしたものかと右往左往しています

もし仮にこの本を丸暗記したとして次のステップアップはどのようにすればいいのでしょうか?

435:デフォルトの名無しさん
08/04/02 03:42:13
猫プログラミングに載ってるぐらいの初歩的な内容は覚えておいて損はない
とは言えると思うけど、余程暇で無い限り丸暗記する必要はない。
(こんな機能があるってだけ覚えておけば、必要な時に思い出したり調べることが出来る)

次のステップは・・何を作りたいかによって全然違うから何とも言えない。

436:434
08/04/02 04:28:06
>>435
ありがとうございます

本に書いてあることさらっと全部やってみて、大事そうなところをあとから復習してみようと思います

437:デフォルトの名無しさん
08/04/02 10:47:50
よく使うものはその気がなくても気が付いたら覚えている。
けど大事なところは思い出せないんだけどね。

438:デフォルトの名無しさん
08/04/02 11:22:19
MessageBoxのボタンを英語で表示する方法って無いでしょうか
キャンセル→Cancel
みたいな

FormのLanguageを英語にしてみたけど日本語のままだったorz

439:デフォルトの名無しさん
08/04/02 11:29:16
>>438
CurrentUICultureを英語にしてみるとか。

440:デフォルトの名無しさん
08/04/02 11:37:46
リンクではないブラウザに表示されている画像をD&Dする方法はあるのでしょうか?
DragEnterを書き換えないと無理だとハードルが高すぎるのですが・・・

441:デフォルトの名無しさん
08/04/02 12:15:48
>>440
ファイルパスが含まれてるならキャッシュから持ってこれるかもしれない。
DeviceIndependentBitmapとか持ってたらそれから作れるな。面倒だけど。
DragEnterの書きかえって何?

442:デフォルトの名無しさん
08/04/02 12:31:43
>>436
っていうか今時のプログラミング関係の本の読み方は基本は「乱読」だと思うよ。
一冊の本を熟読なんていう受験勉強スタイルは時間のムダだと思う。

これ一冊読んでおけばOK、なんて網羅的は本はないし、
書くほうも恐らく精読されることを想定して書いてない。

あと個人的意見として、「猫でも〜」の著者の本はウンコだと思う。

443:デフォルトの名無しさん
08/04/02 12:33:43
>>441
それがブラウザ上の画像からD&DをしようとするとDragEnterイベントが起きないのです。
こういう場合はDragEnterをオーバーライド?とかしないといけないのでしょう?。

444:デフォルトの名無しさん
08/04/02 12:45:08
>>443
ドラッグできないものならドロップ先でなにしようがD&Dできない。
ドラッグできるものならドラッグ元が制限かけない限りDragEnterは発生する。
何をドラッグさせるかはドラッグ元次第。
まずドラッグできてるのかってところから確認。

445:デフォルトの名無しさん
08/04/02 14:40:19
ていうかブラウザから画像D&D出来るよ

446:デフォルトの名無しさん
08/04/02 15:16:00
HttpWebRequestでHTMLを取得・解析するプログラムを作っているのですが、
あるサーバーのHTTPヘッダーが
本来CRLFでなければならない部分がLFLFになっているらしく、
アクセスすると「サーバーによってプロトコル違反が発生しました. Section=ResponseStatusLine」
というエラーが出て落ちてしまいます

これを回避するにはどうしたらいいでしょうか?
よろしくお願い致します。

447:デフォルトの名無しさん
08/04/02 15:34:30
構造体作るたびにEquals(構造体),Equals(object),==,!=,GetHashCode実装するのが
面倒なんだけど何とかならない?

448:デフォルトの名無しさん
08/04/02 15:45:04
>>446
HttpWebRequest使うのを諦めてSocket or TcpClient使う

449:デフォルトの名無しさん
08/04/02 15:47:10
>>448
ありがとうございます。
TcpClientは使ったことないですがやってみます

450:デフォルトの名無しさん
08/04/02 15:59:48
>>446
UseUnsafeHeaderParsing
でどうにかならんかな?

451:デフォルトの名無しさん
08/04/02 18:04:44
>>450
ありがとうございます
System.Configuration.dllをアセンブリ参照に追加して、
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
SettingsSection section = (SettingsSection)config.GetSection("system.net/settings");
section.HttpWebRequest.UseUnsafeHeaderParsing = true;
で行けました。

452:デフォルトの名無しさん
08/04/02 19:09:26
VS2008を使って.net framework3.5で開発してたんですが
2.0対応にしようと思って、プロジェクトのプロパティのアプリケーションタブの対象フレームワークを2.0にして
3.5及び3.0をアンインストールしてからソリューションを開いてみたら、
version3.5のmicrosoft.build.engineがありません、と言われて起動出来ませんでした。
なにかアドバイスもらえませんか?


453:デフォルトの名無しさん
08/04/02 19:14:06
ターゲットバージョンを指定できるとはいえ、ビルドに使ってるのは3.5のコンパイラだし。
2008に必要なランタイム削れば、そら動かんのは当たり前だろ。

2008のIDEだけ欲しかったとか? あてが外れたね。

454:デフォルトの名無しさん
08/04/02 19:23:06
開発者がランタイム嫌うとかアホかと

455:デフォルトの名無しさん
08/04/02 19:48:58
>>438
最悪、Win32 APIのMessageBoxExか自前でやるか。

456:デフォルトの名無しさん
08/04/02 19:49:03
いつもの人なんだろうな、もうプログラム組むのあきらめたら?

457:デフォルトの名無しさん
08/04/02 20:14:38
>>444-445
これだと画像を引っ張った時に e.Effect = DragDropEffects.None;の状態になるので
イベントが起きていないと勘違いしていました。すいません。
でも、e.Data.GetDataPresent("UniformResourceLocator")にマッチするのに何故でしょう?。
イベントが二回起きているからなのかな?。

private void treeView_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("UniformResourceLocator") || e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link;
}
else if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
e.Effect = DragDropEffects.None;
}
else
{
e.Effect = DragDropEffects.None;
}
}

458:457
08/04/02 20:18:32
お騒がせしました。
画像の場合、DragDropEffects.Linkだとだめなのですね。
e.Effect = DragDropEffects.Copy;にしたら上手く行きました。

459:デフォルトの名無しさん
08/04/02 21:09:56
>>438
MessageBox は現在の MUI (または言語バージョン) に合わせて表示するので、変更はできないし、
できるだけそういう処理をすべきではない。

いっそのこと日本語を含む多言語対応 (Localizable = true) にしてしまうのが良いのでは?

460:457
08/04/02 21:13:12
わけわからん。.netがバグってる?とか言ったら突っ込まれるのだろうか・・・。
デスクトップからファイルをドロップ → ×
ブラウザから画像ファイルのドロップ → ×
ブラウザからハイパーリンクリンクをドロップ → ○
おまけに他の.netアプリでもD&Dできなくなったしorz
再起動してくるよ・・・

private void treeView_menu_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("UniformResourceLocator") || e.Data.GetDataPresent(DataFormats.FileDrop))
{
if (e.Data.GetDataPresent("DeviceIndependentBitmap"))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Link;
}
}
else
{
e.Effect = DragDropEffects.None;
}
}


461:457
08/04/02 21:16:55
再起動したら直ったw
何のこっちゃ

462:デフォルトの名無しさん
08/04/02 22:07:47
>>459
え?
UIスレッドのCurrentUICultureをいじれば普通にできなかったっけ?

463:デフォルトの名無しさん
08/04/02 23:52:50
>>462
459 じゃないが、試してみた、駄目っぽいな。

464:459
08/04/02 23:57:35
>>462
Windows Forms の MessageBox.Show は実質 MessageBox 関数 (API) の
リダイレクトだから、CurrentUICulture が効かないんだな。
独自にダイアログを作れば Thread.CurrentUICulture でいいと思うけど。

465:デフォルトの名無しさん
08/04/03 00:04:14
MessageBoxモドキを自分で作るしかないのかねぇ

466:デフォルトの名無しさん
08/04/03 00:05:15
URLリンク(www.atmarkit.co.jp)
こんなん見つけてきた、国際対応の仕方だけど結構便利そうだな。
さすが世界中のソフトを売りさばいている会社だけの事はあるw

467:デフォルトの名無しさん
08/04/03 00:11:31
Textboxを継承してTextbox2を作成。
これをツールボックスからGUIでFormに
配置するのって無理?

468:デフォルトの名無しさん
08/04/03 00:14:35
できるよ。

469:デフォルトの名無しさん
08/04/03 00:14:39
一度ビルドすればツールボックスに追加される。

470:デフォルトの名無しさん
08/04/03 00:23:01
自分で作ったコントロールってそれから別のプロジェクト作るときもツールボックスに入るの?

471:デフォルトの名無しさん
08/04/03 00:24:21
試せよ、クズ

472:デフォルトの名無しさん
08/04/03 00:24:49
>>470
そのコントロールが入っているアセンブリに参照設定すればOK

473:デフォルトの名無しさん
08/04/03 00:29:52
>>471
スレタイ嫁

474:デフォルトの名無しさん
08/04/03 00:32:13
気をつけろ、延々こういう事をする奴が一人いる
知らないんじゃなくてわざとだ

475:デフォルトの名無しさん
08/04/03 00:36:55
>>452 見たいな奴を見かけたら無視する方針でよろしく

476:デフォルトの名無しさん
08/04/03 00:41:42
>>472
なるほど
DLL化しておくのが一番いいんですかね

477:467
08/04/03 00:45:14
お、できるんか。ヤッタ!
できんと思ってた。やってみるわ。

478:デフォルトの名無しさん
08/04/03 00:53:30
>402
おれもMSDNでキーワード拾って
最後はググってる・・・。

MSDNがいまいち分からん。
MSDN使い方マニュアルがほしい・・・

479:デフォルトの名無しさん
08/04/03 01:05:29
MSDNのWEBはブラウザの検索エンジンに登録して
ガシガシ検索が正しい使い方だと思ってる

480:デフォルトの名無しさん
08/04/03 22:06:02
ゲーム作りたいんですが
Visual C# 2008 Express Edition
で十分ですかね?有償版にしかない機能とかはなんなんでしょうか?


481:デフォルトの名無しさん
08/04/03 22:12:00
十分
デバッガがちょっとだけ弱いけど工夫次第でどうにでもなる

482:デフォルトの名無しさん
08/04/03 22:13:21
C#でもActiveXとか使えますか?

483:デフォルトの名無しさん
08/04/03 22:13:59
>>481
なる。デバッガとかですか。トンクス。
たしかVisualC++だとMFCとか使えなかった気がしたんで心配しまちた。

484:デフォルトの名無しさん
08/04/03 22:14:10
XNAは今のところVC#2005Expressだけだった気がする

485:デフォルトの名無しさん
08/04/03 22:16:51
>>484
XNAってあのXBOX360上でも動くランタイムみたいなやつっすかー。
PCゲームオンリーでXNA使うメリットってなんかありますかね?

とりあえずDirectXさえ動いてくれればいいかなーとか思ってたんすが・ω・;

486:デフォルトの名無しさん
08/04/03 22:26:16
あるMethodInfoオブジェクトが表すメソッドが,特定の型のデリゲートにバインドできるかどうか
調べる方法はありますか? 試しにCreateDelegateしてみるしかないのでしょうか

487:デフォルトの名無しさん
08/04/03 22:29:07
URLリンク(www.microsoft.com)
目立った所で、MSIインストーラーがないので、公開するのが面倒くさいかもしれない
ClickOnce の使えるレンタルサーバは限られている。
フリーのインストーラを使えば問題ない。
XAMLでゲームを作るなら、ちょっと不足があるかもしれない。
VSSでバージョン管理したいなら、使えないので注意が必要。
フリーソフト類と組み合わせて開発するつもりなら「マクロ、アドイン、パッケージは使用不可」に注意。

488:デフォルトの名無しさん
08/04/03 22:33:44
>>487
なるほどーすごい参考になりました。ありがとうございます(__)
たしかにmsiがないのは公開するときダリーですね。


489:デフォルトの名無しさん
08/04/03 22:51:15
5年前のだけど今から読んでも役に立つ?

これ↓
URLリンク(www.amazon.co.jp)

490:デフォルトの名無しさん
08/04/03 22:52:09
いいえ

491:デフォルトの名無しさん
08/04/03 23:00:04
System.Windows.Forms.Control control = new System.Windows.Forms.Control();
いまさらだけど、こういう宣言って悠長じゃね?

var control = new System.Windows.Forms.Control();
オブジェクトの型はオブジェクト自身が知ってるからこれでいいんじゃね?

492:デフォルトの名無しさん
08/04/03 23:01:04
ゆうちょう?

493:デフォルトの名無しさん
08/04/03 23:04:03
そのためにvarがあるんだが

494:デフォルトの名無しさん
08/04/03 23:07:10
冗長だな。

495:デフォルトの名無しさん
08/04/03 23:08:40
>>485
メリット以前にC#でDirectX直触りするんならレガシーのぞいてオフィシャルは
XNAしか茄子。

本当に直触りも出来るけど素人お断り&とても大変&あれ以上の完成度
難しい。…まあXnaがかなりよく考えて作られてるってことだが

496:デフォルトの名無しさん
08/04/03 23:12:24
>>484
2.0からEE縛り消えた。C#のみサポート縛りは確かあり

497:デフォルトの名無しさん
08/04/03 23:13:55
>>495
なるる。なんかWikiみるとXNAにはフレームワークも用意されてるっぽいし、
サンプルが充実してそうでつね。ぱっとみ気になるのは

「日本語の表示が非常に難しい」
「ジョイパッドはXBOX360コントローラーだけ」

ってところかな?wまぁ実際触ってみます。

498:デフォルトの名無しさん
08/04/03 23:29:15
>>497
SpriteFont出来たから日本語の表示は楽になった。ビルドに時間かかるぐらい。
というか文字表示はDirectX使うならどっちにしろ大変。SpriteFontは
かなりいい落とし所。

DInputはMarshalingに慣れてる人なら直で触ってもサクッと書けてしまう
ぐらいのコード量かと。全機能綺麗にと言われたらちょっと大変かもだが

499:デフォルトの名無しさん
08/04/03 23:58:33
遅延バインディングっていうのかな?
XMLにButton1を押した時にはC:\XXX\AAA.dllのBBB.bbbクラスのcccってメソッドを呼ぶ
ってな感じで記入して、記入した内容を元にプログラムを実行したいです。。
XMLを書き換えればソースを書き換えなくても動くようにしたいんです。
まだまだC#はかじったばかりですが、どのあたりを勉強すればいいですか?

検索のキーワードとか、ヘルプで見るネームスペースとかだけでもいいから教えてください。

500:デフォルトの名無しさん
08/04/04 00:17:34
>>498
なるほー。情報マジどもです(__)
XNAさわりまくってみまつ。

501:デフォルトの名無しさん
08/04/04 01:03:57
SystemBrushes.Highlight から取得したブラシを
使い終わった後でDisposeしようとしたら下記の例外が発生しました。

System.ArgumentException はユーザー コードによってハンドルされませんでした。
Message="アクセス許可が有効でないため、Brush を変更できません。"
Source="System.Drawing"


SystemBrushesから取得したブラシはDisposeしてはいけないのでしょうか。# パフォーマンス上の理由?
それとも何か重大な勘違いをしているのでしょうか。

502:デフォルトの名無しさん
08/04/04 09:16:29
>>501
自分で作ってないものは破棄しちゃ駄目、というのが原則。

503:デフォルトの名無しさん
08/04/04 10:24:02
>>502
なるほど次から気をつけます。

504:デフォルトの名無しさん
08/04/04 10:28:01
>>499
WPF(XAML)なら標準でできる
WinFormsならリフレクションを駆使して自力で頑張る

505:デフォルトの名無しさん
08/04/04 10:58:23
>>501
まあプロパティで取得するオブジェクトだから、中の人がCloneを返すようにしていたならば当然Disposeして
問題ないのだが(むしろしないとまずい)、おそらく中の人はそのまんま参照を返しているみたいなので
その例外が出たんだろうね。
要するに他にもいろんなところで使われているオブジェクトの参照なので勝手にDisposeしてはいけないということかな。
仮にそのオブジェクトを変更したりする必要が出てくるような場合はCloneを受け取ればよい。

using (var sb = SystemBrushes.Highlight.Clone() as SolidBrush)
{
  Hoge();
}

これなら例外発生しない。

506:デフォルトの名無しさん
08/04/04 11:25:44
>>505
あーなるほど、中ではそういう事になってるんですね
ありがとうございます。とても参考になりました

507:デフォルトの名無しさん
08/04/04 13:17:50
質問。

超初心者で、まずハロワのプログラム書いたんだけど、SDKでコンパルして
.exeのやつ作って実行しても何か黒い画面が一瞬表示されるだけで何書いてるかも
読めない。これって俺の書いたのが悪いのか?メッセージループ?か何か使ってないから?

508:デフォルトの名無しさん
08/04/04 13:20:34
>>507
コマンドプロンプトから実行

509:507
08/04/04 13:33:59
SDK コマンドプロンプトから実行したらできた!
ありがとう>>508

510:デフォルトの名無しさん
08/04/04 17:07:42
すみません、質問よろしいでしょうか。

C#でスクリーンセーバーを一時無効化する事って出来るんでしょうか?
マウスポインタを強制的に動かす方法くらいしか思いつきません。
又その場合、実際のマウス操作と認識して無操作時間がリセットされるのでしょうか?

どなたかお力をお貸し下さい。お願いします

511:デフォルトの名無しさん
08/04/04 17:48:04
TabControl上に配置したTextBoxにtextBox1.Text == "Text;"
というように文字列を表示しようとすると
「静的でないフィールド、メソッド、・・・でオブジェクト参照が必要です」
とエラーになってしまうのですが、どのようにすればいいですか?

512:デフォルトの名無しさん
08/04/04 18:03:38
511 が 記述ミスでありますように…




513:デフォルトの名無しさん
08/04/04 18:29:40
; ; ; ; ;

514:デフォルトの名無しさん
08/04/04 19:14:11
2つ

515:デフォルトの名無しさん
08/04/04 20:20:47
常駐プログラムって、どうやったらできるの??

516:デフォルトの名無しさん
08/04/04 20:27:34
普通のプログラムだよ 特別なことは何も無い

517:デフォルトの名無しさん
08/04/04 20:44:16
タスクトレイの事かな

518:デフォルトの名無しさん
08/04/04 20:54:26
サービスじゃね

519:デフォルトの名無しさん
08/04/04 23:48:42
VB.NETとC#の演算子の違いに戸惑っています。

VB.NETで

Dim FileName As String = "C:\WINDOWS\system32\xvid.ax"
If IO.Path.GetExtension(FileName).ToLower <> ".dll" Then
  Console.WriteLine("DLLじゃないよ")
End If

は出来るのにC#で

string FileName = @"C:\WINDOWS\system32\xvid.ax";
if (System.IO.Path.GetExtension(FileName).ToLower != ".dll") {
  Console.WriteLine("DLLじゃないよ");
}

と出来ないのは何故でしょうか。
また、VB.NETと同じように処理可能にする方法はないでしょうか。

520:デフォルトの名無しさん
08/04/04 23:54:11
C#ではメソッド呼び出しの括弧は省略できないからToLower()と書く必要がある
VBでも括弧は省略しない癖を付けた方が…

521:デフォルトの名無しさん
08/04/04 23:59:45
>>520
orz

こんな単純ミスだったんですね…。
VB.NETの場合、"()"が必要な場合はインテリセンスが自動補完してくれるので気付きませんでした。
これからは気を付けます。

522:デフォルトの名無しさん
08/04/05 00:28:04
>>504
その自力で頑張るの部分をもう少し詳しくお願いできませんか?
System.Windows.Forms.Formを使用してます。

523:510
08/04/05 00:33:58
どうかお願いいたします。

524:デフォルトの名無しさん
08/04/05 01:56:53
TableLayoutPanelからコントロールを取り除くとき

for (int i = 34; 7 <= i; i--)
{
  tlp.Controls.RemoveAt(i);
}

のように後ろからやっていく方法と

for (int i = 34; 7 <= i; i--)
{
  tlp.Controls.RemoveAt(0);
}

のように前からやっていく方法とで、どちらかのほうがいいということはありますか?
それとも、たいした違いはありませんか?

525:デフォルトの名無しさん
08/04/05 02:02:56
後者は
for (int i = 34; 7 <= i; i--)
{
  tlp.Controls.RemoveAt(7);
}
でした、すみません

526:デフォルトの名無しさん
08/04/05 02:37:55
C#のフォームを使うプログラムで、複数フォームにまたがるデータは、
どこに格納するのが慣例なのでしょうか?

VBではモジュールがよさそうですが。

527:デフォルトの名無しさん
08/04/05 02:48:47
1. Application クラスの public static フィールド
2. フォームのコンストラクタで渡して使う
3. Form.Show の前にプロパティで渡す

528:デフォルトの名無しさん
08/04/05 09:02:56
こういう場合はどうやって変換したら良いのでしょうか?
obj = new (???) c;
それとも、こういう使い方をしてはいけないのでしょうか?

public class A
{
public A()
{
new B(this);
}

public A_C()
{
//
}
}

public class B
{
public B(object c)
{
c.A_C(); // ← こういう雰囲気の事をしたい
}
}

529:デフォルトの名無しさん
08/04/05 09:09:47
キャストすればいいんじゃね?

530:デフォルトの名無しさん
08/04/05 09:24:51
なんでobjectで受け取ってるのかが問題だな

531:デフォルトの名無しさん
08/04/05 09:30:23
そのキャストの仕方や受け取り方がわからない
Listview lv = (ListView) sender;とかと同じ理屈だとは思うのですが・・・
()の中に何を入れてよいのかわかりません

532:デフォルトの名無しさん
08/04/05 09:33:31
Aだろ。

533:デフォルトの名無しさん
08/04/05 09:39:04
あぁ、一生懸命classとか入れていました・・・。
例えばこのobjectがどのクラスか不明だった場合はどうしたら良いのでしょうか?

534:デフォルトの名無しさん
08/04/05 09:41:59
どうしたいんだよ?

535:デフォルトの名無しさん
08/04/05 09:43:13
先にc#の仕様を一通り理解すれば全て解決するパターンだな。

536:デフォルトの名無しさん
08/04/05 09:53:20
>>533
どのクラスか不明って少なくともA_C()を実装してるクラスが一番の大元だろう?
そのクラスにキャストしれ
っつか、そのクラスで受け取れよ。

537:デフォルトの名無しさん
08/04/05 09:57:37
というか、そもそも何をしたいのかがよくわからん。

538:533
08/04/05 10:03:27
えっと、自分が使いやすいようにまとめてある非同期ダウンロードのライブラリ的なものがありまして
ダウンロード完了時のイベントを呼び出し元で側で受け取りたいのです。
感じとしては以下のような形です。

public Download(string uri, string filepath,object obj)
{
if (dc == null)
{
dc = new WebClient();
dc.DownloadFileCompleted += new AsyncCompletedEventHandler(obj.DownloadCompleted);
}
dc.DownloadFileAsync(new Uri(uri), filepath);
}


539:デフォルトの名無しさん
08/04/05 10:07:20
objectじゃなくてAsyncCompletedEventHandler受け取れば済む話じゃね?
つか普通そのオブジェクトがイベントを伝播する形にするんじゃね?

540:533
08/04/05 10:16:03
言葉を知らないから説明できない
もやっとぼーるを投げます
お騒がせしました

541:デフォルトの名無しさん
08/04/05 10:43:33
よくわからんが特定のメソッドを呼び出したいんだと予想。
で、いろんなパターンがあって、全てのクラスに共通する基本クラスは作成できないと解釈。

呼び出したいメソッドを定義したインターフェイスを作って、
それぞれのクラスでそのインターフェイスを実装。
メソッドのパラメータはそのインターフェイスの型の型にする。

デリゲートで使えるかどうかはしらん

542:デフォルトの名無しさん
08/04/05 11:30:10
デリゲートかイベントで十分

543:デフォルトの名無しさん
08/04/05 11:31:47
>>538
MethodInfoあたりでも使えば、問答無用で好き放題できるだろうけど
その前に可能であればC#らしいスタイルを追求したいと思う自分がいる。

1.呼び出してほしいインターフェイスを定義して、呼び出されたいクラスが実装する。
 Downloadが完了次第、Downloadを持つクラスがそれを呼び出す。
 参照が無くなったりDisposeされたりといった問題があるなら、それを加えてもう一度やりたい事をここで説明。

2.主従関係を逆転して考えてみる。
 Download を持つクラスに event を定義して、呼び出されたいクラスがコンストラクタ等で自ら登録する。

3.MethodInfo を使って、まさに当初の質問通りの処理をする。

544:デフォルトの名無しさん
08/04/05 11:44:05
この辺読め
URLリンク(msdn2.microsoft.com)(VS.80).aspx

545:デフォルトの名無しさん
08/04/05 12:17:31
アンマネージドのC++で作ったDLLの関数をC#で使いたいのですが
DLL 'testdll.dll' の 'f'' というエントリ ポイントが見つかりません。
と例外が出てしまいます。
やり方が間違っているのでしょうか?
DLL側は
class c
{
 public:
 static __declspec(dllexport) int f();
};
int c::f()
{
 return 777;
}
C#側は
using System.Runtime.InteropServices;
using System;
namespace ConsoleApplication1
{
 class Program
 {
  [DllImport("testdll.dll")]
  public static extern int f();
  static void Main(string[] args)
  {
   Console.WriteLine(f());
  }
 }
}
こんな感じになってます。
testdll.dllとtestdll.libはC#側のフォルダに入れてます。

546:デフォルトの名無しさん
08/04/05 12:28:20
>>545
C++側のインターフェイスをCスタイルで書いてextern "C" とする。
C++の識別子は、どのようなスタイルになるのかはアンマネージドの範囲でも一切保障されない。

547:デフォルトの名無しさん
08/04/05 12:33:31
>>545
C++側をcomで作って、C#側はプロジェクトの参照設定よりdllを追加(COMタブより追加可能)

548:533
08/04/05 12:44:25
主従関係に困惑したりしながら色々と試行錯誤していたのですが読み出す時にイベントを付加する事にしました。
でも、今度は何のダウンロードが完了したのかわからない。未だに見慣れないのですがMSDNと格闘してきます!。

AsyncCompletedEventHandler e = new AsyncCompletedEventHandler(this.DownloadCompleted);
FileDownload(path, filepath, e);

public void DownloadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
System.Net.WebClient m = (System.Net.WebClient)sender;
//m.download_url = ???
}



549:545
08/04/05 12:49:16
>>546
extern "C"{
 __declspec(dllexport) int f()
 {
  return 777;
 }
}
DLLをこう書き直したのですが結果は変わりませんでした。
これはCスタイルではないって事でしょうか??

550:デフォルトの名無しさん
08/04/05 12:53:07
__stdcall

551:デフォルトの名無しさん
08/04/05 12:54:55
>>549
CallingConventionを合わせる

552:デフォルトの名無しさん
08/04/05 12:58:28
>>548
まずC++をしっかり勉強してからの方が無難かもしれないね。

553:デフォルトの名無しさん
08/04/05 12:59:29
>>552 はアンカミス >>548 -> >>549

554:545
08/04/05 13:47:47
>>550
extern "C"
{
 int __declspec(dllexport) __stdcall f();
}
int __declspec(dllexport) __stdcall f()
{
 return 777;
}
DLLをこう変更しましたがだめでした。
DLL側のコードを書いてくれませんか?

555:デフォルトの名無しさん
08/04/05 13:57:53
とりあえずCOMとIDLについて軽く勉強した方がよくね

556:デフォルトの名無しさん
08/04/05 14:05:22
P/InvokeにCOMもIDLも関係ないだろ。適当教えるなよ

557:デフォルトの名無しさん
08/04/05 14:09:12
dumpbin /exports
でdll調べてみたら

558:デフォルトの名無しさん
08/04/05 14:10:40
>>554
C:\>type test.cpp
extern "C" __declspec(dllexport) int f() {
return 777;
}

C:\>type test.cs
using System;
using System.Runtime.InteropServices;
namespace Test {
class Test {
[DllImport("test", CallingConvention=CallingConvention.Cdecl)]
static extern int f();
static void Main() {
Console.WriteLine(f());
}
}
}

C:\>cl /LD /nologo test.cpp
test.cpp
ライブラリ test.lib とオブジェクト test.exp を作成中

C:\>csc /nologo test.cs

C:\>test
777

559:545
08/04/05 16:14:51
>>558
/nologoと付けたら出来ましたが、IDEからビルドすると例外エラーです。
皆さんはアンマネージドのC++でDLLを作ってC#とかから呼び出したりしないんですか?

560:デフォルトの名無しさん
08/04/05 16:21:03
>>559
ふつーは .def 使ってエクスポート名をきちんとしておく。

561:560
08/04/05 16:27:33
つまりこういうことな。

//test.cpp
extern "C" int __stdcall f() {
 return 777;
}

//test.def
LIBRARY
EXPORTS
 f

//test.cs
[DllImport("test.dll")]
int f();



562:デフォルトの名無しさん
08/04/05 16:31:31
>>559
俺だったらC++/CLIで作る

563:デフォルトの名無しさん
08/04/05 16:55:54
>>561
コンパイルすら通らないんですが。。
//test.cpp
extern "C" __declspec(dllexport) int f()
{
 return 777;
}
//test.def
LIBRARY "testdll"
EXPORTS
 f
//test.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
 class Test
 {
  [DllImport("testdll")]
  static extern int f();
  static void Main()
  {
   Console.WriteLine(f());
  }
}
こうですか?
それでも例外出ますね。


564:デフォルトの名無しさん
08/04/05 17:15:55
>>563
あーごめんC#側で extern と static いるの忘れてた

とりあえずそのコードだとC側の呼び出し規約が間違ってる。def使う場合
dllexportはいらない

565:デフォルトの名無しさん
08/04/05 17:19:39
まずは、dumpbin 使え。

566:564
08/04/05 17:20:20
ごめんもう一個
.defはリンカの設定に追加する必要がある。VSは作ったら勝手にやって
くれた気もするが

567:デフォルトの名無しさん
08/04/05 17:21:52
>>565
Dependency Walkerでもいいけどな

568:デフォルトの名無しさん
08/04/05 17:51:54
>>566
モジュール定義ファイルにtest.defを追加すればいいんですかね??
それでもビルド出来ないんですが。。
error C3872: '0x3000': この文字を識別子で使用することはできません
error C2065: ' return' : 定義されていない識別子です。
error C2143: 構文エラー : ';' が '定数' の前にありません。

569:デフォルトの名無しさん
08/04/05 17:53:19
一行ヒントしか書かないやつは分からないのに答えてる法則。
そしてその後に関連される単語が出てくると「だから>>○○で言っただろ」と得意気な顔をするw

570:デフォルトの名無しさん
08/04/05 17:55:23
>>568
それ全角スペースだろ死ねよ。

571:デフォルトの名無しさん
08/04/05 17:59:11
まじ、dumpbin知らないってことか?
DLLの情報見れば解決する話だろうが。

572:デフォルトの名無しさん
08/04/05 18:00:06
1行ヒントはクグればすぐ分かるということだろう。

573:デフォルトの名無しさん
08/04/05 18:05:55
たった1行のコマンド実行するだけなのに、無視する理由が分からん。

574:デフォルトの名無しさん
08/04/05 18:08:43
>>568
そこかよorz
そのコードインデントに全角スペース使ってるからインデントは
そのままコピペするんじゃなくてタブか半角スペースにきちんと
置換してくれ

>>571
dumpbin 使おうが Dependency Walker 使おうがエクスポートされた
名前は見れるけど、「どうやってその名前を作るの」がわからない、
つまり確認しか出来ないから直接解決にならんだろ
まぁそれらを知っておいてかつ確認ぐらいはしてほしいがマジで
まぁふらっとだから

575:デフォルトの名無しさん
08/04/05 18:15:20
>>573
全角スペースを使うぐらいだから、コマンドプロンプトの使い方が分からないんだよ。

>>574
その名前で呼び出せば使えるんだから、命名規則の仕様まで分からなくてもいいと思うが。


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

4333日前に更新/161 KB
担当:undef