[プログラム板] C#, C♯, C#相談室 Part47
1 :
名無しぃ♯ :
2008/06/21(土) 17:51:22
2 :
名無しぃ♯ :2008/06/21(土) 17:52:16
3 :
名無しぃ♯ :2008/06/21(土) 17:53:07
立てた……んだが致命的にスレタイトル間違った……orz スマンかった 次のスレはちゃんと頭のゴミ消しといてくれ
スレタイがうんこ…
>>4 これくらい致命的じゃ無いな
次立てる事があれば気をつけてくれ
乙
スレタイだけでどの板に立ってるか分かるぜ
1000なら次はこれになる [プログラマー板] C#, C♯, C#相談室 Part48
VS C#でデバッグ終了時に20秒ほど待たされるのはなぜ?対処方法ありませんか?
気になるほど待たされたことは無い。 PCのスペックの問題か、プログラムの内容の問題と思われ。
スタートページを開いているとデバッグ終了時に待たされるかな
参考になった
17 :
デフォルトの名無しさん :2008/06/22(日) 22:29:30
RichTextBoxではなくTextBoxで 特定の文字に色もしくは特定の文字に背景色を設定することは 不可能ですか? 不可能な場合、自作コントロールだと思うのですが、 どのように作っていくのが良いですか?
なんでそんなにRichTextBoxがいやなんだよw
19 :
デフォルトの名無しさん :2008/06/22(日) 23:33:25
はい。あの独特のスクロールが嫌なんです。 TextBoxだとホイールとかなり同期して動いてくれますが、 RichTextBoxのあの遅いスクロールが今回のモノによろしくなくて。。。 TextBoxばりのスクロールにする方法があれば、解決です。
いいとこどりすればいい
21 :
デフォルトの名無しさん :2008/06/24(火) 00:28:08
いいとこどりとは?
立地にしてスクロールだけなんとかすりゃいい
23 :
デフォルトの名無しさん :2008/06/24(火) 22:47:16
Cはスレ違い
25 :
23 :2008/06/24(火) 22:53:54
・・・(汗 指摘ありですノシ
すごくマニアックなDBMSを使ってるんだけど、ODBCとADO用のプロバイダしか用意してない。 これをOLEでつなぐことってできるの?ちなみにODBC-OLEブリッジは、使えなかった(例外が出る)。
27 :
デフォルトの名無しさん :2008/06/26(木) 12:01:01
SlimDXを64bit用に再コンパイルしたらって意見が海外の掲示板にあるな
29 :
デフォルトの名無しさん :2008/06/26(木) 15:12:42
C#から動的にCOMのVTable Orderを取得する方法を御教授ください。 IUnknownを例とすると、下記のように表示するプログラムを作りたい のですが、まったく方法がわかりません。 QueryInterface 0 AddRef 1 ・ ・
typelibがあるならそれから引っ張り出すしかない。 interface IWksImagingServer : IDispatch { [id(0x00000001), propget, helpstring("property ImagingServicesInterface")] HRESULT ImagingServicesInterface([out, retval] unsigned long* pVal); もしid(0x00000001)のことだったら、それはDispach IDだから動的に取れる。 IDispachを実装してないI/Fには当然そんなものはない。
31 :
デフォルトの名無しさん :2008/06/27(金) 13:15:03
C#でNクィーンを作る方法を教えてください。 ぐぐってもほとんどjavaやCばかりで・・・・
応用しろ
BOINCでもやれ
34 :
デフォルトの名無しさん :2008/06/27(金) 15:57:29
いくら考えてもさっぱり分かりません。 どなたかNクィーンの勉強にいいサイトは知りませんでしょうか?
どうしたいのかまるで伝わらないのでエスパーでも呼べ
>>34 まず、C#でNクイーンを解くプログラムを作りたいと => これはおk
で、現状の理解度について
・アルゴリズム(解法)を理解していない
=> スレ違いだから理解してから出直せ
・アルゴリズムを理解したうえで、C#での記述の仕方が分からない
=> 分からない箇所を具体的に書け
>>36 どれが推奨とかは多分ないはず
ただ、環境を明示しない質問は自動的に最新版(VS2008、.NET3.5、C#3.0)とみなされるが
>>36 変更忘れてるだけでしょ
Express入れるんだったら特に理由がなければ迷わず2008
C#な人って新しもの好きが多いし
リンク先はどうせ2008だしなー
すっかりラムダ中毒で () => がないと生きていけない体に
() => _| ̄|○ こうですか?わかりません(><)
ラムダなぁ・・・ エディットコンティニューと中からのyieldさえあれば神だったんだが。
yieldは大量のコードを生成するから手軽に使われたくないんだろうな
どこかの記事で中の人が クロージャ内で yield 書けるようにしとけばよかったって言ってた気が。
今からでも変えてくれ
まだ C# 4.0 はプレビュー版すら出てないからなぁ。 今までの感じから言って、プレビュー版が出てからですら 正式版まで1・2年かかるから、 今、「次で対応します」と言っても、だいぶ先の話になる。
そこでC#3.5ですよっと C#4.0はどんなのになるんだろ
そこでF#ですよ
C#の次期バージョンの情報はないんけ?
>>49 C# "Future Focus" でググると多少出てくる。
まだMS社員が「こんなアイディア持ってるよ」ってレベルで、
仕様と呼べる段階じゃないけど。
言語の仕様をコロコロかえんでください それより便利なライブラリ提供してくれたほうがうれしいです
obsoleteになった仕様って無いんだし変えたわけではないと思うが
C#は言語仕様を変えたことはないよね
便利なライブラリってどんなの? 四次元ポケットとか?
匿名型を入れるコレクションを作ろうと思うと ダミーの匿名型のオブジェクトをジェネリックメソッドの引数に渡すとか 変態的なことしないといけないのは何とかしてほしい
…? 無名型 Array か ToList でええやん
>>51 .NET 3.0, 3.5 はライブラリ追加がメインじゃん。
なんか、「Windowsプログラミングの極意」に書いてあった話思い出すな。
「見た目ばかり変えてないで中身改善しろよ」という人に限って、
「電卓、代り映えしないよね」という。
実際には電卓の中身ものすごい変わってるのに。
>>55 var list = Enumerable.Range(0, 0).Select(x => new { X = 0.0, Y = 0.0 }).ToList();
我ながら変態的w
足したり引いたりが簡単にできるVectorクラスとか? んあに含まれてるけど、これのためだけに使うのはどうかと思う ところでxnaってどう読めばいいの?エクセナ?クセナ?んあ?クロスナ?エックス菜?ペケナ?ゼーナ?
>>59 3.5 にあるよ、Vector クラス。
System.Windows.Vector と System.Windows.Media.Media3D.Vector3D。
XNA は普通にエックス・エヌ・エー。
WPFは3.0だぜ
XNA's Not Acronymed
>>59 というか Linq みたいなんは基本的に副作用、状態を途中で変えるの
嫌って書いたほうがよい。足したいなら .Concat(...) で結合。
あごめん、足すって binary operator みたいなのか。
どう考えても数学でいうベクトルのこと
65 :
デフォルトの名無しさん :2008/07/01(火) 22:57:13
XmlSerializerでシリアライズするとき、 要素にNamespaceを設定すると <element xmlns="namespace-test"> 〜〜〜 </element> ってなるけど <test:element xmlns:test="namespace-test"> 〜〜〜 </test:element> ってできない?
66 :
65 :2008/07/01(火) 23:24:33
事故解決 シリアライズするクラスのメンバにXmlSerializerNamespaces入れたらできた
質問です>< Microsoft.DirectX.AudioVideoPlayback.Videoでビデオを開放するにはどうしたらいいですか? Openすると前のファイルを開いたまま開いちゃうしDispose()しても開放してくれないです><
指定フォルダ中の Word Excell PowerPoint ファイルに 指定したパスワードを掛ける/外す処理を行うにはどうすればよいのでしょうか? (C# や .NET で MS OFFICE ファイルを操作できると思っているのですが、無理でしょうか?)
>>69 VBの場合見かけ上プロパティの参照が渡せるように書けるから話がややこしい
71 :
デフォルトの名無しさん :2008/07/05(土) 07:37:09
>>68 開くときはdocuments.openでPasswordDocumentかWritePasswordDocument
あたりのパラメータに渡してやればいいと思うが。
保存時はdocument.passwordを設定して、document.saveでいけるんじゃね?
>C# や .NET で MS OFFICE ファイルを操作できると思っているのですが、無理でしょうか?
そもそもoffceのオブジェクトにc#からアクセスする方法がわからんというレベルなら、
MSDNで調べてくれ
72 :
デフォルトの名無しさん :2008/07/05(土) 11:55:20
ManagementObjectCollectionのDispose呼ぶとコレクションの内容もDisposeされる? 列挙したそれぞれの要素もDisposeしなきゃだめ?
>>69 どうせ書くなら具体的に書けよ。
どうせ自分の感覚に自身がないから誰かが賛同してくれるの待ってるんだろ?w
実に女々しいというか悲しい奴だなあんた。
なんで川俣の記事に何かいったらやたら突っかかる奴がでるの?
そりゃ川俣の記事に何かいうやつが阿呆ばかりだからだろう。
そうなの?
getter setter渡すように書き換えるくらいなら変数ひとつ使えばいいのに…
小ネタを大げさに記事にするのって川俣の昔からの芸風ですから。
そういう奴はたまには技術書や教科書以外の本も読んでその偏向した感覚を 矯正した方がいいんじゃないの?w 別にああいう文体って結構ありがちだと思うぞ。 プログラミングとか工学系の本じゃ珍しいのは確かだが。 っていうかプログラミング系の日本人ライターにありがちなヲタ臭い文体の奴よりずっとましだと思うが。 「幸せになれる」だの意味なく文頭に#付けたりだの、ヲタ系のプログラマ以外一般に誰も使わない 表現や言い回しを好む奴ね。
ありがちだけどみんなキモク感じるだけ。 まあ別にそういうもんだと思って読むだけだが。
「幸せになれる」系と比べても、「マシ」だとは思えないけどな。 「人類の発展に貢献する」系に比べたら、マシには見えるけど。
「みんなキモく」って何を根拠に? こういう小ネタ面白いと思うけど。 「幸せになれる」って聞くとなんとなく幸せなんだけどw 人の文体がいちいち気になるものなの? #はメリハリついて分かり易いと思うんだけど。
84 :
68 :2008/07/06(日) 00:24:24
85 :
デフォルトの名無しさん :2008/07/06(日) 20:31:48
C++のDLL(非COM)の関数(WINAPI型)から、 C#のWindowsアプリケーションに C#からみてobject型の配列(2次元)を渡すとき、 何かいい方法はありませんか? 現状は、C++側の関数のout引数に *variant型を設定し、C#側からobject型と してみせて取得しようと思っています。 ・・・他にいい方法があれば教えて下さい。 お願いします。
GCHandleまわせばいいだろ
87 :
デフォルトの名無しさん :2008/07/06(日) 21:23:47
>>90 「幸せになれる」ってたとえば
「hogeをプロパティにしておけば幸せになれるかもしれない」って奴のことか?
むしろ、自分以外に使う人がいたのがびっくりだが、ヲタとか関係ないだろ?(そもそも自分はヲタじゃないしな)
#を付けるのは確かに一部の人間だろうね。
でも#でコメントアウトするスクリプトや設定ファイルは結構多いから、誰にでも通じるとは思うけどね。
統合失調の人? 「自分以外に使う人がいたのがびっくりだが」ってw 「幸せになれる」だの「ごにょごにょする」だの、 ヲタ系プログラマ(ただし本人たちにその自覚は乏しい)しか使わない 独特の言い回しを使う奴っていっぱいいるでしょ。
一時期はやったような気がするけど、最近はみないような気もする > 幸せになれる
端的に気持ち悪いし、PGのマンガ的なステロタイプを作ってるのはこいつらなわけで、 正直消えてなくなてほしいよこういう連中は。
PGって略がなんか気になるんだよな。
川俣とかある種のオタの典型みたいなもんだしな。
特定の職業の連中が変わった言葉遣いをすることなんて世の中いくらでもあるだろ。 土方には土方の方言があるし、医者は医者の言葉を使うだろ。
だいじょうぶその読解力? 特定の職業(プログラマ)の言葉遣いを槍玉に挙げているのではない。 ヲタ系の気色の悪い連中の言葉遣いにケチをつけてるんだよ。
オタPGの言葉遣いが、世間のPG像のステレオタイプになってるってるから迷惑ってのはいいがかりもいいとこだろ。 メジャーなメディアで「幸せになります」とかいってるPGなんて見たことない。
ちゃんと小学校でてるか? どんな読解力だよ。 >端的に気持ち悪いし、PGのマンガ的なステロタイプを作ってるのはこいつらなわけで、 >正直消えてなくなてほしいよこういう連中は どこにも >オタPGの言葉遣いが、世間のPG像のステレオタイプになってるってる などという趣旨のことは書いてない。
じゃあ、あんたが個人的にキモがってるってだけの話か。 どうでもいい話だね。
>>端的に気持ち悪いし、PGのマンガ的なステロタイプを作ってるのはこいつらなわけで、 世間じゃなかったら、だれに、漫画的なイメージを持たれて「消えてほしい」と思うくらい不愉快に思ってるんだろう。
その実装の方が幸せになれる、って頻繁に使わないか?
使わないね
板違い
そっか、俺よく使うわ
すみません、質問です。
Visual C# 2005 Express Edition と Visual C# 2008 Express Edition にはどのような違いがあるのでしょうか。
現在のPCのOSが2000でありまして、VC# 2008をインストールすることができないと言われます。
もし両者にそれほどの差異がないのであれば2005を使おうかと思うわけなんですが。
http://codezine.jp/a/article/aid/2184.aspx?p=1 は目を通してみました。
C#のバージョンが3.0になっているようなんですが、
http://ufcpp.net/study/csharp/ のサイトで見る限り、初心者の私がすぐに不便さを感じるようなものでもない気はしました。
後日PCを新しくしたときにXPにする予定なので、その際にVC# 2008を入れたとしても、特に問題はなさそうでしょうか?
それとも、2008で増えた機能というのは初心者でも必須ないし、あった方がよさそうなものですかね。
割と前に見たのだが、C#で回転するメニューが実装できるコンポーネントみたいなのがあったはずなのだが 名前が思い出せね 誰か教えてくれ
初心者なら2005EEでも使いこなせない程十分な機能があるよ
>>103 WPFやLinqが使いたいなら2008かな?あとラムダ式も使えるようになってる。
(ラムダ式ってのはデリゲートを簡単に書くための構文だな。記述法というだけだから必須ではない)
>>104 コントロールを回転・縮小・拡大したいならWPFで出来るよ。
>>105-106 どもども、ありがとうございます。
PC買い換えまでは2005でやってみます。
>>104 標準ではなくてフリーライブラリだけど、カルーセル?
前にスラッシュドットで取り上げられてた気がする WPFでの実装だったと思うけど
回転するメニューってものの操作性がピンとこないのは 俺の想像力が欠如してるせい? っていうかうっとうしくないのかなそれw
>>112 回転メニューの有用性はスターオーシャンと聖剣伝説で実証済み
テイルズシリーズでも採用されてたっけ?(テイルズはやらないので知らない)
リングコマンドはスケーラビリティや情報量が低いため使える範囲はかなり狭い
>>113 なんか視野狭窄というか、オレサマ=世界のいわゆる「セカイ系」の人?
君が思ってるほどゲームをやる人種ってのは多くないんだよ。
少なくとも俺はゲームなんてまったくやらない。
そんな一方的にそのスターなんたらを知ってる前提の話をされてもね。
無知な上ググる事もできない奴が偉そうに言ったところで
リボンとかドッキングとかってSP1で追加されるんだっけ? いつでるんだっけ?
しらないけど来るならWPFじゃね
>>117 SP1 で追加されるのは MFC 版。
MFC Feature Pack っていうんだけど、英語版はすでに正式版が出てる。
日本語は VS 2008 SP1 に同梱。
WPF のリボンは年末くらいを目標に作ってるらしい。
ドッキングは不明。
>>115 ググれば直ぐ見つかるような有名なゲームだし、最悪分かる人に分かれば良い内容です。
(さすがにSO2とか略したら二酸化硫黄と区別つかないけどなw)
そもそも、「俺の分かる話しかするな」って言われたら…
本「期待値とは物理で言うところの重心です。(期待値も重心も相加平均です)」
A「ああ、なるほど。」
B「物理なんて知るか。この本、腐ってやがる。出版社に文句言おう!」
…なんて事になるからそんな事言う人はいないよね?
馬鹿はしょうがないな。 その物理学(学問の最高峰)とゲーム(たかだか「お前」が知ってるだけ)を 並列することになんの疑問も抱かないようなメンタルを「セカイ系」と呼ぶんだよ。
↑マジ脳みそ腐ってんじゃね?
そんなだからセカイ系とか言われるんだよ
124 :
デフォルトの名無しさん :2008/07/08(火) 00:56:58
>>121 ( ゚д゚ ) セカイ系 の検索結果 約 456,000 件中 1 - 10 件目 (0.24 秒)
StarOcean の検索結果 約 3,360,000 件中 1 - 10 件目 (0.28 秒) ( ゚д゚ )
( ゚ д ゚ )
さすがに物理で検索したら136,000,000越えるけど、君の言うセカイ系って何?スイーツ(笑)みたいなやつ?
糞スレ
釣りだろ じゃなかったら馬鹿過ぎる
sage忘れスマソ で結局、RingMenuって便利なの? RingMenuForOSは起動しないし、SDKは相変わらず登録が必要だし…だれか感想求む
家庭用ゲーム機のような入力装置に制限のある場合は有効だろうけど、 PCではどうだか。
というよりマウスではどうだかだけど、キーボードからなら割合ありな 気がする。使ってないけど聖剣あたりの記憶をたどってみると。 Alt(Win) + Tab みたいなかんじでくるくるみたいな。
リングメニューは一番裏まで回すのが面倒くさすぎ。 ポインティングデバイスもアルファベットの刻印されたキーもない環境専用だろ。
アイコンの方がダイヤルみたいに回るだけ? 例えば12時にカーソルがあって6時を選択したい時は左右キーでアイコンを回すって感じ? カーソルの方が動くんだったら下キーで一発だけど。
Compact frameworkで.net Remotingが使えないのですが、RPCをやる方法って他にないですかね? とりあえず、XML-RPC.netが使えそうなんですが、他に何かいい案は、ないでしょうか。
134 :
デフォルトの名無しさん :2008/07/08(火) 23:25:43
圧縮しなくてもいいので、ファイルをひとつにまとめたい時ってどうすればいいんでしょうか。 Jpegファイルを集めて、先頭に取り出すための情報を詰めて、後でまた戻すといったやり方がしたいんです。
そもそも書庫ファイルというのはだな、
>>134 それをC#で書きたいのか?、ツール使いたいのかハッキリしろ。
もしツールなら、スレチだボケ!
C#2008 Express WPFアプリケーション UserControlから派生した独自コントロールを作ってます。 Disposeが必要なリソースを扱ってるため、Unloadedイベントで後始末を行ってるのですが 明示的に親要素から削除すれば呼ばれるのですが、ウィンドウを閉じた場合には呼ばれませんでした。 ウィンドウを閉じた時にコントロールに通知されるイベントはありませんか?
VC#2005Expressを使って下記プログラムを作成しています。 ・IMEに文字情報を与えて変換候補の一覧を取得 Imm32.dllをインポートする部分はわかったのですが ImmGetCandidateList関数に渡す変換候補一覧を格納するバッファの構造体 の定義の仕方などがよくわかりません。 またImmGetCandidateList関数はいきなり使って大丈夫なのでしょうか? ハンドルとかいろいろ渡すようなのですが・・・
140 :
139 :2008/07/10(木) 13:11:45
宿題のほうへいきます。 こちらは無しでお願いします。
昔ターミナル作った時にやったな
142 :
139 :2008/07/10(木) 13:23:12
C#以前のサンプルは見かけるんですが、C#にどのようにもってくればいいのかわからずorz
143 :
デフォルトの名無しさん :2008/07/10(木) 14:55:21
public class Hhoge<A,B> where A:new(){} は当然いけるのだけど public class Hhoge<A,B> where A:new(B){} ができない(Aの型を、Bが引き数のコンストラクタを持つクラスだけにしたい) こういう制限ってかけることできないのかな
できない
145 :
143 :2008/07/10(木) 15:06:43
>>144 ありがとうございます
できない理由とか解説してるページって知りませんか?
>>145 理由も何もコンストラクタ制約はnew()以外にないから
URLに全角文字を指定する際によく使われる%xx%xx%xxといった形式に 変換する関数とかありますでしょうか?
149 :
147 :2008/07/10(木) 23:00:21
label1.Textからlabel2と代入していく場合、 forループ内ではどうやって記述したらいいのでしょうか? やっぱり事前に配列を作る等の下準備が無いと駄目ですか?
あなたの望む仕様がわかりませんがエスパーで答えてみます。 何度も呼ぶ場合は配列を作った方がいいと思います。 foreach (Control c in this.Controls) { Label l = c as Label; if (c == null) continue; if (l.Name.StartsWith("label") & int.Parse(l.Name.Substring(5)) > 1) l.Text = Label1.Text; }
上のはcのnullチェックしてもしょうがないな。 てかfor文で書くのか。 for (int i=2; i<=5; i++) { Label l = this.Controls.Find("label" + i.ToString(), false)[0] as Label; l.Text = Label1.Text; }
>>143 コンストラクタでAを作るためのデリゲート(Func<B, A>とか)を受けたらいいんじゃね
154 :
デフォルトの名無しさん :2008/07/11(金) 09:51:10
ASP.NET(C#) でWEBカスタムコントロールを作ろうとしています。 Tableクラスを継承して機能を上乗せして作ろうとしているのですが カスタムコントロールタグの中にTableRowを入れその中にTableCellをタグで指定することができません。 なんとなくParsistsChild 辺りなのかなと思うのですがいかんせんMSDNの記述が読み取りにくくて・・・・ 実現したいのは以下のような記述をデザイン時にタグで入力して 実行時にテーブルとして吐き出す事です。 <CustomTable id="hoge" runat="server"> <TableRow> <TableCell> 1行1列 </TableCell> </TableRow> < /CustomTable> なにかサンプルとかサイトでも構いませんので情報いただけませんか? よろしくお願いいたします。
あぁぁーハングアップするぅーー マルチスレッドうまく出来ないーヽ(`Д´)ノウワァァン
156 :
デフォルトの名無しさん :2008/07/11(金) 11:12:21
BackGroundWorker?
BackGroundWorker!
BackgroundWorker!
BackgroundFucker!
BlackGroundWorker!
背景労働者(T_T)
最初にButtonClickイベントでRunWorkerAsync()をする。 次にDoWorkで通信待ちをしていて、通信を受け取ったらそのイベントでFormのプロパティ書換えを連続でしたいんだ。 それで、そこからButtonClickイベントでRunWorkerCompletedに移動したいんだ。 それでもって同じButtonClickイベント内でRunWorkerAsync()をしたいんだけど、どうしたらいいのかわからない・・・ buttonClick(){ RunWorkerAsync(); } DoWork(){ 通信メソッド(); } ChangeValue(){//通信メソッドの受け取ったよevent } RunWorkerCompleted(){ }
全体に何を言いたいのか何が分からないのか良く分からん 連続でってどういう連続? 移動って何? RunWorkeAsyncが二回出てきてるの?
167 :
デフォルトの名無しさん :2008/07/11(金) 15:35:46
なんだ? ・ボタン押す ・通信データを受け取ることができたら非同期通信完了 ・別のボタンで通信完了後の処理を行う こういうことなんか・・・・?
168 :
デフォルトの名無しさん :2008/07/11(金) 15:48:13
ProcessStartInfoでコンソールがチラッと開くんですが、 これは開いたままにできないんでしょうか。
実行するプロセスはcmd.exeにして/kつきで実行すれば?
170 :
デフォルトの名無しさん :2008/07/11(金) 16:11:15
VS2005で任意の型(ただしdoubleに変換可能、実際の想定はfloatとdouble)の配列における最大値を求めたくて こんな関数を作りました。 public double Max<T>(T[] src, int offset, int length) { double ret = double.MinValue; int end = offset + length; for(int i = offset ; i < end; i++) { double val = System.Convert.ToDouble(src[i]); if(val > ret) ret = val; } return ret; } で、かなり大きなfloat配列(要素数10万オーダー)をこの関数にかけたら、 この関数が実行される前後でこの関数を動かしているプロセスのLOHが数十MB単位で増殖してしまいます。(perfmonで確認) forループが怪しそうなんですが、どこでLOHをつかまれるのか見当がつきません。 調べ方が甘いのかもしれませんが、お分かりの方いらっしゃいますか?
171 :
デフォルトの名無しさん :2008/07/11(金) 16:11:44
ありがとうございます。 コンソールはでてるんですが、Argumentsが渡らないんですが、これはどうしたらいいんでしょう。
172 :
デフォルトの名無しさん :2008/07/11(金) 16:16:03
>>170 何で必ずDoubleに変換を・・・・・
>>172 関数を使う側でそういう要求があるということで…。
>>166-167 ごめんね、よくわからんアマチュアでごめんね
1.ボタン押す
2.任意で終了させるまで同期通信でデータを受け取る
3.最初のボタンで通信完了の処理をして、新しい同期通信を始める
同期通信がいつ終わるかわからんので、
RunWorkerCompleted()を開始できないのです。
>>165 別のスレッドでフォームを書き換えるの?それは無理
[STAThread] <-
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
>>170 LOHに何があるか、専用のデバッガやプロファイラで調べられなかったっけ?
CLRProfilerやsos.dllを使えばできそうな気がするよ。
177 :
143 :2008/07/11(金) 16:24:22
>>176 ちょっとそのあたりのツールを調べてみます。ありがとうございました。
179 :
デフォルトの名無しさん :2008/07/11(金) 16:28:15
>>174 それって最初のボタンのクリックイベントの最初に
非同期通信中だったら非同期通信キャンセルなり終了させるような処理書けばいいのでは?
その完了を待って再度非同期通信を開始すればよいのでは
>>175 >別のスレッドでフォームを書き換える
スレッドからフォームのプロパティを書き換えるのではなく、
同期通信のメソッドが通信を受けた時のイベントがあるんです。
そのイベントの中でフォームを弄るので、簡単に言えば、
ButtonClickイベントが起きたら通信メソッドをDispose()出来れば良いんです。
ですが、DoWork()内にButtonClickをどう通知したら良いのかわかりません。
181 :
デフォルトの名無しさん :2008/07/11(金) 16:33:08
>>180 IsBusy
CancelAsync
こんな感じのメソッドとプロパティなかったか?wwww
182 :
168 :2008/07/11(金) 16:34:11
FileNameに"/c"パラメータとかつける方法ありませんか。
>>179 >>181 ButtonClickイベントの中で
BackgroundWorker.IsBusyでスレッドの使用を確認して、
動いていたらCancelAsyncを呼び出せばRunWorkerCompletedイベントが発生する訳ですね。
よくわかりました、ありがとうございます
一応いっとくけどCancelAsync呼んだだけじゃRunWorkerCompletedは発生しないぞ CancelAsyncの解説読めば分かることだけど
object result = type.InvokeMember("test", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new string[1] { "sample" }); ってDLLを動的に呼び出して MyClass1 ってのを返すんだけど object型のresultをMyClass1にキャストする方法がわからないのだが誰かヒントでも良いから助けて
186 :
デフォルトの名無しさん :2008/07/11(金) 17:17:16
>>185 動的にDLL呼び出しができてキャストできないとか・・・・・
(T)
きっと「動的にキャスト」みたいなこと考えてるんだろう
MyClass1返すならなんで動的に呼ぶ必要があるんだよ まあこれはMyClass1が対象のアセンブリに含まれてると仮定した場合だが MyClass1を静的に参照してるんじゃなきゃキャストなんてできるわけがないぞ
解決しました 第三のDLLかましてあげればよかったんですね
>>170 >任意の型(ただしdoubleに変換可能、実際の想定はfloatとdouble)
ならdouble決め打ちでいいんじゃね?
って思うんだが駄目ですか
double[]引数にはfloat[]を与えられない
192 :
デフォルトの名無しさん :2008/07/11(金) 18:25:51
つうかキャスト動作が食ってるとかありえないのかな? 何万も回せばコストはでかいと思うんだが 外からは意識しないように内部で分岐させて処理してみればよくねぇか? この分だとキャストは一回だけで終わりそうな感じがするんだが・・・
>>189 第3のDLLのはインターフェイスにしておくと融通が利く。
>>170 <T>[]で受けると型が特定されなくてそのままSystem.Convert.ToDoubleが呼ばれる
結果的にもう1つ<T>[]を作っている感じな予感。
float[],double[]で受けると最適化されてSystem.Convert.ToDoubleは呼ばれない。
IConvertibleで制約してhoge[i].ToDouble(null)とか
>>173 return直前にdoubleにすればいいだろ。
Tのままじゃ比較できないじゃん
比較はCompareToかな。それよりT.MinValueって使えるのかな
lengthがゼロならMinValueを返すのが仕様なら仕方ないが 普通初期値は配列の最初の要素だろ。 T ret = src[offset];
総称型の場合Convert.ToDouble(Object)でボクシングが 大量発生してヒープを使いすぎるのはわかるがLOHが使われるのは解せんね。
>>170 じつはToArrayでラージオブジェクトヒープを使っているとか言うオチだったり
List<int> arr = ..
double ans = Max(arr.ToArray(), 0, ar.Count);
>>199 そうなんだけどT.MinValueが使えるのかが気になった。
Length==0なら例外投げるのが妥当だよね。
203 :
デフォルトの名無しさん :2008/07/11(金) 21:42:05
相談です。 C#3.0(2.0でも可)にて PDFからオブジェクトの取得をしたいと思っています。 PDFはベクトルデータであることが前提で、ラスタデータは考慮しません。 ●抽出 テキストデータは テキスト、フォント、サイズ、座標を取得 画像データは 画像、座標を取得 各データにジャンルを割り当てDBに保存 ●復元 テキスト、フォント、サイズ、座標からPDFに復元する。 その座標に画像も存在していれば画像も復元する。 何か良い方法はご存知でしょうか?
>>203 本屋でPDFの仕様書を見たことがあるから、amazonで探せばあるんじゃね?
英語なら買うまでもなく、ネットでもありそうだけど。
205 :
203 :2008/07/11(金) 23:43:25
>>204 PDF仕様書の英語版はWebで公開されてます。
日本語版の仕様書は本で出てます。
PDFの使用がわかってもC#でPDFを扱う術(COMやSDKなど)がわからないのです。
iText,PDF4NET, PDFLib など様々なものを試していますが、これというものがありません。
画像抽出に関しても、抽出するだけならできるが、座標の取得などは不明だったりします。
つかライブラリ使うつもりなら、仕様書まで読む必要ないよ。
>>205 そこに挙げてる既存のライブラリで満足できないなら、新しいのを書くしかないだろ。
208 :
170 :2008/07/13(日) 08:05:41
170ですが、遅くなって申し訳ありません。まだ解決したとはいえないのですが、
>>194 っぽい気がしています。
なお、最初に書いた文章が改行大杉と言われたので改行減らしています。読みにくいかもしれません。すみません。
とりあえず
public double Max<T>(T[] src, int offset, int length)
{
double ret;
if(src is float[])
{
float[] srcFloat = src as float[];
int end = offset + length;
for(int i = offset ; i < end; i++)
{
double val = (double)srcFloat[i]
if(val > ret)
ret = val;
}
}
else if(src is double[])
{
(略。明示的キャストをしないこと以外はfloatと同じ)
}
return ret;
}
というようにfloat[]、double[]の型に変換してからキャストするようにするとLOHを食う現象は見られなくなりました。
ただ、今でもキツネにつままれたような気分は抜けないので、もう少し元のコードだと何をやっているか調べてみようと思っています。
>>200 で指摘があるように、キャストでヒープを消費するのはわかるんですが、Gen0やGen1ならともかくLOHを食うのは相変わらず解せないので…。
また何かわかったら報告します。ありがとうございました。
209 :
170 :2008/07/13(日) 08:07:17
あと、
>>208 のコードでは対応していませんが、
・キャストは最後に1回やればいい(float、doubleに決め打ちできれば可能)
・Tで受けずに最初からfloat[]、double[]で受けるほうがいい
というのも納得しています。追って対応しようと思います。
ありがとうございました。
そうまで限定するならoverloadしたほうが早いような。
211 :
170 :2008/07/13(日) 09:29:10
>>210 「Tで受けずに最初からfloat[]、double[]で受けるほうがいい」
はoverloadにすることを考えて書いてました。
212 :
170 :2008/07/13(日) 09:31:16
細切れですみません。いずれにしても
>>170 のコードだとなぜLOHを侵食する?
という大本の疑問はまだ謎のままなので、
追い追いプロファイラとかで調べてみようと思っています。
コピペ君って馬鹿だな、まで読んだ。
コピペ君って馬鹿だな、まで読んだ。
こっちにまではってやがるw
ここまでコピペ
何度かここで質問しようとした事があるんだけど、なんでだろう。 書き込みボタン押す直前に閃いて解決してしまう。
日記はチラシの裏に
やだね
じゃあチラシの表でいいや
やだね
今作ってるプログラムが500行超えた こんなに長いコード書くの初めて・・・ フォームアプリケーションってめんどいね
むしろそんなに大きくないファイルがたくさんできないか? と思ったら500行か、、、、そりゃテストコード書くんでもなけりゃ あっというまだべ。
データバインドとか使わずに愚直コピーしてるとか? それでも500ぐらいあっと言う間だろうけど
UI絡みは長くなるの仕方なかろう
チラシって普通両面に印刷されてるよね。 そういえば昔は片面印刷だったっけ。
どことまちがえてるんですか?w
230 :
デフォルトの名無しさん :2008/07/16(水) 22:07:19
マーシャリングについて教えてくれ。 C#からCで書いたDLLのGetImageを呼び、ImageProcデリゲートで画像のデータを受け取りたいんだが、 ImageProcデリゲートの第一引数を何と書いていいか分からない… 【C側】 typedef void (*ImageProc)(unsigned char* pImageBuffer, unsigned int imageSize); __declspec(dllexport) void GetImage(char* pFileName, ImageProc pImageProc) { unsigned char* pImageBuffer = 0; //画像バッファ unsigned int imageSize = 0; //画像サイズ //中略:pFileNameの画像を開き、pImageBufferを動的確保し、 //pImageBufferに画像のデータを、imageBufferSizeに画像のサイズを入れる。 pImageProc(pImageBuffer, imageSize); } 【C#側】 ↓???を何と書いていいか分からない… public delegate void ImageProc(???, UInt32 imageSize);
IntPtr
string
byte[]でいいんじゃね? 推奨できないけどどうしてもというならunsafeつけてbyte*とか
正直受け側の実装次第
脱線するけどBitmap.LockBitsじゃダメなのか
236 :
230 :2008/07/18(金) 11:15:25
>>231 で行けました。THX!
【c】
#include <windows.h>
typedef void (CALLBACK* ImageCallBack)(VOID* pImageBuffer, UINT32 imageSize);
【c#】
public delegate void ImageCallBack(IntPtr pImageBuffer, UInt32 imageSize);
public static void ImageCallBackHandler(IntPtr pImageBuffer, UInt32 imageSize)
{
byte[] imageData = new byte[imageSize];
imageData.Initialize();
Marshal.Copy(pImageBuffer, imageData, 0, imageData.Length);
}
237 :
デフォルトの名無しさん :2008/07/18(金) 22:27:57
VisualStdio2005なんですが、使用する.netFrameworkを1.1にして開発に使用する事って可能ですか?
いいえ
実はできなくもなかったりするんだが、いろいろと面倒なんでお勧めしない。
ListViewの詳細表示モードで、ダウンロードの進歩状況を表示するような・・・ 例えば、WinnyなどのP2Pソフトによくある横棒グラフに % 表示があるような ものを表示したいんですが、どのように実装したらいいでしょうか? とりあえずオーナードローでサブ項目にRectangleで描画したりしてみましたが あまりにも遅くて実用的ではありません。 もっと効率的な方法があるのでしょうか?
それはおそらく実装の方法に問題がある。 そんなに遅くなるはずがない。
>>241 いや、それが試しにRectangleの描画処理だけを入れただけのものなんで
ほとんどこれが最少の処理なんですよ
確か、Winnyを作っていた47氏も描画の遅さに悩んでいた記憶があるので
もともとどうやってもある程度の遅さはしょうがないのかもしれませんが
オーナードロー以外にもっと上手い方法があれば教えて頂きたいのですが
その部分のコード晒せば今日暇だから改良してみようか 晒せないならしょうがないけど
ListViewのDetailモードはバギーだからさもありなん、という気もする。
>>243 上記した通り、四角の描画しかしていないんですが
具体的に書きますと
if (e.ColumnIndex == 3) {
e.Graphics.FillRectangle(Brushes.Red, e.Bounds.Left, e.Bounds.Top, percent, e.Bounds.Height);
}
の処理を入れてあるだけの、最小限の物です。
他の余計な処理は一切していません。
描画処理が何回呼ばれてるかとか描画に何ms掛かってるかとか調べてみたら
>>245 そんなんじゃわからん
普通に軽いのができてしまったぞ
ほかの部分が重いんじゃないか? 追加部分をコメントアウトして確認
俺のもめちゃ軽い。ちらつきはDoubleBufferedで抑えてみた。
追加するときに重いとかいうオチだったり?
どうせListViewだし、
0u2007 FIGURE SPACE
0u2588 FULL BLOCK
0u258C LEFT HALF BLOCK
0u2590 RIGHT HALF BLOCK
の手抜きでいいじゃんとか思ってしまう
虫食いなしなら、1/8のまで使えるし
一応こんな感じに
ttp://www.imgup.org/iup649405.png
実は実行環境が驚くほどプア
>>244 ListViewといえばDetailなのにバグ多いよね。
そして改善されない。
うわ、疲れて寝てしまった。
>>247 でも、これしか書いてないから他の部分無いんですよ、全く。
>>248 上にも散々書きましたが、他の処理は無いのです。
ListView検証の為にTestListViewというプロジェクトを作って
フォームにListViewを貼り付けただけのプロジェクトなので
描画処理部分以外も、余計な処理が全く無いんですよ。
>>249 やっぱり軽いですか。何で重くなってしまうのか・・・
>>250 動的にデータを追加することは無いです。
>>251 うわ、昔を思い出す処理ですね(w
MSX の SCREEN 1/2 でやっていた時に
そんな感じでゲームのパラメータそんな感じでやってたなぁ
>>252 Pentium-M 1.6GHz なので、それほどプアでも無いと思うのですが。
Debugつうオチではない?
そんだけのプログラムならうpすればいいのに
サブ項目は、一つ一つがリソースを消費するから 数によってはかなり重くなってメモリを消費すると思うが それとは違う?
自分のは10万個とか追加したらスクロールバーでのスクロールははっきり重くなった マウスホイールでのスクトールは軽いままだけど
259 :
デフォルトの名無しさん :2008/07/19(土) 23:22:24
配列かリストのスライスとかないんでしょうか。
自分で作ってください…
ちゅうかまず描画の頻度がどの程度なのよ
そりゃWM_PAINTとんでくる度だろ
オーナードローって言ってるのにねぇ
>>254 プロジェクド丸ごとうpしろよ
原因見つけてやるから
馬鹿はレスしなくて良いと思うんだ
じゃあお前レスすんな
オーナニードローのパフォーマンスが悪いのは仕様だと思う。
俺もやってみたが軽かった どんな糞コード書けば重くなるんだ?
バーの長さをe.SubItem.Textでパーミル指定とかしてみたけど、 10万個の項目でもスムーズに動く。スクロールも無問題 因みに、環境はPemM 1.7GHz/mem 1GB
そういえば、カスペが入ったPCでデバッグビルドを動かした時に、 異様に遅くなったことがあったな。 コンボボックスを開くのに数秒かかったり。 VSを信頼するアプリに設定してプロセス動作の監視対象から外したら 普通に動くようになった。
こんな親切なレスの流れはひさしぶり
火スペって何? まさか名取裕子とか出てくるドラマ枠のことじゃないだろうし
ググれば一発で出てくるのに しかも、一番上に
質問者の反応が悪いな 諦めたんかね
カスペ、監視からjustの扱ってるアンチウィルスソフトだとわかると思うんだがなぁ。 これくらいは許されてもいいような省略系じゃないのか?
よくない
はじめて聞いた 俺は気付いたけど
すまん。セキュリティ板なんかではよく見かける略称だったもんで。
C++のboostみたいなC#の定番ライブラリってないですかね
標準で機能かなりそろってるからなぁ。 patterns & practices とか EntLib とか、MS が提供してる標準外コードも多いし。
entlibなんかきらいだ
最近C#に乗り換えたんだが 初心者はSDKから入ったほうがいいよな?
日本語でおk
>>283 初心者はIDEから入るべき
自分でことを難しくすることはない
VC# Express Edition 1択。
ム自体初心者なら SDK というかそのレベルのことからはじめるのは ありだと思うが C# の言語的な思想ってのは IDE が存在する世界だ から IDE で触れないとなんつーか色々わかりゃしない。結果遠回り
別にそんなこと無い
別にそんなこと無い インテリセンスとGUI作成以外は、 SDKから構築した自作コンパイル環境の方が早かったりする でも初心者はVC#EE使うべきだよ 楽だもん
初心者はCASLからだろJK
>>289 コーディングの速さなんか問題にしていないしそれぐらい慣れたら
できる人間(他から移行中とか)で C# 初心者の場合に言ってる
IDE からみないと C#(.NET) 的なコンポーネントとかメタデータやらで
宣言的にとかそういう発想が分かりにくいよという話
> IDE からみないと C#(.NET) 的なコンポーネントとかメタデータやらで > 宣言的にとかそういう発想が分かりにくいよという話 もっと具体的に言ってくれないとわかんない
IntelliSense は楽をさせてくれると同時に、 初心者にとっては学習ツールでもあると思う。
通ぶってるのか何か知らないけど、今時SDKだの素のエディタ使うだのって そういう背伸びは中学生までにしとけって言いたくなるよな。 傍から見てても恥ずかしくなるよ。
SDK→IDE ・・・ 時代に取り残されたおっさんの発想
C#でIDE使わないならJAVAでいいじゃん
俺はVSのエディタとVIMを併用してるが、 2003→2008にしたら比重が1:9→8:2くらいになったな LINQ、ラムダ式、拡張メソッドを使うときとか、 コンパイラ並みの構文解析してくれないエディタだと面倒くさい
>>294 ム板だし、人に強要しなきゃいいんじゃね?
マなら仕事できない奴確定だがな
VC#使うのは当然としてもコンソールアプリから始めてみるのはいいんじゃないの 基本的なところの勉強で小さいコード動かすために わざわざVBみたいにボタン一つだけ載せたフォーム作るのは格好悪すぎ
誰もコンソールアプリから始める事には反対してないような…
俺も反対してないけど始めるのはGUIからでもCUIからでもいいと思うよ
夏か!
どうでもいいけど、cscやmsbuildは.NET Frameworkに付属しててSDKなしでも たいていのコンパイルはできる。
DLLからクラスやメソッドを詳細検索してくれるようなツールない? protected で A から始まるメソッドをクラス 'Tool' から全部表示する みたいな
Reflectorでも使うか、リフレクション使って自作したら?
Assembly.LoadFrom("Hoge.dll").GetType("Hoge.Tool").GetMethods() .Where(m => (!m.IsPublic && !m.IsPrivate && m.Name[0] == 'A')) .ToList().ForEach(Console.WriteLine); とか
'A')) やっぱり顔文字に見えるな
>>306 Reflectorは修飾子まで考慮してくれないんだよなぁ
自作してみるわ
>>307 3.5ってそんなキモイことできるんかwwすげーなwSTLみたいだw
繋げて書けるのはいいけどぬるぽが怖い
ブレークポイント置いてデバッグする時は複数行に分けるよね
ToList().ForEach()はムダだろ IEnumerableに対するForEach拡張メソッドを自分で書くか素直にforeach使うべき
314 :
デフォルトの名無しさん :2008/07/23(水) 18:58:33
米国時間22日、マイクロソフトは「Xbox LIVE Community Games」を北米で今年後半から
開始すると発表した。その他の地域については2009年から逐次開始する予定。
Xbox LIVE Community Gamesは、XNA Game Studioで開発されたXbox360用ソフトを
Xbox Liveを通じ一般利用者へ販売することを可能とするサービス。
Xbox LIVE Community Gamesでの販売は、XNA開発者コミュニティ「XNA Creators Club」の
有料会員(年額9,800円)であれば誰でも行うことが可能となる。
販売価格については200〜800マイクロソフトポイントの間で自由に設定することができ、
手数料として売上の30%が引かれることとなる。
XNA Game Studioは、マイクロソフトが無償で公開しているVisual Studioをベースとした
ゲーム特化型の統合開発環境。.NET Framework及びDirectXをベースとしたライブラリ
「XNA Framework」を使用し、基本的には設定ひとつでXbox360及びWindowsへの両対応が
可能となる。
XNAについては、RPGツクールが次期バージョンでの対応を表明しており、日本での
普及にも期待がかかる。また、教育機関による学習教材としての採用も増加しており、
月刊ベーシックマガジンの休刊以降問題視されていた日本人ゲーム開発者の急激な
減少に歯止めをかける期待も持たれている。
http://news4xbox.blogspot.com/2008/07/xbox360.html
XNAとC#関連のスレみてると何回もこれ読まされるんだが
そういう気分の時は「コピペ君て馬鹿だな、まで読んだ」と書くんだ
「コピペ君て馬鹿だな、まで読んだ」 ってことはさ、そのコピペの中に「コピペ君て馬鹿だな」って文言が含まれているって事だよね? だとしたらそこそこまともな事言ってるって事になっちゃうよ。
>>315 巡回してるとこ見てきたら、6箇所で貼ってあった・・
コピペ君て馬鹿だな
319 :
デフォルトの名無しさん :2008/07/23(水) 21:38:55
どうせ数独とかマインスイーパーみたいなのが氾濫して おわるんじゃねーの
ボンバーマンの超ぱちもんなら既にある
文章の最後に「コピペ君て馬鹿だな」って書いておくと、 「コピペ君て馬鹿だな、まで読んだ」ってレスされても 即座に「最後まで読んだんかい!!」ってレスできる。 これ豆知識な。 コピペ君て馬鹿だな
僕は馬鹿なコピペ君です、まで読んだ。
swichとforとifの組み合わせって速度にどれくらい差があるんでしょうか?
調べてみたら?
switch と if に for が絡むのがわからん
複数のコンポーネントがある時に、 label[i]みたいにインデクサを使いたいんですが、 コンパイラにlabelなんてねーよバーヤヽ(`Д´)ノ って言われてしまいます。 やっぱり一行づつ書いていくしかないのですか?
もうちょっと具体例を
>>329-330 しょうがないからLabel配列型の変数にいれてやりました。
コンパイラが面倒みてくれたらいいのに・・・
そんなキモいことされてたまるか
どう考えてもコンパイラじゃなくて、せいぜいライブラリのありがた迷惑だろ。
334 :
デフォルトの名無しさん :2008/07/24(木) 17:27:25
MenuItems.Addでメニュー項目を追加するときにイベントハンドラを指定しますが、 項目の数だけメソッドを用意するのが個人的に好きじゃありません。 各項目に共通のイベントハンドラを指定し、 その中でどの項目が選択されたのかを確認したいのですが、 このようなことは可能でしょうか。
sender
public void menuItem_Click(object sender, EventArgs e) { if (object.ReferenceEquals(sender, menuItem1)) { ... } else if (object.ReferenceEquals(sender, menuItem2)) { ... } }
337 :
デフォルトの名無しさん :2008/07/24(木) 17:50:18
Tag使えよ
うむ
340 :
デフォルトの名無しさん :2008/07/25(金) 01:38:05
プログラミングの初心者で恐縮ですが、質問です。 オセロゲームを練習として作ってみたいと考えています。 そこで、Panelを継承したクラスを作ってOseroPanelという名前にしました。 このOseroPanelを this.Controls.Add(p); とフォームに貼り付けました。 次にパネル側の描画処理を書きました。 一つはOnPaintをオーバーライドして描画しました。 protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.DrawLine(new Pen(Color.Red), 10, 100, 200, 100); } こちらはうまく動いています。
341 :
デフォルトの名無しさん :2008/07/25(金) 01:39:03
もう一つはイベントを使ってみたのですが、問題が発生しました。 VSを使って、イベントを自動作成し、 private void InitializeComponent() { this.SuspendLayout(); // // OseroPanel // this.Paint += new System.Windows.Forms.PaintEventHandler(this.OseroPanel_Paint); this.ResumeLayout(false); } private void OseroPanel_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine(new Pen(Color.Blue), 100, 10, 100, 200); } というコードを書きました。 どうやら OseroPanel_Paint()メソッドが呼ばれていないようです。 原因がわかる人がいましたら教えてもらえるとありがたいです。
this.Paint += new System.Windows.Forms.PaintEventHandler(this.OseroPanel_Paint); ↓ this.OseroPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.OseroPanel_Paint);
343 :
デフォルトの名無しさん :2008/07/25(金) 09:40:22
>>342 OseroPanelクラスのなかでやっているので
thisはOseroPanelを指しています。
×Osero ○Othello
取りあえずその記述だけでは原因不明なので まずデバッガでInitializeComponent通ってるかどうかから確認
オセロは(TM)だから注意ね
TMならセーフじゃん
暑さでボケてたw (R) だよ
349 :
デフォルトの名無しさん :2008/07/25(金) 15:43:20
>>345 orz
まさにそれでした。
InitializeComponent()の呼び出しは自分で書かないといけないんですね。
Oseroクラスのコンストラクタに書いてみたところ、
すべてうまくいきました。
どうもありでしたm(_ _)m
フォームアプリのForm1とかのように使い捨てのクラスはともかく、
継承クラスではイベントハンドラではなくOn〜メソッドのオーバーライドが推奨のはず
探したけどソースが見つからんorz
>>346-348 オセロ(玩具)とソフトウェアじゃあ区分が違うんじゃないか?
>>350 たしかにOnPaintをオーバーライドした方が、
コードがすっきりしますね。
353 :
デフォルトの名無しさん :2008/07/25(金) 18:42:36
一様乱数を生成する関数のソースについて質問があります。y=1/sqrt(2)*exp(-1/2*x*x)の計算で In function `GaussRandom':: undefined reference to 'sqrt’と In function `GaussRandom': : undefined reference to `exp' というエラーがでて実行できません。もちろん<math.h>は定義しました。 レポート課題なのでマジで困ってます。是非教えてください。ソースを下に載せておきます。 ちなみにxが一様乱数で、yが正規乱数です。 double GaussRandom() { double x; double y; x=UniformRandom(); y=1/sqrt(2)*exp(-1/2*x*x); return y; } double UniformRandom() { double x; int r=1; r=1229*r+351750; x=r/1664501; return x; }
>>353 >In function `GaussRandom':: undefined reference to 'sqrt’と In function `GaussRandom':
>: undefined reference to `exp'
翻訳するとだな
「型または名前空間名 'sqrt' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
型または名前空間名 'exp' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」
だな。何に翻訳したかは秘密だ。
さらに言うとusing System.Math;が足りないなw
356 :
デフォルトの名無しさん :2008/07/25(金) 18:59:27
ReflectorでSystem.Randomクラスのコードをパクる奴とかいそうだな
359 :
デフォルトの名無しさん :2008/07/25(金) 19:23:59
>>355 ありがとうございます。
>>357 期限が迫ってたので色んな場所で聞こうと思っただけです。気を悪くしてすいません。
ほんとにKYですね^^ 死んでください
気を悪くしてすいませんだと? 気を悪くしたのはこっちだ!クソが!
期限が迫ってたので色んな場所で聞こうと思っただけです
こういうゴミに教えてあげるような偽善者も死ねよ
自己中乙
レポートの最後に「参考:2ch プログラム板」って書いておけよ
>>361 気を悪くさせての間違いです^^
>>365 課題落とされるかもしれないので書けません 教えてくれた人ありがとうございました^^
今プログラミングスレがいっぱい上がってるがどゆこと?
しまった板違いwwwAA板じゃねえwwwww
>>369 斬新な板違いだなおい
しかもよりによってスレタイに[プログラム板]って付いてるこのスレで
なんでこんな荒れてんの?
荒れてないよ
突然すみません。 C/C++のように構造体配列の定数データを持ちたいんですが、 C#ではどうすればよいのでしょう?
無理
static readonlyな配列で良いんじゃね
static readonly な ReadOnlyCollection<T>
GDI+でICONへは変換不可ですか?
>>377 可能
Dim bmp As New Bitmap("hoge.bmp")
Dim ico As Icon = Icon.FromHandle(Bitmap.GetHicon())
Dim fs As New FileStream("hoge.ico", FileMode.Create)
ico.save(fs)
fs.Close()
ico.Dispose()
bmp.Dispose()
ども、やってみます!
ただし制限きついけどなー
>>378 意味不明な質問には「日本語で書け」と叱責してやるのが本人のためだと思うけど。
ああちゃんと嫌味の意味でVBで答えてるわけかw
>>381 そういうことwww
お前は、エスパーかw
Using使えよって思った。
キモすぎ
>>381 意味不明な質問には「日本語でおk」だろ?
意味不明な質問にわざわざ絡む奴ってなんなの? いじめられっこ?
>>381 二行目で気づいたならその時点で書き直せよ気持ち悪い
389 :
デフォルトの名無しさん :2008/07/27(日) 15:52:58
GraphicsクラスのDrawImageメソッドで 画像の表示位置や高さ幅は通常intで指定すると思います。 ところが、実はfloatで指定する方法も用意されています。 public void DrawImage( Image image, float x, float y, float width, float height ) floatで指定すると何かよいことがあるのでしょうか? 基本的には四捨五入でintに繰り上げていると思うのですが、 そのような理解で正しいでしょうか?
Graphicsの描画単位はPixelだけじゃないぜ?
DirectXで使うためでしょ
ピクセル単位が整数だとしても 縮小拡大の原点が0,0で固定されないで 指定点から始まると困ることが多数あるのです。
いやそういうことじゃないでしょw
>>391 が言ってることが全てだよ。
よく言われることだが、そもそもピクセルなんていうのは
デバイス側の勝手な都合に過ぎん。
VB6時代にもTwipsとかあったな。 GraphicsUnit列挙体がGDI+で扱える単位すべてじゃね?
画像表示するアプリ作ったときWin32APIのStretchBlt使ってたら スクロールの更新部分だけ描画させるたら非更新部分と結果がずれて困ったことあったな。 無効領域だけしか処理しないから全体を更新すればいいんだけど 大きい比率で拡大したときに表示してくれないから結局自前で処理するしかなかった。 GDI+が出たときに少数単位で渡したらずれなかった。
397 :
デフォルトの名無しさん :2008/07/27(日) 19:01:47
画像を反転させるには RotateFlip(RotateFlipType.Rotate180FlipXY); というメソッドを使えばいいことがわかりました。 画像Aと反転後の画像Bを作りたいのですが、 Cloneメソッドを使うと両方反転してしまいます。 Imageオブジェクトをコピーする良い方法はありますか?
RotateFlipしたあとにCloneしてるってオチじゃないだろうな
399 :
デフォルトの名無しさん :2008/07/27(日) 22:51:02
ものすごくヘビーな処理をしています 計算途中でスリープやサスペンドに入られるとちょっと困るので、計算中は一時防止したいのですが 何か良い方法はないでしょうか?
何か処理してれば普通サスペンドしないだろ
401 :
デフォルトの名無しさん :2008/07/27(日) 23:01:32
いや、寝る前に仕掛けて朝起きたらサスペンドしていてちっとも処理が進んでなかったです。
電源の設定でサスペンドしないように出来ない?
>>399 WM_POWERBROADCASTのPBT_APMQUERYSUSPENDの応答でサスペンド入りを拒否できるらしい。
405 :
397 :2008/07/28(月) 02:27:50
>>398 違うようです。
シャローコピーのようで、
Imageクラスの中ではイメージ実態への参照(ポインタ)
を持っているようです。
一方、回転するのはイメージ自体です。
406 :
397 :2008/07/28(月) 02:48:15
大ボケかましました。 RotateFlip(RotateFlipType.Rotate180FlipXY); だと画像が回転せず 正しくは RotateFlip(RotateFlipType.Rotate180FlipNone); でした。 頭悪すぎてすみません。 暑さでやられましたorz
rubyにおけるmechanize的なクラスとか無いんですか?
よほど自明でない限りrubyのmechanizeを説明するのが先だろ
C#にはスクレイピング用の定番ライブラリはないんじゃないかな。
逆行列、最小二乗法のフリーのライブラリないでしょうか?
ライブラリっつーか、ソース探してきては
CLapackなんかの必要な関数だけC++/CLIでラップして使うのが楽
string に格納されたデータが整数に変換可能な形なら int に 浮動小数点形式なら float に変換する方法教えてください。
TryParse
TryParse
プロパティというのは、クラスのフィールドを外部に公開する時に、柔軟性や冗長性を持たせるために、 必要ならば何らかのラップ処理を行うためのものだと、今まで思っていました。 つまり、プロパティは必ずpublicなものしか存在しないのかと。 ところが、最近、外人さんのソースを読んでいると、すべてのフィールドに対してプロパティを用意して、 クラス内部のアクセスに対しても、privateのプロパティを経由して行っているプロジェクトが多いです。 個人的には、フィールドは小文字で、publicなプロパティは大文字の命名規則(Pascal)だったのですが、 外人さんの流れでは、privateなプロパティもPascal記法になっていて、 クラス内部のすべての操作が大文字から始まるメンバを操作しています。 皆さんはどうされてます?もしかして、外人さん流儀の方が主流なんでしょうか? C#以外の言語も含めて、そっちの方が主流になるんでしょうかねぇ。 個人的には、ローカルなnullチェックなどはプロパティの中ではなく、メソッドの中で操作する前に 行うほうが行儀が良いんじゃないかと思ったりもするのですが‥‥。
>>416 質問の意図がクリアーじゃない気がするよ。
も一度他人の目線で自分の文章読みなおしてみ?
>>417 単に話題提起してるだけなので、こんなもんじゃないでしょうか。解析的に解ける問題でも無いし。
興味を持たない人には、一生縁のない内容でもあると言えるし。
おそらく、LL言語的にはプロパティはあって当然の記述なので、おそらく外人さんが正しいのでしょうが。
サンプル見ると、MS 自身も private なプロパティ使ってるね。 クラス内部であっても、プロパティの実装変えたときのこと想定しとけよってことだと思う。
>>418 だから何を問題提起してるのか読み取れない、と言ってるんだよ。
質問内容にケチをつけているのではない。
ナニが言いたいのか分からないといってるの。
>>416 Delphi(Win32,.netじゃないやつ)のVCLをみると
private/protectedのレベルではpropertyは使われてない。
(protectedまで使ってるものもあるがTCustom〜と直接使わないクラス。ここから継承してほかのコンポネを作る)
でも内部ではプロパティを使ってアクセスしてる。(Get/SetとCreateをのぞく)
外人さんの手法はクラスが大きくなると有効じゃね
>>420 読解能力がないか、話に興味が持てないならスルーすればいいんじゃね?
話からずれるが
C#じゃ配列のプロパティはインデクサとして1つしか使えないと思ってたけど
配列型をプロパティの型にしてしまえば一応いくらでも使えるのだな。今初めて気がついた
public Boolean[] Hoge { get;set;}
でも、配列としてデータを持ってるんでなくてその場で計算して値を出したり入れたりしてたり、
内部では別の型のデータとして扱ってて、便利のためにほかの型でのアクセスさせるためにほかの配列使ったりってことはどうやったらいいの?
int[,] でかると = int[100,100];
public int 極座標[int R,double Rad] { (ry とか
しかもこういうのがほかの変数にも必要だったりする場合にはどうやって対処すればいいの?
メソッドを使いなさい
>>423 妄想力と読解力は違うよ。
ま、区別がつかない人間に縷々説明して分かることとは思わないけど。
>>423 VBからだと引数付きのプロパティは作れるのだけどこれをC#から使う場合がヒントになるかな。
Public Property NameProp(ByVal index As Integer) As String
Get
Return array(index)
End Get
Set (ByVal Value As String)
array(index) = Value
End Set
// C#から使う
o.set_NameProp(1, "nnnnn");
o.get_NameProp(1);
変なのが沸いてるけど無視していこう。
そこまでして[]を使いたい意味がわからん
だから言わんこっちゃない。
説明能力がない奴がろくに推敲もせずに書いた文章を
エスパーしてやることが親切だと勘違いしている馬鹿が多くて困るが、
意味不明な文章(例えば
>>423 )にははっきり「意味不明だ」と言ってやるのが
結局は一番親切な事だとなぜ分からないのだろう。
インデクサほとんど使わないんだよなぁ
だから423はスルーしたのか
>>423 配列を返すプロパティは実装変えられなくなるからダメ
インデクサと GetEnumerator を持つコレクションクラスを返すプロパティを作るの推奨。
433 :
デフォルトの名無しさん :2008/07/28(月) 23:00:51
晒しage
配列使うってまだ.netに慣れてない人に多い気がする。
>>431 確かにそうだけど
ListBoxはObjectCollection返してるけど、こうするとどう変わってくるの?
暇なときに調べるか…
ここっていつも空気悪いよね
そりゃいつも低脳がでしゃばるからな
>>435 挙動変えたいときに、ObjectCollection継承したクラス作って
インデクサとかGetEnumeratorをoverrideしてしまえば
利用側に迷惑かけずに挙動変えれるでしょ。
IList<>かICollection<>でいいだろ。
IEnumerator<>という手も
>>441 ちゃんと理解できてない&元使用言語によっては配列使いまくりになるよ。
VB厨が使うVB.netなんていい例
ちゃんと理解できてない? それはたぶんお前さんのことでもあるんじゃないの? 別に配列を返すプロパティやメソッドが一義的に悪いとも思えないけどね。 もちろん配列を返した場合の弊害を知らないのは愚かだと思うが、 村の掟でもあるまいし、無条件に否定するのも同様に愚かだろう。
配列を返すプロパティがガイドライン違反であることには留意すべきじゃないか
>>443 まぁ、探してみてみろよ、わかるから。
お前の想定レベルみたいな生半可なもんじゃねーぞ、VB厨は・・・
そのうち.netの仕事が増えれば嫌でも見る事になると思うよ。
もし配列を返すことが目的ならばindexerを使うのはおかしい。 逆にindexer代わりに配列を使うのも変だな。 配列だけでなく変更可能なクラスをプロパティにするならある種の副作用は覚悟しなければならない。 getで予防的コピー、setで妥当性の検査や値のコピーといった措置は必要になるだろう。
メンバのコレクションの中身だけを渡したいときは配列使うようにしてるかも。 実測してないが早いと聞いたので。
速くはあるだろうが安全じゃない。ケースによってはここまでやらないと。 int [] _hoge = new int [5]; int [] Hoge { get { return (int []) _hoge.Clone(); } set { if (value == null) throw new NullReferenceException(); if (value.Length > _hoge.Length) throw new ArgumentOutOfRangeException(); value.CopyTo(_hoge, 0); } }
>>428 君のプロパティに関する意見はどうなの?
他の人がここまで書いているんだから、何か無いの?
無いのなら、無い奴に限って枝葉末節にこだわる黄金則が‥‥。
>>448 getで返す配列への変更が元のインスタンスに反映されないので、
プロパティじゃなくてメソッドにすべき
ケースごとに分けて考えようぜ。
配列の参照自身が書き換わってよい場合。また内容も外部から任意に書き換えることが出来る。
フィールドをpublicにする。
単純に配列の参照そのもをプロパティにする。
配列内容が任意のタイミングで書き換わってよい場合。ただし配列の参照自体やサイズが変わることは禁止。
配列の参照をgetだけするプロパティまたは取得だけの関数を使用する。
>>449 はこれ
配列の内容が書き換わるタイミングを管理したい場合。配列の参照やサイズが変わることは禁止。
インデックサかそれに準じる添え字を引数にした読み書き用の関数を使用する。
get setのプロパティで予防的コピーを行う。
>>448 はこれ
今北産業
インデクサ使ったほうがかっこよくね vs ハァ?メソッドでいいだろ
x.Foo[128] = 123; // 配列プロパティでインデックサみたいなことができるよ〜 int [] f = x.Foo; f[3] = 123; // こんなことや x.Foo = null; // あんなことされて平気? ・・・産業
>>455 や、それが平気じゃないならgetのみにするんではないか?
配列じゃないがこういうケース、書き換わらないと思ったら値型かよ!
hoge.Point.X = 100;
正解はこちら、めんどくせ〜
hoge.Point = new Point(100, hoge.Point.Y);
>>456 3番目のケースはそれでカバーできるが、2番目のは割り切りが必要かな。
458 :
450 :2008/07/29(火) 13:04:39
>>451 まず、誤解の無いように言っておくと、
>>451 の各ケースの意義は理解してるし、それについてどうこう言うつもりはない
で、
>>450 で言いたかったのは、例えば
obj.Hoge[2] = 10;
と書けるにもかかわらず、この操作が(直感に反して)意味を成さないのが問題だということ
プロパティの型が値型でなければ、そのプロパティで取得したインスタンスへの変更は
元のオブジェクトに何らかのフィードバックがあることが期待され、それを裏切る実装は避けるべき
ついでに、コピーを返すプロパティと配列を返すプロパティがガイドラインで禁止されているのも
それなりの理由があるからなので、それに違反する必然性がないのであれば従っておくべき
Image.Paletteを考えればコピーを返すプロパティはやっぱ直感的じゃないよな
インデクサだって・・・ダサッ
IComparerを継承したクラスでComparerメソッドの実装を しようとしてるんだけど、浮動小数点数の比較が上手くいかない 誰かスマートな実装方法教えてください
上手くいかないならどう上手くいかないのか書けよ
スマートも糞もないだろそれぐらい あとIComparer<T>使わんの?
あまりに低レベルな質問する奴はふらっと行けよ
>>462 int ret;
float x;
float y;
ret = (int)(x-y)
みたいにやってるけど、差が0.・・・だと、丸まってしまって
0になってしまうから、駄目だと思うんだが、どうやったら
上手く比較できるのかさっぱりわからない
整数ならこれで上手くいくんだが
>>463 IComparer<T>は知らなかったので、今から調べてみます
それくらいって程簡単なの?
とりあえず簡単なら教えて欲しい、これでずっと悩んでる
ウェブでいくら探しても、整数と文字列の比較のサンプルしか無いんだ
>>465 x==y/x<y/otherwise
でいいだろ。
ふらっとだな。 if (x > y) return 1; とか思いつかない?
468 :
oth :2008/07/29(火) 17:27:22
otherWiseがコンパイル通りません
>>466 すいませんが、まるでその式の意味が理解できないんですが
どのように理解したら良いんですか?
>>467 int にキャストしないで
if (ret >0)
return 1;
のようなものは考えていたけれど、もっとスマートな処理が
あるんじゃないかと思って聞いてみたのです
Comparerの戻り値の正数ってのは、0か負の数じゃなきゃ
なんでもいいんですかね?差の値を入れなくても
MSDNの解説ぐらい読めよ……
ふらっと池よクズ
>>469 スマートと行数が少ないは違うだろ。
比較関数で差を返すのは大昔からよく見るコードだが、
通常、整数型は正負で扱える数の範囲が違うから、何も考えずに符号を反転させるとオーバーフローする。
ちょっと考えればわかることで、まともなプログラマはそんなコードを書かない。
>>469 IComparer.Compare(double x, double y)
{
return x - y;
}
振り出しに戻る、だなw
return (x - y).CompareTo(0.0);
>>472 そういえば、そうですね。
単純に降順の場合、ret = -ret で返してました。
っていうか、ウェブにあるサンプルってどれも
この返し方してたんで、疑問にも思いませんでした
定数を返した方が安全なんですね
>>473 え、いやそこの所を実装したいのですが
後々も拡張したいので
>>477 バカ丸出しだなww
そのCompareTo()の中身が欲しいんだろwww
俺が正解書いてやったのにまだやってんの?
このスレ昔からそうだけど答えも知らないくせに 文句だけは言う馬鹿ばかりだなw
int Compare(double a, double b) { if (a - b < 0d) return -1; else if (a - b > 0d) return 1; else return 0; }
ふらっとのがまともだな
何がおもしろいのやら… くだらない奴しかいなくなってしまったな…
public int CompareTo(Double value) { if (m_value < value) return -1; if (m_value > value) return 1; if (m_value == value) return 0; // At least one of the values is NaN. if (IsNaN(m_value)) return (IsNaN(value) ? 0 : -1); else return 1; }
>>488 前からずっとこうだろw
少し上のレスもそうじゃねえか
馬鹿のくせにプライドだけは高いから
すぐに荒れるw
普通の比較をしたいなら int Compare(double a, double b) { return a.ComaperTo(b); } 独自の比較基準を追求したいなら int Compare(double a, double b) { if ( よくわからない基準で同じならば(x, y) return 0; if ( よくわからない基準で大ならば(x, y) ) return 1; else return 0; } ってことじゃないの?
ああ、荒れてしまってすいません
>>482 のようなシンプルな実装で行こうとも思います
もっと式一つで済むようなかっこ良い実装があると思ったんです
すいませんでした
ありがとうございました
わざわざ引き算してるのは何で?
>>493 君は悪くない
実力の伴わない自尊心の持ち主が多いスレなんだ
NaNの処理が必要だから
>>490 の実装が正解に近いよ
Reflectorを使って、System.Double.CompareTo(object value)の中身を見てみることをお薦めする
>System.Double.CompareTo(object value) だからさ、それをそのまま使わないか不思議なんだけど
>>498 拡張したいんだろ
初心者は変なことやりたがるんだからほっとけ
正解に近いという言い回しは、Cカップ好きのあれ思い出すな
一つの質問が投下されるたびに内容に関係無く 一悶着あるのがこのスレの掟w
>>498 特別なソートしたい場合なんていくらでもあるだろ
色々やってりゃ既製の比較関数じゃ追いつかない
場面は多々出てくる
>>496 ソースコードを直接見ろでいいじゃない。
質問者がExpress使いという可能性はあるけどさ。
>>490 遅レスだが、IsNaNの処理おかしくね?
非数じゃなかった場合、何でreturn 1に決め打ちしてんの?
>>505 何を決めうち?
// ここに到達したら少なくともどちらかは非数なので
m_valueが非数でvalueも非数ならば0
m_valueだけが非数ならば-1
m_valueが非数でないならvalueが非数なので1
個人的には if (!IsNaN(m_value)) return 1; if (!IsNaN(value)) return -1; return 0; の方が、分岐が浅くなって好み
509 :
デフォルトの名無しさん :2008/07/29(火) 22:42:53
連想配列、HashMapにあたるコレクションの説明がC#の入門書では異常なほど排除されてますよね。 自分はDictionaryを見つけて使ってますが、みなさんはもしかしてインデクサをMapのように実装して使ってるんでしょうか? まさかとは思うんですが、独学の人間にアドバイスをよろしくお願いします。
いいえ
普通にDictionaryだろどう考えても。 場合によってはHashtable使うこともあるが。
>>509 Dictionary はまさに連想配列よ。
赤黒木で実装されてる。
STL の map と一緒。
>>512 MSのサイトにはハッシュテーブルで実装されてるって書いてあるよ。
Dictionary - ハッシュ SortedDictionary - 赤黒木 ListとDictionaryぐらいは大抵の入門書で解説してあると思ってたわ。
Dictionary<,>はただのHashtableのラッパ。
Dictionary ハッシュ辞書 SortedDictionary 赤黒木 SortedList 索引をもつリスト Hashtable Dictionaryの非ジェネリック版
SortedListは説明しづらいから逃げてることが多いかな。 わからなければSortedDictionaryを使うのが無難。
MSDNライブラリとか規格書とかSSCLIのコードとか読む人あんまり居ないの?
520 :
デフォルトの名無しさん :2008/07/30(水) 00:50:37
509です。カキコして下さった皆さんに感謝しています。
インデクサが定義可能と知り、まさかなと思いまして。でもやっぱりそうでしょうね。
>>514 ListとDictionaryぐらいは大抵の入門書で解説してあると思ってたわ。
まあ、いっぺん見てやってください。Listの解説があるならずいぶん良心的なほうです。。。
>>518 SortedDictionaryは推測するにJavaのTreeMapですね。新知識でした、ありがとうございます。
@ITってそこらの入門書より使えると思う俺
>>522 reflectorで確認した限りでは使ってないな。どのあたりで使ってるの?
DictionaryBaseと混同してるんだろう せっかくジェネリックになったのにHashTableなんか使ってたら値型のときに速くならないじゃん
日本語がコードネーム? Vistaは見送ったけどこれは買おうかな
どうせ10年後くらいだろ
横浜市緑区? めっちゃ近所なんだが
俺んとこの市にも緑町があるぜ、隣の市とかその向こうにも。
>>525 大勝利って言われてもな。とりあえずWPFの普及率もっとあげてくれ。
Singularity ベースってだけで 9 割方ネタだろとしか正直
533 :
デフォルトの名無しさん :2008/07/30(水) 22:01:12
C#によるプログラミングWindows 上/下 (マイクロソフト公式解説書) はC#2.0でもかなり役に立つ? C#2.0版まだ、でなさそうだし・・・・ #オライリーのC#本、手打ちしてる位のレベルなんだけど
>>533 1.0の頃からあまり変化がない部分が中心の本だから「時代遅れ」の
心配はあまりいらないかもしれない。
ただ俺はあの人の本って一般に評価されてるほど評価する気になれんな。
網羅的なのはいいけどコード変だし。
535 :
533 :2008/07/30(水) 22:28:27
>>534 なるほど。ありがとう
明日、本屋によって現物確認してから考えるよ(確かあったはず)
とりあえず行数打って慣れるってレベルだから、いいかなと
#オライリーのも うーん と思わなくもない
#javaからshiftしきれてないからかな
ポインタ、クラス、ジェネリックを効率的に習得するには C -> C# -> C++ という順番がいいような気がする今日この頃。
お前の意見なんて求めていない 消えろ
Java、C、C#の順でやってきた C++は危ないコード書き放題の怖い何かって認識しかない
C++は言語仕様以外にも安全な書き方、 定番な書き方、インクルードファイルのインクルード順序とか、 まともに使えるようになるまでのインフラ整備にものすごく時間がかかるよ C++の複雑さと心中する覚悟のある人しか使えないんじゃないかなぁ
540 :
デフォルトの名無しさん :2008/07/31(木) 11:25:26
レジストリのフルパスを表す文字列からRegistryKeyを取得する簡単な方法は 無いでしょうか? \\HKEY_LOCAL_MACHINE\Software\hoge というキーを取得するには Registry.LocalMachine.OpenSubKey("Software\\hoge") で取ることは可能ですが、 OpenSubKeyメソッドがRegistryKeyのインスタンス のサブノードしか取得できないため、まずルートキーを最低指定する必要があり 非常に面倒に感じます。 フルパスの文字列を解析して それがHKLMなのかHKCUなのか等をいちいち 判定して場合分けして、ルートキーを取得し、さらにそのサブキーを取得というのは 結構あほらしい気がするんですが…。 RegistryKey regKey = Registry.GetKeyFromPath("\\HK_LOCAL_MACHINE\\Software\\Hoge"); のように一気に取りに行く方法はFWに用意されていないんでしょうか?
541 :
ノムヒョン :2008/07/31(木) 11:26:38
using System; using System.Collections.Generic; using System.Text; namespace VirtualMethods { class Control { protected int top; protected int left; /* 画面上でのウィンドウの位置を決めるための式 javaが懐かしい * */ public Control(int top,int left) { this.top = top; this.left = left; } // ウィンドウズへの描画をシミュレートします public virtual void DrawWindow() { Console.WriteLine("Program;プログラムを描画します。座標:{0}, {1}", top, left); } }
542 :
ノムヒョン :2008/07/31(木) 11:27:50
public class Listbox : Control { private string listBoxContents; // 基本クラスのコンストラクタより引数が1つ増えています。 public Listbox(int top, int left, string contents) : base(top, left) // 基本クラスのコンストラクタを呼び出します { ListBoxContens = contents; } // 派生メソッドでふるまいを変えるための上書きバージョン(キーワード)overrideに注意) public override void DrawWindow() { base.DrawWindow(); // 基本クラスのメソッドを呼び出します Console.WriteLine("ListBoxへ文字列を書き込みます:{0}", listBoxContents); } } public class Button : Control { public Button(int top, int left) : base(top, left) { } // 派生メソッドでふるまいを変えるためのの上書きバージョン(キーワードoverrideに注意)
543 :
ノムヒョン :2008/07/31(木) 11:28:46
public override void DrawWindow() { Console.WriteLine("Buttonを描画します。座標:{0}, {1}\n", top, left); } } public class Tester { static void Main() { Console win = new Control(1, 2); ListBox lb = new ListBox(3, 4, "単独のListBox"); Button b = new Button(5, 6); win.DrawWindow(); lb.DrawWindow(); b.DrawWindow();
544 :
ノムヒョン :2008/07/31(木) 11:30:09
Control[] winArray = new Control[3]; winArray[0] = new Control(1, 2); winArray[1] = new ListBox(3, 4, "配列中のListBox"); winArray[2] = new Button(5, 6); for(int i=0; i<3; i++) { winArray[i].DrawWindow(); } } } } でアクセシビリティに一貫性がありません。基本クラス 'VirtualMethods.Control' のアクセシビリティはクラス 'VirtualMethods.Listbox' よりも低く設定されています。 とでて解決ができません。いろいろ調べてみたのですがもうどうすればいいのかと^^;
>>540 そういうメソッド一つ作っとけばあとは使いまわすだけじゃん
>>544 エラーメッセージのまんまだよ。
Controlクラスのアクセスレベルがpublicになってない。
547 :
ノムヒョン :2008/07/31(木) 11:40:38
<<546 ありがとうございます
ム板ってなんで安価も付けられない糞コテばっかりなん?
>>540 元のWin32 APIからそういう風になっているから仕方ないな。
そこもなんとかしろよ.NETとは思うけど。
単発での読み書きなら、Registory.GetValue/SetValueが使えるんだけどね。
550 :
デフォルトの名無しさん :2008/07/31(木) 13:44:34
>>545 まあ、そうなんですが。
ただあんまりあほらしいんで、車輪の再発明のような気がして
なんかライブラリに用意されているのを見落としているのかなと
思ったんですが。
551 :
デフォルトの名無しさん :2008/07/31(木) 13:46:32
>>549 WIN32からしてそうなんですか。
それじゃ無理そうですね…。
もともとHKEY_CURRENT_USERとかはパスではなく、 Registory.CurrentUserなんかに相当するWin32の定数だった。
デフォルトメーラーの起動で質問が有ります。 デフォルトメーラーの新規メール画面を添付ファイル付きで起動させたく、 現在MAPISendDocumentsで実装しています。 しかし、Outlook、Thunderbird、Eudra、Beckyなどは問題無いのですが LotusNotesだとNOT_SUPPORTED=26が返されます。 エクスプローラから「送る」→「メール受信者」や、 Excelの「ファイル」→「送信」→「メールの宛先(添付ファイル)」 などはちゃんと動いており、この機能はMAPIを使っているものだと思っていますが、 (これ自体間違っているかもしれませんが・・・) MAPIを使って他に添付ファイル付きで起動させる方法をご存じの方おりませんでしょうか? MAPIを使わなくても別の方法でも問題有りません。 いろいろウェブで探してみましたが結論には至りませんでした・・・
554 :
デフォルトの名無しさん :2008/07/31(木) 22:53:14
Formの移動時やリサイズ時に枠線だけ動いたり変形している のと同じ描画を行いたいのですが、別のダミーのフォームを Style.Noneで実現しているのでしょうか。その場合はWinProcなどを 用いてWindowMessageを処理して実現可能でしょうか? その場合はMouseをCursorオブジェクトなどを使って操作して、 OnResizeメソッドなどをプログラム側から発生させてダミーのForm側 にMouseを乗り移らせるようなことが可能なのでしょうか・・・ この辺ご存知の方、できましたらアドバイス等頂きたく(それとも、 あれはデスクトップに直接描画とかしているのでしょうか?)
デスクトップにControlPaint.DrawReversibleFrameする簡単な実装は お気に召さないの?
556 :
デフォルトの名無しさん :2008/08/01(金) 00:59:41
>>555 おお、そのような便利なモノがあったのですか!!
調べてみます!ありがとうございました!
すいません、質問です。 C#をベースにしたらしい言語を使ってます。 #includeを使いたいですが、これ自体はないようなので、 どういった手法をとればよいのでしょうか? importだかusingだかで、他から引っ張って来るような記述はあったんですが、 目的の機能ではないみたいで…。 目的としては、mainを含む上位部分を使いまわししたいんです。 で、下位部分を手動で大量に作って、共通部分の上位部と組み合わせてそれぞれコンパイルするような。 何かありますでしょうか?(´・ω・`)
C#をベースにした言語って?
Cω
シーチンコ?
特に名称はないみたいです。 ツール内のみのスクリプト扱いなので。
ふうやれやれ
>>561 どんなツールだか知らんけど、そのツールのベンダーフォーラムなり
ユーザーフォーラムなりそういうものはないのか?
構文だけC#に似せているのか、実際に.NET Frameworkを利用している
のかもわからんし、アドバイスのしようがない。
>>563 確かにそうっすね。(´Д`;
フォーラム系はないっす。マニュアルもろくに整備されてなくて。
サポセンもアウアウです、はい。orz
ただ、基本的にはC#を汲んでるらしいので、
ひょっとしたらC#の手法が通るのでは?
と思って質問しました。
C#ではCみたいなソースの使い回しはできないんじゃね?
>>564 言語の出所をはっきりさせない
理由も言わない
サンプルコードも示さない
お前何しに来たの?
その言語は知らないけどとにかくC#に#includeは無い 設計するときに無いほうがいいだろうと判断されたから無い
DLLにしてしまうのがいいかもね
きっとCでもこういうのincludeして悦に浸ってる人なんだよ #define program int main() { #define begin { #define end return 0; }
>>569 金払って買ったもののサポセンがないってどういうことよ
1ライセンス100万とかそういうソフトだろ
とりあえず#includeに相当するC#のキーワードは#usingだが
使い方はC++でいうところの
namespace std;
だからまるで別物
とりあえずサンプルコードでもなけりゃ助言しようもないし
上司に相談したほうがはやいと思うぞ
×namespace std; ○using namespace std;
575 :
554 :2008/08/01(金) 15:06:49
>>572 ワロタwでも一部分だけpascalでも意味内から無駄だな。
>>571 DLLっすか。それで引っ張ってこれるなら・・・。
中々情報がないですが、漁って見ます。
>>573 サポセンあるにはあるんですが、質問したら
激しく役に立たないサンプルソースがヤル気なく返ってきました。('A`
相談したいんですが、社内での導入が実質初なので。
まともに使ったこと有る人、他にいないんです。
サンプルコード・・・一部抜粋して書いてみました。
役に立たなそうですが。(´Д`;
MessageItem frm_ENG;
public override void OnStart()
{
frm_ENG = GetMessage("ENG");
StartTimer("ENG",200);
Start_test();
}
[Timer("ENG",200, false , false)]
public void OnTimer_t_ENG()
{
StartTimer("ENG",200);
SendMessage(frm_ENG);
}
public void Start_test(){
WriteLine("start");
}
共通的に記述が2500行位で、それを百前後作るんで、
できれば引っ張ってきたいんですよね。
>>577 情報、どうもありがとうございました。
助かりました、すぐ調べてみます!
>>578 が2chでヤル気なく質問してきた理由がわかった('A`
気の毒すぎるw
C#とWindowsAPIが混ざってるよね…
Timerを属性指定にして
メソッドに依存させてしまっているあたりセンスのなさが感じられるww
とりあえず
>>578 が何をやりたいかということと
サンプルソース全部と
あともう微妙にスレ違いなんで、
どっかの放棄されたスレに移るかして、
腰を据えて分析するよりないんじゃないかなw
パズル感覚で協力してくれる人いると思うよww
codedom使ってコンパイルしてるだけでC#なんだと思うよ つか常識的に考えて#includeで展開とか不要でそ… どんな状況なら必要なんだよ…
よくわからんけどincludeなんて前世代的だとおもう
なんという蘭学事始。
>>583 そうかもしれんが、かといってグローバルな(つまりファイルスコープじゃない)
コンパイル定数を定義しようと思ったらプロジェクトのプロパティに
ちまちま書かなければならん不便さを進歩と言ってよいのか疑問でもある。
>>585 定数も、const じゃなくて、static readonly なプロパティ使うことが推奨されてるしなぁ。
private/internal な場合か、円周率みたいに絶対変わらない値だけ const。
定数だったら、たとえばColor.Redみたいに、クラスのpublicな要素でぜんぜん不便を感じてないけど。 そういうことじゃなくて?
お前は黙ってろ
お前がだまれ。
>>587 プリプロセッサシンボルを使いたいんだろうね
>>585 はプロジェクトのプロパティでしか設定できないと思い込んでいるらしいが
>>583 クラス定義とか、テキストエディタさえあればヘッダ除けばすぐに判る点とか、
C/C++やってきた自分としては好きですけどね
クラス定義は嬉しいけど、インクルードする順番によってコンパイルが通らなくなったりするのは最悪だった
>>591 俺は C++ やってるからこそ、
あのヘッダシステムのせいで
クラスの依存性切るのに pimpl みたいなおまじないが必要だし、
コンパイル速度が低下するし、
インテリセンスの効きが時々おかしくなるし、
include が大嫌いなんだが。
C、C++のincludeが遅いのはマクロのせいでしょう
C++の の間違いじゃない? Cはよほど下手な組み方でもしなければそうそう遅くならないでしょ
#includeが欲しいだけならプリプロセッサでもかませばいいじゃん。
目立つのはC++になるね。 でもCも速度としては遅いし、ヘッダーを1バイトでも書き換えたら includeしてる全てのソースファイルを再コンパイルになるのはかわらない。 そういう意味でも遅いよ。 もしマクロがなくて、クラスや関数の定義のみであるなら リアルタイムコンパイルも可能だよ。
C みたいな関数宣言と #define だけのためにあるシステムを、 C++ でクラス定義でも使いまわしたのがそもそもの失敗じゃないか。 private な変数1個追加しただけで、#include してるファイル全部再コンパイルとか 狂ってるとしか言いようがない。
そこでpimplイデオムですよってスレ違いじゃねぇかよ
>>590 すまんその「思い込んでる」のは俺だけど、
俺の「思い込み」だというならもったいぶらずに君のいう別の方法を教えてくれよ。
分かってると思うけど議論の流れからいってIDEでプロジェクトの設定いじるより
不便な方法だったなんの意味もないわけだが、そこは踏まえて頼むよ本当。
>>600 普通に教えてくれでいいんじゃね?
頼みかた感じ悪いと思う
いつもそうなん?
VSのマクロでCSharpProjectConfigurationProperties3.DefineConstants触るとか
>>599 既出
>>593 >>600 定数定義用の static なクラス作って、
絶対に変わらないと言い切れる定数は public const フィールド、
そうでなければ public static readonly なプロパティ。
あと、#if SYMBOL 用のシンボル定義は、 むしろヘッダファイルでできるべきではなく、プロジェクトのプロパティですべき というのが MS の判断。
>>604 なんだよやっぱりプロジェクトのプロパティでしか出来ないんじゃないかw
だから「べき」って、確かにそうかもしれんがその不便さを進歩って言えるんかい、
つってんだよ。
設定ファイルを直にいじれよ
多重継承禁止とかもべき論で導入されたわけで
DebugやReleaseの他にもプロジェクト構成を作って切り替えるのが正攻法 逆にいえばそれで足りる用途にしか使ってほしくないんだろう
C++はtemplateを導入した時点で、#includeでマクロがどうこうといった次元からすでに超越してる。 技術的には可能でもC++のtemplateを模倣する言語は現れないだろう。
C++はあと文字列mixinみたいな機能が入れば完全にプリプロセッサと縁が切れるな
>>608 それが正攻法だというのは否定してないよ。
構成の切替方法はあれで便利だし。
ただIDEのあのたった一行の入力欄に「全部の定数を定義する必要がある」のは
不便で使いにくいって言ってるだけ。
しかも(当たり前だが)作った構成の数だけ同じことをする必要がある。
そこにミスが入った場合、非常に発見しにくいとも思うんだが。。
あっちこっちのファイルに飛び散るより遥かにましだと思うが
>>605 「できる」みたいに言ってるやつと
>>604 は別人だろ。
できる風に書いてるやつは多分よく読んでないだけ。
要するに、お前の書き込みによく読む価値はないと判断されてる。
実に自分を世界の中心に置く「セカイ系」的発想だね。 俺やアイツの誤読はお前の文章に読む価値がないからだ、ってかw まあ、自分を世界の中心に「俺様中華思想」もいいかもしれんが、 だったら自分の言葉を自分に適用したらどうだろう。 つまりもう少し他人にとって有益な情報を書けよって意味だが。
黙ってスルーする能力もないのかよ
能力というのは目的合理的に物事を推進する力のことを言う。 では「スルーする能力」という時の「スルーする」ことの目的ってなんだ? 少なくとも俺にとってはそんなものはない。 むしろ馬鹿は叩いておいた方が場のため本人のため、そして自分自身の精神衛生のため、 と思っての行動なんだけどね。
というか .csproj はただの MSBuild の XML ファイルなんで テキストエディタで開いてゴリゴリ編集できるんだがそういう 基本的な話は知らんのか? VS からならプロジェクトのアンロード → **.csproj の編集。 …ついでに言うと、VS 側の CSharpPackage が変な proj ファ イルでも普通に動くので VsPackage めんどいとき(ビルドとIDE から適当にファイルが見えて編集できればいい)は .csproj 流用 するといいみたいな。
csprojのほうはいいんだが、slnのほうは変なGUIDが付いてるので手でいじれん・・・ どっかに何入れればいいか公開されてるのかな?
適当でいい
622 :
デフォルトの名無しさん :2008/08/02(土) 15:58:49
623 :
デフォルトの名無しさん :2008/08/03(日) 10:39:27
XmlSerializerでstaticなクラスをXMLに保存できないですよね? アプリ設定情報をstaticにしてどのクラスからもすぐに楽に参照したいんですけど、 staticクラスにするとXmlSerializerは使えないですよね?
シングルトン
>>623 ・MySettingクラス(仮称)をstaticクラスじゃなくてsingletonにする。
または
・MySettingクラスはstaticのまま、内部の実装としては別のHogeSettingクラスの
インスタンスをもちこいつをXMLシルアル化するようにして、外部にはSaveSetting/LoadSetting
メソッドを公開する。
626 :
デフォルトの名無しさん :2008/08/03(日) 11:20:33
シングルトンでいきます ありがとうございました!
stringの配列を指定した列挙型の組み合わせに変換したいのですが、 @のところでコンパイルエラーになってしまいます。 どのように実装したらいいんでしょうか・・・ public class ConvertToEnum<T> where T : Enum ←@ { private T _value; public class ConvertToEnum(string[] texts) { foreach (string s in texts) { _value |= Enum.Parse(typeof(T), text, true); } } public T Value { get { return _value; } } } [Flags] public enum TestEnum { AAA = 001, BBB=002, CCC=004 } string[] texts = { "AAA", "BBB", "CCC" }; TestEnum value = ConvertToEnum<TestEnum>(texts).Value; value : 007
コンパイルエラーの内容読むこともできないの? enumとかdelegateとかで制約は無理
staticコンストラクタでif (!typeof(T).IsAssignableFrom(typeof(Enum))) throw new Exception(); でおk でもその例でクラスにする意味がわからない ConvertToEnum<T>(string[] text)でいいよね
>>629 クラスにしたのは元のソースがクラスだからです
必要な部分だけ残したら上の形になりました
えーと、Generic制約でEnumを指定できないと、
Aの部分の | 演算子が使えません…
foreach (string s in texts)
{
_value |= Enum.Parse(typeof(T), text, true); ←A
}
_valueをint型にしてもBの部分でコンパイルエラーです…
public T Value
{
get { return (T)_value; } ←B
}
上手な実装の仕方はないでしょうか…
リフレクション
where T : struct, IConvertible としておいて value = default(T); foreach (string s in texts) { value = (T)Enum.ToObject(typeof(T), value.ToInt32(null) | ((T)Enum.Parse(typeof(T), s, true)).ToInt32(null)); }
List<List<int>>型変数に入ってるすべてのintを返すIEnumerable<int>がほしいんだけど、 Linqとか使うと1行で可能?
listlist.SelectMany(list => list);
|=を使わんでも、文字列をカンマ区切りにして、 Keys k = (Keys)Enum.Parse(typeof(Keys), "Control, Alt, T", true); みたいにすればいい。
>>634 こういうのが頭の中にすんなり入ってこないorz
var array = new[] { new {A="あ", B="いう"}, new { A="え",B="お" } }; var flat = array.SelectMany(x => new[] { x.A, x.B }); Console.WriteLine(string.Concat(flat.ToArray())); こういう例のほうがわかりやすいかな
ラムダ式を華麗に扱えるようになりたい
C#3.0でRayToracingとかのArticleあったけれど、あのソースがラムダ使いこなしたサンプルの一つとみていいもんかね。
642 :
デフォルトの名無しさん :2008/08/04(月) 21:46:35
バイト配列の変換について教えてください。 バイナリファイルよりReadAllBytesでデータをバイト配列に格納後、指定の バイト数分のデータを2進数の文字列に変換するメソッドを作成しています。 8バイトまではBitConverterメソッドで数値変換し、Convert.ToStringで 2進数の文字列に変換できるのですが、9バイト以上はBitConverterメソッドが 対応していません。この場合、何か良い方法があるのでしょうか? よろしくお願いします。
手抜きするならBitConverter.ToStringとString.Replace
どうでもいいが数値変換したらリトルエンディアンになっちゃうぜ
クリスタルレポートとMicrosoft.Reportingのどっちを使おうか悩む。 普通なら昔からあるものは情報も豊富でバグも枯れてて使いやすい はずだが、クリレポは悪評ばかり・・・
>>638 このケースではクエリ式の方がとっつきやすいかな。
from list in listlist
from x in list
select x;
慣れてくればSelectManyを思い出せるようになる。かも。
ILではどっちでも同じことなんだけど。
>>638 SelectMany は正直無理だと思う。
そのために、
from listist in listlist
from x in list
select x
みたいな記法がある。
これで listlist.SelectMany(list => list) と同義のはず。
>>641 あれは結構邪道だけどな。
クエリ式が関数型言語っぽい記述できるのをいいことに、
C# 内で関数型言語プログラミングしてるっていう。
クエリ式の目指すところではなくて、副産物的なものだと思う。
Validatorクラスでの正規表現チェックって クラサバでもwebでも使えますか?
>>633 >>634 に便乗して、
List<List<List<int>>> listlistlist; から IEnumerable<int> を得るには、
listlistlist.SelectMany(listlist => listlist).SelectMany(list => list);
か、
listlistlist.SelectMany(listlist => listlist.SelectMany(list => list));
みたいな感じでOK?
もっと良い書き方があったりするのかな?
>>650 それでもいいけど、それは関数化すべき気がする。
static IEnumerable<T> Concat<T>(IEnumerable<IEnumerable<T>> listlist)
{
return listlist.SelectMany(list => list);
}
を作って、Concat(Concat(listlistlist));
メソッドと関数って何が違うの?
メソッドはクラスの一部だけど関数はそうじゃなかったような・・・ というか関数はそもそもC時代の名残だし
>>653 昔の名残。
OOP 用語的にはメソッド、昔の名残的にはメンバ関数。
単に関数っていうと、グローバル関数(C# では定義できない)のことだけど、
非 OOP 言語ではグローバル関数として定義するような static メソッドのことを関数って呼んだりする。
関数化ってのも、メソッドとして独立させろって意味。
サブルーチン化って言った方がいいかも。
サブルーチンって更に化石用語な気が。
Procedure / Function、Sub / Function のように 関数とサブルーティンを分ける言語も多いね。 サブルーティンを戻り値のない関数としたのはCあたりからだったかな。
BackGroundWorkerとThreadってどっちがパフォーマンスいいの?
気にするほどのもんでもない
>>307 .Where 以降の構文は、3.5から追加されたものだと
思うのですけれども、なんと呼称されているでしょうか?
オブジェクト内のメソッド呼び出しのようですし
Linq とはまた別の新しい技法のような気がします。
てか、Where, ToList, ForEach が一般的過ぎて検索しにくい・・・
拡張メソッド 実態は静的メソッドの呼び出し
662 :
660 :2008/08/05(火) 11:39:51
664 :
660 :2008/08/05(火) 12:01:18
>>660 それもLINQ。
from x in list where x > 10 select x; みたいなのはLINQクエリ式。
list.Where(x => x > 10); みたいなのはメソッド形式のLINQ。
>>663 そう、構文糖衣。
from x in listX
from y in listY
select x * y;
みたいな構文が、メソッド形式ではどうやってもスマートな書き方できなかったから導入されたらしい。
>>665 その例だと
listX.SelectMany(x => listY, (x y) => x * y)
こうなるけど、例としては不十分な気がする
これくらいにしないと
from x in listX
from y in listY
where x > y
select x * y;
listX.SelectMany(x => listY, (x, y) => new { x, y })
.Where(z => z.x > z.y)
.Select(z => z.x * z.y);
あと、let入るとさらに面倒になるな
user32.dllのAnimateWindow()を呼び出しているのですが、 CPU負荷が大きくてガクガクします。 負荷を下げる方法ってありませんか?
AddRange()に二次元配列を渡す方法はないですか?
>>668 直接は無理。
LINQ 使って軽い変換かければ可能。
例えば、int[ , ] array なら l.AddRange(array..OfType<int>());
int[][] なら l.AddRange(array2.SelectMany(x => x));
乙です。
>>666 外部結合になるとクエリ式でももうわけわからん
var r2 =
from x in "abcdefghijklmn"
join y in "ABCDEFGHIZ"
on x equals Char.ToLower(y) into yex
from y in yex.DefaultIfEmpty('.')
select new string(new char[] {x, y});
VS2008EEを使用中です。 C#でDBを使うデスクトップアプリを作る場合、 DBは何を使うのがベストなのでしょうか? とりあえずSQL compact3.5ってのを弄ってみましたが、 DBファイルが独立して作られてて、なんか妙な気分です。 ビルドしたらアプリに含まれるようになるんでしょうか? ほかにXMLを使うやり方もあるそうですが、難易度高すぎる気がします。 なにか他にお勧めあったら、教えてくだちい。
DBをアプリに含めるってのの方が変じゃね? LINQ使えばXMLもSQL Server Compactも大差ないと思うが。
>ビルドしたらアプリに含まれるようになるんでしょうか? そんなん聞いたこともないわ。 Accessのイメージで言ってるのか?
Firebird使えばできなくもないがXMLで難易度高すぎなら無理だろうな
>>673 ,674
別になってるのが普通なんですね(汗
おっしゃるとおり、Accessのようなものをイメージしてましたorz
言われてみれば、Web系でもDBと処理は別になりますよね・・・
>>675 一応、ちょっとだけ弄ってみたんですが、
木構造が複雑になってしまい、これだったら慣れてるRDBのほうが楽かなと。
恥ずかしながらFirebirdは初耳でした。ちょっと調べてみます。
>676 何がしたいのか分からないけどXmlSerializerあたり調べてみたら?
「DBファイルが独立して〜」の意味が把握できないけど、アプリにDBを組み込ん じゃいたいってことなら SQLite とかの組み込みDBって手があるよね。
>678 俺も>672を読んでそう思ったので組み込みDBにできるFirebirdの名前出した。 けど>676読んだら「RDBが使いたい」ってわけじゃ無い感じがしたんでXmlSerializer言ってみた。
コントロールのバインドはDBじゃなくてたんなる int[]とかからも情報を取り込めるですか?
foreach (var msg in FizzBuzz(100)) { Console.WriteLine(msg); } ということができるように、 public static IEnumerable<bool> Fizz() { while (true) { yield return false; yield return false; yield return true; } } public static IEnumerable<bool> Buzz() { while (true) { yield return false; yield return false; yield return false; yield return false; yield return true; } }
public static IEnumerable<string> FizzBuzz(int max) { var fizz = Fizz(); var buzz = Buzz(); foreach (var i in Enumerable.Range(1, max)) { bool isFizz = fizz.First(); bool isBuzz = buzz.First(); fizz = fizz.Skip(1); buzz = buzz.Skip(1); if (isFizz && isBuzz) { yield return "FizzBuzz"; } else if (isFizz && !isBuzz) { yield return "Fizz"; } else if (!isFizz && isBuzz) { yield return "Buzz"; } else { yield return i.ToString(); } } } こんな感じのメソッドを作ってみたのですが、複数のIEnumerableを並行して進めながら処理するforeachみたいなのってないのでしょうか? 自前でFizzとBuzzを1つずつ進めてるのがいまいちスマートじゃない気がして、複数のIEnumerableを並行して進める手軽な方法ってないでしょうか? foreach (var i, isFizz, isBuzz in Enumerable.Range(1, max), Fizz(), Buzz()) { とかみたいな雰囲気でまとめて書く方法ってないですか?
>>682 ZipWithみたいなのが欲しいということかな?
だったら、デフォルトでは存在しない。自作している人ならちらほら居る。
うん? EXEとDBファイルが同じファイルになるのを期待してると思ったんだが。 Accessのイメージって言ってるし。 SQLiteもFirebirdもんなこたないんじゃないの? SQL compact3.5だっておんなじようなもんでそ?
サーセン676です。 684さんのおっしゃる「EXEとDBファイルが同じファイル」を期待してました。 DBもMS謹製しか使えないかと思ってましたが、 他のも結構使えるようなので、改めて調べてみます。
C#プログラムでで正規表現を使っているのですが、
正規表現中にPerlのように
ttp://8-p.info/perl-interpolation/ string hoge = "hogehoge";
Regex r = new Regex(@".*hoge"); //hogehogeが展開される
のようにして変数を展開することはできるでしょうか?
普通に ".*" + hoge では駄目な理由は何?
変数を展開って何?
ああ、そういうことか。 string.Format かなにかで文字列化してから Regex に食わせればOK。 文字列中に ".*$hoge" みたいに変数入れたければ PowerShell 使えばいいと思う。
685です。ありがとうございます。 変数を展開したい理由は何かと問われれば 変数hogeの文字列も外部の関数から取得してくるからです。
AllowsTransparencyをtrueにするとウインドウフレームが表示できなくなってしまうのですが、
System.Windows.Windowで下のSS最前面のウインドウのようにOpacityを使用するにはどうしたらいいのでしょうか?
最前面のウインドウはSystem.Windows.Formsです。
ttp://www.imgup.org/iup662583.png
693 :
デフォルトの名無しさん :2008/08/07(木) 10:52:52
質問です。 環境:C#2.0です。 あるファイルパスがあるとして、 同じディレクトリに別のファイルを作りたいとき、 どのようにファイルパスを作ればよいでしょうか。 (パスそのものを作らなくても書き込みできればよいので FileInfoとかでもよいのですが) string path1 = @"C:\xx\yy\aa.txt"; FileInfo file1 = new FileInfo(path1); string path2 = file1.FullName.Replace(file1.Name, "bb.txt"); なんてもの考えましたが完全じゃないですし。 どうやるのが真っ当なやり方でしょうか。 いろいろ調べてみましたがわかりませんでした。 よろしくお願いします。 // javaで言うところの new File(directoryName, filename) なんてのが // あればと思ったんですけど少なくともFileInfoにはなかったので
Path.GetDirectoryNameとかPath.Combineとか
ありがとうございます。調べてみます。
objectを引数に取る関数とかobjectのプロパティとかってクラスライブラリを見ただけじゃ 何をセットすればいいのか分からない場合が多いんですがどうやって調べればいいんでしょうか? ググって事例を探してるんですが、事例が無いと完全にお手上げです。
千里の道も一歩から始まることを信じよう それ、わんつーわんつー
確かに.netはobject型を引数に取るとか多いな。JavaでObject型を引数に取るのはあんまり見ないのに。 この辺って何か思想の違いみたいなのがあるん?
>>698 Javaはプリミティブ型がObjectを継承してないからじゃないの
いざとなったらReflectorで中追っかけてみる
>>698 そんなに多いか?
非ジェネリックなコレクション以外あまり思いつかないが…
非ジェネリックコレクションとIComaprableあたりは当然として、 WriteLineやString.Format系、Thread関係のデリゲート、 EventHandlerのsender、ほかなんだっけ。
ICloneable.Cloneがそう。共変性がないからobjectを返さないわけには行かない。
データソース関係とかobjectに何渡すのかわかりにくくないですか? 標準じゃないけど、nplotってライブラリも何を渡すのか分からなくてちょっと困った。
JavaとC#とでそういう差が出そうなGenerics関連の違いって思い浮かばないけどな。
データバインディングはそうですね。あれはリフレクション使いまくってるから。
C#とCだったらC#のほうが入門には適しているでしょうか?
うん
>>708 ありがとうございます。
それと、勉強するための本を買おうと思っているのですが
有名な物・お勧めの物はあるでしょうか?
>>711 読ませていただきます。
ちなみにVC#というソフトでみなさんはプログラムを書かれているんですか?
うん
むしろテキストエディタとWindowsSDKでやってる人がいたら尊敬する
単なるバカだから尊敬できないな
.Netが出始めてたころはそれでやってた人もいたようだがな 無料版のIDEも無かったし
きちんと楽出来る環境が簡単に整えられるのに わざわざ意味が無い苦労をする人がいたらそれは馬鹿だけど そう言う環境が簡単には揃わない時代なら仕方ないじゃない
今のVC#はテキストエディタとしても異常に快適だからな
プライベートで他のクラスからアクセスする必要のないフィールドって内部クラス化した方が良い? 外部クラス?それとももっとスマートな方法ってある?
>>720 そのままプライベートのフィールドで持ってたらあかんの?
フィールド==インスタンスの話が何故かクラスの話になるから意味が分からなくなる
>>721 それじゃインスタンス1つ分にしかならなくね?
行数多くなるとVisualStudioのロードが遅くなるから分けようかと思ったんだけど、 実行時に無駄にオーバーヘッド生むよね、本末転倒だったね・・・
partialだかそんなのなかったっけ?
VSに負担掛けるほどたくさんの行にフィールドが宣言されてるの? ロードの時間とか細かいパフォーマンス気にする以前の問題だろそれ さすがに分けるべき
時代はパーシャル!
トラックで全国回ってた人だねw
>724 JITコンパイラの最適化を少しくらい頼ってみたら? 時々例外が起きたときのスタックトレースが妙に抜けてることがあって インライン展開されてる様子がわかるとちょっと嬉しくなるよ。
730 :
デフォルトの名無しさん :2008/08/09(土) 18:42:15
簡単なエディタを作っているんですが、 RichTextBoxを使ってて、描画領域を少し右にずらして、その空いた領域に 行番号を描画しています。Graphics.DrawStringです。 当然スクロールされたら行番号を変えなくちゃいけないですが、このとき 再描画する前に前回描画した行番号を消すには、 どんな方法が一番最適なのでしょうか。
背景色で塗りつぶす
趣味でやるぶんにはExpress Editionで十分ですか?
趣味の内容によるかな。いわゆるベータ版マニアだとインストールできないアドインが 多いから十分じゃないかもしれない。
パッケージフェチとしてはやっぱり製品版じゃないと
ドMな俺はSDKとメモ帳が最高。
俺なんか仕事で評価版つかってるから大丈夫
silverlight2やSQLServer2008用のアドインはSTD版以上だったかな。
741 :
デフォルトの名無しさん :2008/08/09(土) 20:43:02
TextBox.Text = str; とやっているのですが、strが大きいと処理時間遅くなるものなのですか? str.Lengthが4320162だったのですが、10secくらいかかります。 中身のイメージではポインタのコピーとかではなく、実データを コピーしているから遅いのでしょうか? これを早くする方法はないのでしょうか?
TextBox使うのやめて、オーナードローにする
743 :
デフォルトの名無しさん :2008/08/09(土) 21:18:00
文字列代入の時だけ別スレッドで動かせばいいんですかね?
コントロールにはそれを所有しているスレッドからしかアクセスできん
>>742 の言ってる事は、
遅いのは文字列のコピーじゃなくて、その文字列の描画に時間が掛かってるんだよ
という事
4320162ってヘタしたらXPのソースコードよりデカい気がするんだけど そんなものTextBoxに表示してどうしろとw ちなみに、RichTextBoxで代替したらあんがいあっさり解決しない?
> XPのソースコードよりデカい またまたご冗談を
748 :
デフォルトの名無しさん :2008/08/10(日) 00:08:05
>746 RichTextBoxだと7秒くらいでTextBoxで17秒くらいかかります。 バイナリをヘキサで表示してるんですが、大きいものだとこの7秒とかの間 かたまってしまって・・・ >745 TextBox.Text = str; の前と後にStopWatchクラスで処理時間を出してるんですが、 この代入には描画処理も含まれているということでしょうか? RichTextBoxはコントロールで表示されているところの描画のみ してくれるわけではないのでしょうか? >744 コントロールに別スレッドからでもアクセスする方法ってありません でしたっけ?Invokeとか? RichTextBoxには表示したいところだけバイナリを情報を代入してけば いいんですかね?スクロールするたびに出したり消したりするとか?
>>748 InvokeはUIスレッドが今やってる仕事を中断させて別の仕事をやらせる関数。
そんなでかいデータ扱うなら横着しないでユーザコントロール書けばいいだろ。
>>749 しつこいね君も。
簡単に言うけどかなり面倒だしそれなりに難しいと思うよ。
表示することだけ考えてない?
>>750 それならもう勝手にしろよw
ヘキサエディタでできあいのコモンコントロール使ってるのあったら教えてね
752 :
デフォルトの名無しさん :2008/08/10(日) 01:03:48
すいません横着させてくださいっす。新しくユーザーコントロールはきついっす。 RichTextBoxがそういう仕様ならやはりちょびちょび表示ですかねぇ。。。
仮想モードでListViewでもつかえば
プログラム板ってさ、低脳ばっかだよね。 OpenGLスレくらいだなマシなのは。
OpenGLスレ見てみたがアホばっかりなんだが…
>>748 TextBox.AppendText()は使ってみた?
InvokeRequiredとInvoke, BeginInvokeはUIスレッドにマーシャリングしてくれるメソッド
758 :
デフォルトの名無しさん :2008/08/10(日) 07:23:19
>757 TextBox.AppendText(str)も同じくらい時間かかりました。 >753 >仮想モードでListView kwsk
zip内のファイルを実行したい(wav鳴らすとか)のですが、そのためには一時フォルダ等に ファイルを展開しなければならないのでしょうか? zip内に格納したままあれこれやるってのは不可能なのでしょうか?
うん
SharpZipLibでメモリに展開し、Win32APIのwaveOutWriteやDirectSoundに流せばできるんじゃね?
Streamに展開すればいいんじゃね?
質問です DBからデータを取得し、その構造体を返すクラスを作成しています。 私個人としては、datasetの形でかえしたいと思っています。 しかし、速度の問題から、 listを返すようになっています。 datasetで値のやりとりをするのと、<list>でやりとりをするので そこまで速度やパフォーマンス、メモリの負担などはかわるのでしょうか? ただのgetsetのプロパティのついたクラスのarraylistを、データとして使うほうが 早いのでしょうか? 僕としては、ここは.NETらしくdatasetを使いたいのですが。
とりあえず測ってみればいいんじゃないかな
構造体返すんだったらデータセットよりも素直にコレクションで返してくれた方が 使う側としては便利だと思うけど
.NETの構造体の意味を誤解している可能性大
代入では無くて文字列の描画に時間がかかってるなら、 ユーザードロウしない限り改善不可能じゃないか?
>>765 そうでしょうか。
たとえば、DataSet(型付Datasetという意味です)でデータを持つか
構造体でデータを持つか
そのメリットデメリットってそもそもなんなんでしょうか
datasetだと、複数テーブルをセットして、
リレーション張ったり、
うけとった側で、フィルターかけたり、nullチェック等のメソッドが用意されていたり
デザイナでデザインできたりするところだと思うのですが
構造体にすると、なんか.NET的な組み方じゃなくなってるような気もしたりしなかったり
僕が間違っていますか。
時と場合による
とりあえず「構造体」というものについて勘違いしてるのはよくわかった クラスじゃなくてほんとに構造体で返すようなデータならデータセットで返すなんてありえない
構造体って値で返すのか
>>771 すいません、
えっとarrayistを返すか、datasetを返すかということでした。すいません。
作り手はdatasetのほうがいいだろうさ 使う側はどういう用途なの? それがわからんと良いとも悪いともいえん
MSDNライブラリには SpinWait のコードの実行は、 複数のプロセッサが搭載されているコンピュータで発生する可能性のある問題を回避するように設計されています。 たとえば、Hyper-Threading技術を使用した複数の Intelプロセッサが搭載されているコンピュータで、 SpinWait は、特定の状況で、利用できるプロセッサ リソースがなくなることを回避します。 とあるんですが、マルチコアCPUではThread.SleepよりThread.SipnWaitを使った方が良いのでしょうか?
ケースバイケース
>>775 ていうかその説明は Sleep 関係ない。
Sleep と比較してどうこうじゃなくこのメソッドの実装は HT やマルチコア
みたいな環境でも問題起こりませんよっつー意味
なんでそんな注意書きがあるのかはスピンウェイト、スピンロック
あたりでググってまずそのメソッドが何するのか分かれ。
ついでに Sleep との違いも
マルチコアだけでなくハイパースレッディング環境でも 一応うまく動くようになってるよってことじゃないの?
マルチコアやハイパースレッディングみたいな環境でも問題起こらないって… 普通マルチコアやハイパースレッディング環境でしか使わないだろ でハイパースレッディングの場合も一応うまく動くようになってるよってことだろ? 実装によっちゃ無意味にCPU目一杯ぶん回すだけで意味ない可能性もあるから。
コードを見ようと思ったがネイティブに飛んでてわからなかった。 予想できることは一定時間ごとにスレッドを譲る仕掛けか、 一定時間でSleepに変更するかといったところだろう。 1CPUの場合はすぐさまスイッチしないと意味が無いし、 2CPU以上ならある程度スピンさせてても大丈夫だろう。 HTの場合はその中間くらいで手打ちしてるんじゃなかろうか。
スピンはスレッド中断には移行しない。 だから自分でバックオフを持たなきゃならない。 まあそもそも長時間かかる可能性がないとこだけにしとくのが無難だけど。 ついでに大抵シングルコア環境では使わない。 HTの場合は処理なし命令?でスピンして、有効な処理ではないことが CPUに分かるように実装されてるはず。
いやシングルコアでは使わないって言うか使うよ。高精度な というかスイッチしない待ちのとき使うものでコア数関係ない あえて言えば Win 上で動くからか ちなみに HT の場合の話だがシェアするからビジーさせると それが埋め尽くしちゃってパフォーマンスが極端に低下する。 だから PAUSE 命令が追加されててスピンにそれを使う必要が あるんだがそれ使ってますよみたいな意
シングルコアでスイッチしない待ちをやること自体が少ないんじゃないの?
あ、ここでのシングルコアはHTは含んでない。
>>783 内部的でいいんなら Moniter やらの同期機構が内部で使ってる。
アプリレベルだと例えば単純にスイッチは精度が悪い(Sleep は「最低」
指定時間待つ API)ので timeBeginPeriod(or MMCSS)でスケジューラ
いじって Sleep とスピンウェイトのあわせ技がいい。
機会や直で使うジャンルが少ないのは同意。コア周り、メディア、ゲーム
系しか知らん。
というか一定時間(クロック)待つようなメソッドの使い方(ぶっちゃけタイマ
みたいなもんだ)がマルチコアしか使わないになんでなるんだよという話。
ぜんぜん別やん。
もしかしてマルチコアじゃなくマルチスレッドっていう話か?
…それはそれとして思い出したんだが iterations を現実時間から計算する
方法知っている人いたりしない?
いや、一般にメディア、ゲーム系なんていう特殊な用途以外じゃ まず使う機会がないって感覚だった。 Winで一定時間(クロック)待つような使い方自体が特殊用途なイメージだったわ。 ところでMonitorやらってシングル環境でもSpinWaitしとんのかね??
>>786 モニタの場合は基本的に他のスレッドからの開放待ちだから1CPUではスレッドを譲らないと意味が無い。
マルチCPUの場合は最初はスピンで待って、一定時間越えたらSleep系のWaitに変える。
1CPUでスピンをやるとしたら、微妙なタイミングのIO制御や
他のディバイスからの割り込み待ちといったところで普通はディバイスドライバの仕事。
ゲームとかビデオとかそういうのが絡まない限り1CPUでビジーループはありえない。
だよねってことが聞きたかった。 単にシングル環境での >内部的でいいんなら Moniter やらの同期機構が内部で使ってる。 について疑問だっただけ。
789 :
デフォルトの名無しさん :2008/08/12(火) 14:28:25
C#のおもしろい、本・ホームページ教えてけれ。 今、GUIをソースコードからうってcscでコンパイルしてるんだけど、おもしろい。 なんでもいいから、教えてけれ。
ちょっとGUIでアプリ(簡単な物)を作ろうと思ったのですが C+APIはもう嫌になったので(殴 新たに何か言語を勉強すべくC#に目をつけたのですが、 ・GUIアプリ製作のためにC#を学ぶ この考えはまずいでしょうか?(もしくは他にもっと良いものがある?) (プログラミングのスキルはCをそこそこ,JAVAは超初心者 です。)
いいと思うよ
>>790 全然良い。
逆に言うと画像処理とか線形代数計算ならわざわざC#を選ぶ必要性がないしね。
イベントと継承が分かってくれば単純なGUIアプリならすぐ作れるようになるよ。
頑張れ。
JavaだろうがC#だろうがマルチスレッドになってからが本番だと思う
>>789 Google 先生の評価に従ってみるのもいいと思う。
796 :
789 :2008/08/12(火) 18:44:30
>>792 猫はC#編もあるんだ。昔、WinAPIのときちょっと参考にしていたよ。
やってみるよ。さんくす!
>>795 Google先生でググってみます。色々あってどれがいいか見定めなきゃいかんけど、
がんばるよ。ありがとう。
MicrosoftPressのプログラミング.NET Frameworkが良かった デリゲートやガベージコレクション、非同期処理などについてとても詳しい解説があるよ
DataGridViewを利用した自作カレンダーを作ったんだが、 これを複数のフォームで使いたいのね。 そういう時、クラスライブラリを作るのか、プロジェクトにクラス追加するのか、 どっちがいいの? てか、プロジェクトに追加するクラスって、どういう時に使うの?
>>798 どっちでもとりあえず目的は達成できる。
他のコードでも使いまわしたいのならクラスライブラリにした方がいいかも。
そういう用途ならDataGridViewから派生することになると思うんだけど、
そのあたりはちゃんと理解してるの?
>てか、プロジェクトに追加するクラスって、どういう時に使うの?
え?質問の意味が。。
>>799 そのあたりは理解してない気がする・・・
とりあえずクラスライブラリとして作ったやつが、カレンダーの日付と曜日を取得するだけで、
DataGridViewはその都度フォームに手動で配置して、取得したデータを流し込んでる。
これは、派生してることにならないですよね?
DataGridViewも自動生成するようにしたら、「派生する」になる?
追加クラスは、クラスライブラリがあるのに、
わざわざ追加クラス使う意義って、何だろうなーと思いました。
>>800 言語としてのC#を一度ちゃんと勉強した方がいいと思うぞ。
「猫でもわかる」や@ITの記事でも十分だから。
>>801 @ITの改訂版 C#入門を、作りながら参照する感じで見てたんですが、
そういうのは良くないなと、自分でも思ってましたorz
改めて最初から最後までキチッと目を通して、出直してきます。
>>802 @ITにも継承についての解説くらいはあるんじゃないの?
だから 今までちょいちょいつまんで見てたのを最初から通して読むことにしました って書いてあるじゃんよ
.NET3.0→3.5ってC#的には何か変わるんですか?
>>805 C# 2.0からC# 3.0になった。
型推論とか拡張メソッド、クエリ式とか。
>>806 素早い回答、ありがとうございます。
.NET 2.0→ 3.0でC# 3.0が採用されたわけではなかったんですね。
根本的なところを勘違いしてました。 お恥ずかしい。
ちなみに.NET3.0でも(.NET2.0でも)C#3.0を使える
810 :
デフォルトの名無しさん :2008/08/13(水) 23:03:36
>>809 むしろ君が何を言いたいんだ。
その文章特におかしいように感じないんだが。
あいかわらずの川俣節だな。
>>809 > 本題に入る前に、よくあるトラブルの事例を見てみよう。
いかにも頭の中で考えたような、なさそうな事例だな。
シンプルに書けば凄くわかりやすい機能なのに、 わざわざ分かりにくく書いてるよな……
まあ、
>>811 がすべてを物語ってるなぁ。
「だって川俣だから」
拡張メソッドで拡張したクラスを継承しても、その拡張メソッドは使えるの? List<T>の解説を読むとインターフェイスを拡張してると書いてあるから使えるみたいだけど。 継承してもあくまで拡張メソッドだからオーバーライドもだめだよね?
試してみればわかるのに。
>>813-814 そう感じるのは、君たちが自分が理解してようがしまいが「動けばいいや」
的なコピペプログラマーだからなんじゃないのむしろ?w
そりゃそういう人間の視点からすれば、「一行で済むことをなにゴチャゴチャいってるんだ?」
としか思えないのは理解できる。
同感
>>817 逆だろ。
理解できてるから、「なんでこんなに回りくどい説明するんだ?」と疑問に感じるんだよ。
連載の第6回に予定している内容を先に書けばいいのに、こういう書き方するのは
執筆ネタの水増し目的としか思えない。
自分が理解できてないのかもしれないので、ちょい質問。 拡張メソッドって、拡張元クラスの静的メソッドに置き換えて考えれば終わりだと思ってたのだけど、 それ以上に新しい意味があるの? そりゃ、名前が衝突したときの順位は問題になるだろうけど。 低レベルな質問で申し訳ないが、折角なのでこの機会に理解しておきたい。
823 :
デフォルトの名無しさん :2008/08/14(木) 10:31:03
>>822 その理解でOK。
強いて言えば、拡張メソッド記法からデリゲートを作る時はちょっと特殊。
static string MyToString(this object o) { .... }
こういう拡張メソッドがあるときに、次のようなコードを書いたら何が起きるか、という話。
Func<string> func = obj.MyToString();
>>824 詳しく解説をたのむ。
デリゲート作るならこんなんじゃない?
Func<string> func1 = () => obj.MyToString();
Func<string> func2 = () => xxxExtentions.MyToString(obj);
Func<object, string> func3 = xxxExtentions.MyToString;
Func<object, string> func4 = (o) => o.MyToString();
これもできるか Func<string> func5 = obj.MyToString;
> 強いて言えば、拡張メソッド記法からデリゲートを作る時はちょっと特殊。 確かに、単純に静的メソッドに置き換えられない場合か…… 色々試してくるわ。 ご指摘ありがとう。
いや、内容的に全く理解できないわけじゃないが、今回の記事内容に関しちゃ 拡張メソッドは定義されてる名前空間をusingしないと使えないことに注意(通常とは異なり、名前空間をusingせずにフルで記述する方法は使えない)。 くらいの一文で十分だろう。 ぐだぐだ書く必要はない。
831 :
デフォルトの名無しさん :2008/08/14(木) 17:54:00
■■みんなでサイトつくろうぜwwwwwwwwwwwwwwww■■
「お前ら一緒にサイト作ろうぜwwwwwwwwww」
「2ちゃん越えるサイト作ろうぜwwww」
http://gacco.o0o0.jp/ http://yutori.2ch.net/test/read.cgi/news4vip/1218673130/ http://ex14.vip2ch.com/test/read.cgi/part4vip/1218612197/ 興味沸いたらきてください!
======================!! 人材募集中 !!======================
■プログラムを組んでくれる人
*サーバー側
言語はRubyかPerlの予定ですが、Perlが有力候補。
・チャット
定期的にクライアントから着信があり、それに対して更新されたチャットのメッセージを返信する程度の能力。じゃなくて機能。
通信するときのフォーマットは未定。
・ログイン・アカウント管理
ログイン認証、各アカウントの点数などの管理。データベースは未定。
・お絵描き
未定。とりあえず鯖に負担がかからない程度にたまに画像を送信してあげるって感じで
*クライアント側
はっきり言って俺もわからね。Ajaxだとかflashだとかjavaだとか。
■機能提案(正しくは人材ではなく、意見?)
「こんな機能があったら良い!」「こうするともっと楽しくなる!」などの意見募集中。
挨拶とか気にせずスレにどんどん書き込んでくれればおk
■デザイン
サイトのデザインを考えてくれる人、作ってくれる人募集中。
できればphotoshop illustrator使える人(プロジェクト共有しやすいので)
コピペ君って馬鹿だな、まで読んだ。
833 :
デフォルトの名無しさん :2008/08/14(木) 19:54:41
スルー出来ない奴がいるようだw
「コピペ君って馬鹿だな、まで読んだ。」って、urlが張られたら自動的に書き込むスクリプトでしょ?
コピペ君?w
>>817 川俣信者って川俣と同じく、難癖のつけ方に無理がありすぎるな。
>>830 っていうか、あのusingの解説って、絶対誤解を与えてるよ。
初心者向けにわかりやすく書こうとして、ちょいカラ回りなのはいつものこと
839 :
デフォルトの名無しさん :2008/08/15(金) 00:45:20
templateをダウンロードできるサイトを知りませんか?
何でたまにインテリセンス働かないのかなぁって思ってたらこういう事だったのか。 System.Linqなんて使わんわと思って手動で消してたよ(´・ω・`) 俺みたいなアホには冗長的でも解説があるだけで有りがたいです・・・
川俣信者必死www
どうでもいいが信者とかなんとかいい歳こいて幼稚臭さが抜けない奴って リアルでいるんだね。 幼稚なボクに理解できるかどうかわからないが、 そういうのは「信者」呼ばわりされれば腹が立つお前さん自身を他者一般に投射しているわけで、 要するに「思い入れ体質で、かつ打たれ弱い」お前さん自身を語ってることになると思うんだけど。
川俣は信者まで文体が回りくどいのか
>>842 VB使ってる奴らの方がそういう「叩きがいがある」のが多いよ。
少し奴らの言い分聞いてみたり覗いてみたら?
Hashtableのシングルライタ・マルチリーダに関するスレッドセーフ性について、 MSDNでもバージョン毎に書いてることどんどん変わってるんだが、 結局ライタを同期すればスレッドセーフってことでいいのか? それともそれだけじゃ駄目なのか? 最新の記述でも矛盾する事が同じとこに書いてある感じで、よく分からない。
別に難しく考える必要は無くてほかのコレクションと同じ 読み込みと書き込みは同時に行っちゃダメ 書き込みは複数スレッドから同時に行っちゃダメ あとSynchronizedは忘れろほとんど意味ないから、同期するならlockかReaderWriterLock
いや、出来るだけ並行性を上げたいのよ。 Hashtableだけその辺の動作条件が違うでしょ。 しかも同期ラッパー経由でもスレッドセーフじゃないとか。 出来ればロックしないマルチリーダと 書き込み同士のみロックするシングルライタ っていう使い方がしたいのよ。 1.1の時はこれでスレッドセーフと書いてあって 2.0ではスレッドセーフじゃないに変わって 現在さらに複雑な記述になってる。 でも2.0みたいに頭から駄目にはなってない感じ。
849 :
デフォルトの名無しさん :2008/08/16(土) 08:24:17
こりない奴だな。そこまで求めるなら自分で作るしかないよ。
糞重いなVS2008
851 :
デフォルトの名無しさん :2008/08/16(土) 09:44:13
>>848 >現在さらに複雑な記述になってる
これ複雑で本当に分かり辛いよね。結局どういうことだったの?
852 :
デフォルトの名無しさん :2008/08/16(土) 10:25:14
アウトラインエディタ超つかえねー
>>851 説明の前半だけ見れば、書き込み同士だけ同期取ればいいように見えるんだけど、
後半でそれを覆してくれてるっていうか前半と矛盾してるように見える。
前半のシングルライタの意味が本当にひとつのスレッドだけからじゃないと駄目ってことなら、
なぜマルチライタの時に同期とるだけではだめなのか分からない。
書き込みがシリアル化されてたらの意味にも矛盾する気がするし…
ReaderWriterLockなんてHashtableの同期に使うようなもんじゃない。 オーバーヘッドが大きすぎて多分ほとんどの場合ただのlockのがまし。 SP1で追加された?ReaderWriterLockSlim?ならまた違うかもしれないが。 ReaderWriterLockとかはどっちかっていうと、物理的なリソースアクセスの同期なんかに使うもの。
>>853 原文読んでもやっぱり難解というか意味不明だけど一応こう解釈して見た。
ライタがHashtableにシリアル化される場合というのはlock(hash.SyncRoot){}を使うということ。
読み取りはlockする必要はないが、書き込みはlockにより完全にシリアル化される。
Synchronizedラッパーはすべてのメソッドに単純にlockを仕込んでいるわけではなく、
書き込みの並列性を上げるためひと工夫している。
この副作用としてラップする前のオブジェクトに直接読み書きされた場合はスレッドセーフ性が保てない。
読み書きともSynchronizedラッパーを使えば大丈夫なはず。
856 :
デフォルトの名無しさん :2008/08/16(土) 16:50:05
マルチスレッドのことあまり勉強してないでしょw
自己紹介乙
シンクロナイズドラッパーはそんな賢いことはしてないね 書き込み関係のメソッドをlockしてるだけのようだ lock (this._table.SyncRoot){ this._table[key] = value; } 「ライタがHashtableにシリアル化される」の解釈はConstrol.Invokeなどで スレッドに同期させるの意味ではなかろうか
javaのConcurrentMapを移植してみるとか。 ソースは見れるんでしょ?
System.Threading.CollectionsにMap系のクラスがそのうち追加されるでしょ ParallelFXで
あまり入りそうな感じがしないのは何故だろう…
自分で使っているテンプレートzipをうpしてくれ。
ContextBoundObjectつかってナイスな仕組み作ってる人おる?(´・ω・`)
ナイスじゃないけど使ってる。
すいません すれ違いだったので移動します。
867 :
デフォルトの名無しさん :2008/08/18(月) 02:00:24
868 :
デフォルトの名無しさん :2008/08/18(月) 14:54:32
C#というより.NETについての質問なのです。 インストールされている.NETのバージョンを調べたいので方法を教えてください。 ネットで調べた限りmscorlib.dllのファイルバージョンを調べるとよいことはわかりました。 しかし.NET3.0, 3.5 のバージョンはこの方法だとわかりません。 3.5の場合csc.exeのバージョンを調べればわかると思うのですが、 Client Profileだとcsc.exeが無いという話も聞きますし、 3.0の場合はどうすればよいか見当が付きません。
>>868 HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\v3.0
HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\v3.5
あー間違った。↓の方がいい。 HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP
871 :
870 :2008/08/18(月) 15:20:19
補足 v1.1.4322、v2.0.50727、v3.0、v3.5の下の各InstallキーにDWORDの1が 格納されていれば、そのバージョンはインストール済みね。
872 :
868 :2008/08/18(月) 15:30:53
ありがとうございました。調べてみます。
難読化ツールとか使わなくても変数名を日本語にすればReflecter for .NET防げるのに、 なんでみんなそうしないの?
難読化(笑)
875 :
oth :2008/08/18(月) 19:17:36
マルチディスプレイの情報を取得するのはScreen.AllScreensでできるみたいですが、設定するにはどうしたらいいんですかね? win32見てもそれらしいのが見つからん・・・
win32見る?
Win32APIのことだろ
878 :
デフォルトの名無しさん :2008/08/19(火) 01:33:11
サーセン質問です。 Win32APIでWindowFromPoint(POINT Point)という引数のPoint位置にあるウィンドウのハンドルを返すAPIがありますが、 これと似たような感じでPoint位置のWindowsFormsのコントロールのインスタンスを返すようなものはありますか? (自分のプロセス内のもののみ対象でかまいません)
>>873 が日本語が不自由な国の人だから日本語化されるとそれだけで難読化されたに等しいとかじゃね?
2ヶ国語を話せる人をバイリンガル 3ヶ国語を話せる人をトライリンガル と言いますが、では1ヶ国語しか話せない人は何というでしょう? 答えを知りたい人は「一ヶ国語しか話せない人は、ジャパニーズ、又はアメリカン」で検索してね
いや、つまんないから。
>>883 ありがとうございます。無事に取得できました。
てゆうか、すごい役に立つページじゃないですか。いいページを教わりました。アザスです。
C# + VisualStudio で単純に(自分でスレッドを作らないで)フォームアプリケーション を作成したとき、スレッドはいくつ動作するんですか? ひとつだけですか? 複数フォームを出した場合はどうでしょうか? 教えてくださいませ。
タスクマネージャでスレッド数も表示できるので色々試してみるとよろし
887 :
デフォルトの名無しさん :2008/08/19(火) 22:40:35
C#で作ったプログラムを、64bit対応しろと言われました。 ユーザーは64bit化することによって動作が早くなることを期待しているようですが、 ただ単にインストーラを作成する場合に、TargetPlatformプロパティをx64、Itanium とするだけでは駄目なんでしょうか? やはり速度を早くするためにはコード自体を変える必要がありますか? どなたか分かる方おられましたらお教えください。 よろしくお願いします。
AnyCPUで作っとけば勝手に64bitで動く。 P/InvokeやCOM Interopを使ってるならその対応は必要。
>>888 Win32API使ってる場合は、Win64APIとかがあってそれに変換するのでしょうか?
よろしく。
>P/InvokeやCOM Interopを使ってるならその対応は必要。
891 :
887 :2008/08/19(火) 22:50:51
>>888 返答ありがとうございます。
AnyCPUでビルドしたプログラムの64bitOS上での動作は確認できましたが、
プログラムの動作速度が32bitOS上での速度と変わらないくらいでした。
コードなども64bitで速度が出るように書き換える必要があるのでしょうか?
64bit上で動きさえすれば早くなると思っていましたが、
それがそもそも間違っていたのでしょうか?
8ビットや16ビットのゲーム機じゃあるまいし、なにを寝ぼけてんだよ
速度は大差ないことが多い
>>891 チューニング次第だし、君が勉強不足なだけw
CPUは同じだ、そう変わらない。 レジスタは増えたが命令長も増えたとか、性能向上と低下の両方の要素がいい塩梅に存在する。 今んとこ利点と言えるのは、アドレス空間が広がったってこと。
896 :
887 :2008/08/19(火) 23:05:10
>>893 >>895 そうなんですね。
・64bit対応しろと言われてもAnyCPUでビルドしている限り、基本何もしなくて良い。
・速度も大して速くなるわけではない。
と言うことでしょうか。
ありがとうございました。
>>894 すいません。認めます。
チューニングするにはどういったことに気をつけるべきなのでしょうか?
ヒントだけでもお願いします。
>>897 ありがとうございます。
64bit化といっても64bitOSで動かせると言うだけで、
速度向上のためにできることは少なそうですね。
899 :
デフォルトの名無しさん :2008/08/19(火) 23:27:08
レジスタが多くなったのはいいことだ。 気前よくCPUレジスタ256個とかでいいよ。 キャッシュもいいけど、レジスタ増やしとけば、あとはコンパイラが自動で手配してくれるから。
longやulongを多用していればかなり変わるけど そんなプログラム作ることはめったにないだろう?
x64ではニモニック上のレジスタが増えた代わりにシャドウイングできる実レジスターが変わらないから 実質レジスターが減った形になってしまった。 あと命令長が長くなって命令キャッシュの使用効率が落ちたとかなんとか。 IntelとしてはやっぱりItaniumを押したかったんだろうなぁ(笑
902 :
デフォルトの名無しさん :2008/08/19(火) 23:37:35
この際、やっと使いやすくなったD言語はどうよ?
どのD言語だよ 何種類あると思ってんだ?
>>900 x64は64bitの整数命令だと32bit命令と比べて1バイト命令長が増える。
即値や即値アドレスを使ったときは当然さらに伸びる。
4種類ぐらいだろ
906 :
デフォルトの名無しさん :2008/08/20(水) 00:11:53
レジスタはコストが高く貴重とか言うのは部品会社(Intel)の嘘だからw 昔の16ビットとか21ビットのマイコンとかの時代じゃないんだし、騙されるんな
アキュムレータは1つだけ
push/popに時間が食われていたとは言え、L1/L2/L3キャッシュの 充実でほとんど問題にならなかったしな
64bitの明確なメリットはアドレス空間の広さくらいしかないよなぁ
911 :
デフォルトの名無しさん :2008/08/20(水) 00:26:24
インテルはアーキテクチャは、最先端のようで実は原始的でしたとさww
今のキャッシュのレイテンシは昔のメモリ並み もちろんクロック換算だが
class A { string hoge; string foo { get; set; } } 参照型のフィールドやプロパティの初期値はnullが入るそうですが それに頼って書くべきか、明示的にnullに初期化すべきか 皆さんはどうしてます?
どっちでもいいよ。 規格で決まってるから。
癖でboolだけはfalseで明示的に初期化することが多いな
>>914 それに頼って書くべき
明示的に初期化されてたら何かあるのかと思ってしまう
918 :
デフォルトの名無しさん :2008/08/20(水) 19:25:43
>>914 参照型のフィールドやプロパティなら 明示的にnewでインスタンス化
すべきじゃないのか?
じゃないとclass Aのインスタンスを使うたんびにフィールドやプロパティが
ヌルでないかどうかチェックしないといけなくなるような気がするんだが。
>>918 初期値がnullである必要がある場合の話だろ
>>918 class Hoge {
public Fuga Piyo = null;
public Hoge(){
if(何たらかんたら){
Piyo = new Fuga(なんとか);
}else{
Piyo = new Fuga(かんとか);
}
}
}
みたいなこともあると思うぬ。
頭の悪い奴は書き込まないでくれ つまらない話題がいつまでも続いてうざい
頭の悪い奴が2chを利用してはいけないという法律はどこにもない
ローカルルールにもない
お前が消えろ
>>921
どういう奴が頭悪いというんだ?
悪者が使って良いスレはここですか?
悪者が2chを利用して良いという法律はどこにもない
ローカルルールにもない
お前が消えろ
>>925
頼むから悪魔の照明と同じ論理を使うなよ
頭悪い
>>926
ここで ×悪魔の照明 ○悪魔の証明 と突っ込まれると思ったがさすがにそこまで恥ずかしい事をする奴は いないようだ
レアアイテム 悪魔の照明 厨設定ならありかも
930 :
デフォルトの名無しさん :2008/08/20(水) 23:37:11
キモくてごめんんなさいOrz
931 :
デフォルトの名無しさん :2008/08/21(木) 00:54:16
質問です。 C#から下記の方法でエクセルファイルを指定し、起動しているのですが、 起動するたびに新規のプロセスEXCEL(excel.exe)として起動してしまいます。 C#実行時にEXCELが既に起動中であれば、同一プロセスとして起動したいのですが、 どのようにすればよいでしょうか? Excel.Application app = new Excel.Application(); Excel.Workbooks books = (Excel.Workbooks)app.Workbooks; //ブックにテンプレートを読み込む Excel._Workbook book = books.Open("xxxx\yyyy\zzzz.xls", Missing.Value,Missing.Value,Missing.Value, Missing.Value,Missing.Value,Missing.Value, Missing.Value,Missing.Value,Missing.Value, Missing.Value,Missing.Value,Missing.Value); 以下略 よろしくお願いします。
誰も答えられないとかwww このスレもういらないんじゃね?
自分で考えろってことだ
>>931 のやりたいことがわからないから答えにくいだよ。
オートメーションを使うことが前提なら、
app = new Excel.Application() のたびに新しいインスタンスが起動するのは仕様。
そのせいでインスタンスがいくつも残ることが問題なら、
同一プロセスから複数回起動するならappを使いまわす。
プロセス終了時にはClose / Quitしておく。
そうじゃなくて単純にExcelを立ち上げることが目的なら、
Process.Start("xxxx\yyyy\zzzz.xls") とすればよい。
>>899 レジスタが多い、大きいとスレッドスイッチ時にレジスタを待避、復帰させる
コストが無視できなくなる。x64のパフォーマンスが上がらない原因の1つに
それがある。
936 :
デフォルトの名無しさん :2008/08/21(木) 11:40:21
あたま使えよ。 256もあるなら、スレッド1に半分を使って切り替え時に他方にスワッピングするもんだろ。 スレッド4つぐらいでも楽ちん。 その設計だと、当然ユーザには使えないレジスタ(CPU管理用)がいくつもあるから、実施的にキャッシュの亜種と同じになる。 INTELとかAMDのハード屋、メチャ頭いいやつらだから、そんなのも検証して今の姿になってんだろうけど。
937 :
デフォルトの名無しさん :2008/08/21(木) 16:16:24
稼動してるプロセスをExcel.Applicationにキャスト(?)ってできるの? 考えるだけで凄く無理臭いけど
プロセスからではないけど、Marshal.GetActiveObjectのように 起動中のプロセスのオブジェクトを取得する手段はある。
939 :
デフォルトの名無しさん :2008/08/21(木) 17:27:55
C#+DXでどうやってXファイルのモーションを動作させるのでしょうか?
DXって何?
Dynamic eXtension
C#でDXというと、MDX、SlimDX、C#版DXライブラリあたりか? 単にDirectXという意味だったとしても、大体この選択肢+XNAになるな。
質問なのですが、 str(中身は) "abc" という文字列を変更する際に 文字列を変更する際に str = "abcdefghijklmn"; としてもエラーが出ず普通に変更されるのですが、何も気にせずこのように書いてしまって 問題ないのでしょうか? (正確には、VS2005のデザイン?で作ったテキストの書き換えを行っています。)
stringクラスは不変オブジェクトなので問題ないです
>>944 すみません
すでに作ったString型の変数に
生成時に代入した文字列より多い文字を直接
変数名 = "新しい文字列";
で 入れても問題ないでしょうか? と言うことです。
(多分これもわかりにくいと 思いますがorz)
すみません 急きょC#を扱うもので おかしな事書いてる可能性が高いです。
>>943 中身が"abc"のstringオブジェクトの代わりに新しい"abcdefghijklmn"オブジェクトが作成されて格納される
"abc"オブジェクトは他にどこも参照していなければガーベジコレクションの対象になる
変数名 = "新しい文字列"; は 変数名 = new string("新しい文字列"); と同じ意味 一度作成したstringオブジェクトは変更できない 変更しようとすると新しいstringオブジェクトが作成される stringオブジェクトの内部バッファをいじりたいときは StringBuilderクラスを使う
>>948 > 変数名 = "新しい文字列";
> は
> 変数名 = new string("新しい文字列");
> と同じ意味
また嘘を教える…
950 :
デフォルトの名無しさん :2008/08/21(木) 21:54:00
おお 新しいオブジェクトを生成してくれるとは
>>944 ,945,947,948
皆様ありがとうございました。
>>949 同じ意味だろ
コンパイルが通らないだけだ
このスレも中途半端な知識をひけらかすバカが増えてきたな これから頭悪い奴はレス禁止でよろしく
>>949 前者はintern化されるんだっけ?
あれそれはJavaだったか?
リテラルとして静的にStringオブジェクトがはじめからそこにあるというイメージでいいと思うよ。 ILではldstr という専用命令があったりする。
文字列リテラルは全部Intern化される
なぜか、"" と string.empty は同じインスタンスじゃないんだよな。
むむ、予想に反してTrueになってしまう。 string s = ""; // new string(new char [] {}); System.Console.WriteLine(string.ReferenceEquals(s,string.Empty));
>>957 Empty = "";
で初期化されてるから
DataGridで質問があるのですが、下記の作業を行うとして 3の特定行を抽出するのに何かよい方法とかあるでしょうか。 rowfilterとかで旨く取れるのでしょうか? ちなみに環境は、C#.Net 2003でWindowsFormです。 1 DataViewに50行ほどの配列データを格納。 2 ソート実行。 3 20−30行目だけをDatagridに格納して表示。
不便and/or遅い、と思ったことないけどな別に。 つーかいちいちReleaseComObject呼べってデマを最初に広げたの誰だろう。 普通は暗黙的な参照さえ作らないようにすれば必要十分なのに。
>>961 是非kwsk。
確かにいちいちReleaseComObjectやってます。
すごいめんどくさいです。
一つでも忘れると確実にExcelタスク残ります。
javaのpoiみたいに直でバイナリ読み書きできるライブラリがあれば一番なんだけど無いの?
Excelは大量のセルにアクセスする際に、 一度にアクセスすれば速いんだけど、 データが多すぎるとExcel側がメモリ不足エラーを起こすんだよなぁ。 エラーを起こす明確な閾値があるわけでもないので、 1セルずつアクセスする事にすると、遅くなる。
Rangeオブジェクトの設計思想が分かってない人って多いみたいだね。 つーか俺もweb上の情報だけでやってたから触りだして2年ぐらい意味が分からなかったw
968 :
デフォルトの名無しさん :2008/08/22(金) 00:28:57
Rangeオブジェクトって突然なんだ?
>>966-967 の流れなら突然ではないと思うが、
Rangeオブジェクトの設計思想ってなんだろうな?
単に、Excelの範囲選択時の操作と同じ処理をするための物だと思ってたけど。
970 :
デフォルトの名無しさん :2008/08/22(金) 00:50:05
>>957 string.Equalsはオーバーライドされてインスタンスの比較ではなく
文字列の比較をして返すから。
そうじゃなきゃ、if(s == "abc")なんてのもできなくて不便でしょうがないだろ。
EqualsじゃなくてわざわざReferenceEqualsを使ってるようだが
972 :
デフォルトの名無しさん :2008/08/22(金) 07:44:37
このメソッドは非同期です。ってヘルプに書いてあったけどどういう意味でしょうか?
自己を含むクラスを作った場合どうやって一個上のにアクセスするのですか? class hoge { public ArrayList list = new ArrayList(); public hoge hoge_1; public hoge hoge_2; public hoge hoge_3; public hoge hoge_4; public hoge(int num){ if (num > 1) { hoge_1 = new hoge(num/2); hoge_2 = new hoge(num/2); hoge_3 = new hoge(num/2); hoge_4 = new hoge(num/2); } } } hoge hoge_top = new hoge(64);
C#でパスワードを安全に保管する場合どう暗号化すればいいのでしょうか? デコンパイルすれば秘密鍵なんてすぐバレると思うのですが。
>>974 要件によって様々だが、定石的にはソルト付きのハッシュを使う。
Rfc2898〜を使うのが簡単でかつ良い。
可逆の暗号化使って鍵をハードコーディングなをて普通はやらない。
生のパスワードの復元が必要なら、DPAPIラッパーでも使っとけ。
“一個上の”…・・・? class Hoge { public Hoge hogeParent; public Hoge hoge_1; public Hoge(int num, Hoge parent) { hogeParent = parent; if (num > 1) { hoge_1 = new Hoge(num / 2, this); } } } Hoge hoge_top = new Hoge(64, null);
>>976 >>977 ありがとうございます。DPAPI使うのが一般的っぽいですね。
(P/Invoke叩かなくても
System.Security.Cryptography.ProtectedData使えばいいのかな?)
SSHAも面白そうだし知識の幅が増えて助かりました。感謝です。
どうやって暗号化するのか分かってて言ってんの?
実行ファイルに秘密鍵を埋め込むという発想が既に
秘密鍵を暗号化する秘密鍵を暗号化すればいい!
>>984 1.秘密鍵と公開鍵を作る。
2.秘密鍵を公開鍵で暗号化する
3.暗号化済み秘密鍵を仕込む
4.秘密鍵を手に入れるには、暗号化された秘密鍵を暗号化された秘密鍵を(ry)秘密鍵でデコードした秘密鍵でデコードした秘密鍵でデコードすれば手に入る
5.ウマー?
>>984 ていうかまあ普通にやってたりすることだよね
別マシンに持ってかないデータならとりあえずDPAPI サーバなんかで複数マシンで共有したりするならconfigの暗号化かな
次スレ立てるやつはスレタイちゃんと直せよ
そういや # をスレタイに使えるようになったんだっけ
>>990 乙
おいらの痛恨のミスもあと数レスでおさらばだぜ
>>983 てゆか、商用目的のアプリ(といってもソフト自体はフリーですが)
をデコンパイルして読んでたら秘密鍵が埋め込んであるのを見つけたんで、
疑問に思って
>>974 書きました。
[プログラム板]ってわざとじゃなかったのかw
ていうかDPAPIを使おうがデコンパイルされて解析されて同じ手順で 鍵を入手することが可能なような気がする。
>>995 なんで?コードの情報をもとに秘密鍵つくってOSに保持させるんだよな?
OSをクラックするスキルがなきゃとても無理じゃね。
>>992 それってほんとにその鍵だけでパスワードとかが復元できるようなものなの?
ライセンスキーとかみたいにばれたらまあ仕方がないわってものとか、
あるいは追加のキー(それだけでは復号できないもの)とか、
そんなのじゃなくて?
ああ、まあなんちゅうの、同じユーザでログインしてたら当然復元できるわな。 要は何を目的にしてて、何から守るためのものか、って話になる。
100
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。