ふらっとC#,C♯,C#( ..
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
その名前で呼び出せば使えるんだから、命名規則の仕様まで分からなくてもいいと思うが。
576:デフォルトの名無しさん
08/04/05 18:18:13
>>575
あそっか。C#側いじればいいのか。
577:545
08/04/05 18:20:34
>>574
ありゃ。恥ずかしい><
全角混じってるだけでした。
ですがC#側で呼び出せません。。
むぅ…
578:デフォルトの名無しさん
08/04/05 18:21:56
>>577
だから呼び出し規則あわせろってずっと言ってるだろ。
今のコード貼ってみろよ
579:デフォルトの名無しさん
08/04/05 18:22:12
>>575
それじゃ根本的な解決になってないだろ
580:545
08/04/05 18:25:29
>>578
どこでそんなこと書いてありますか?
//test.cpp
extern "C" int __stdcall f()
{
return 777;
}
//test.def
LIBRARY
EXPORTS
f
//test.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
class Test
{
[DllImport("test.dll")]
static extern int f();
static void Main()
{
Console.WriteLine(f());
}
}
今のコードはこうです。
DLL側とC#側のコード貼ってください。
581:デフォルトの名無しさん
08/04/05 18:26:44
動けばいいんじゃないの?
582:545
08/04/05 18:28:05
C++で作ったDLLをC#で呼び出すときに皆さんはわざわざコマンドプロンプトを使うんですか?
ツールを使って名前を調べて呼び出したりするんですか?
583:デフォルトの名無しさん
08/04/05 18:29:42
こいつ何言ってんだ。DLL中身みないでどうやって名前調べるんだよ。
もしかしてスピリュアルってやつ?
584:デフォルトの名無しさん
08/04/05 18:35:34
>>582
当たり前だろ。
dumpbin /exports test.dll
の結果見せろよ。
585:545
08/04/05 18:38:41
えと、何か勘違いしてるかもしれないのでご指摘ください。
イメージとしてはWin32APIを呼び出すときのように使いたいのです。
[DllImport("user32.dll")]
extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY);
こんな感じで呼び出して利用できました。
なので自作のDLLも同じように出来るのかな?と思ったわけです。
C++のDLLをC++で呼び出したり、
C#のDLLをC#で呼び出すときは楽なのに、
マネージドからアンマネージドを呼び出すのは大変ですね…。
586:デフォルトの名無しさん
08/04/05 18:39:14
>>584
あんまりいじめるな。
お前がコード張ればいいだろ。
587:デフォルトの名無しさん
08/04/05 18:39:34
>>580
それコンパイルしたら普通に上手く動くぞ。
お前さんのやり方に問題があるとしか思えん。
588:デフォルトの名無しさん
08/04/05 18:40:29
>>586
俺は>558ではった
589:545
08/04/05 18:42:49
>>587
ありゃ。
もう一度新規プロジェクトからやり直して見ます!
590:デフォルトの名無しさん
08/04/05 18:46:35
>>561 だが・・・うーん、これでexport 出来るはずなのよね。
別の原因の気がするので
・dumpbin の結果
VS のコマンドプロンプト(たぶんスタートメニューのツールの
下あたりにある)を起動して、生成した C++ な DLL に対して
dumpbin /EXPORTS "test.dll"
みたいにしてその結果を張ってください
・探索ロケーション周り
当然 C# な exe と C な DLLは同じフォルダにないとダメですよ。
あたり確認してみてくれ
591:545
08/04/05 18:56:11
>>590
両方ともプロジェクト作り直したら通りました;
dumpbinの結果は
File Type: DLL
Section contains the following exports for test.dll
00000000 characteristics
47F74A82 time date stamp Sat Apr 05 18:46:42 2008
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001000 f = _f@0
Summary
1000 .data
1000 .rdata
1000 .reloc
1000 .rsrc
1000 .text
こんな感じでした。お騒がせしました><
DLLは作ったことないので色々いじって見ます。
592:545
08/04/05 18:59:29
>>590
あ、すみません、言い忘れてました。
ありがとうございました!
593:デフォルトの名無しさん
08/04/05 19:01:31
>>582
人の作ったDLLなら見る。
だって、C/C++のヘッダを見ただけでは分からないこと(修飾名)があるから。
WindowsシステムのDLLはそれがもう分かっているし、
585のように単純にDllImportを書くだけで使えるようになっているから見ない。
自分で作ったDLLも見ない。どうなっているかは自分で決めた通りなのだから、
調べるまでもない(思い通りになっているかを確認することはあるが)。
594:デフォルトの名無しさん
08/04/05 19:05:01
自分で決めても見つからないとエラー出たら見るしかない。
今回はこのパターン。
595:デフォルトの名無しさん
08/04/05 19:12:33
>>593-594
ほぅほぅわかりやすい。
勉強になりました。
596:デフォルトの名無しさん
08/04/05 19:16:48
うぁっ、C++呼び出しの人まだやってる、C++使えないのなら無理して使うなよwww
一応コマンドラインに落ちなくても全部IDE上でできるが
詳しい知識がないと、VSのバージョンが上がったら手が付けられなくなるぞ。
597:デフォルトの名無しさん
08/04/05 19:20:54
手が付けられへんってどんだけレベル低いねん。
598:デフォルトの名無しさん
08/04/05 19:23:07
あれのレベルの低さは見ての通りじゃん、どう考えても相互運用コードが作れるレベルじゃない。
説明した通りに書かせればその分についてのみは動くだろうけど
599:デフォルトの名無しさん
08/04/05 19:26:52
無理して、…っていうか興味を持ったからです。
一度動いてからわからないものを調べて学ぼうと思っただけです。
今日はこれをやるって決めたんです!
600:デフォルトの名無しさん
08/04/05 19:28:58
>>599
まずはC++のリンクの仕組みを確り勉強するといいよ、いきなり吹っ飛ばしてC#とリンクとか無茶だから。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4347日前に更新/161 KB
担当:undef