507 :
デフォルトの名無しさん :
2007/12/13(木) 04:30:30 例外をcatchするとデバッグしにくいという問題は、 IDEのメニュー「デバッグ」「例外」で対応できる。 基本的にはSystem.IO系やNullReferenceExceptionの「スルー時中断」にチェックを入れる。 あとは発生したベースで必要な例外を追加していけばいい。
508 :
デフォルトの名無しさん :2007/12/13(木) 04:34:09
今は特に言う事無いけど何か思いついたら次からここに書き込むよ
スルー時中断ワロタ
にゃるるで言及されてたC#のお偉いさんの話は本当なのだろうか。 もしマジだとしたら、ガクブルもので正直この先も使うか考えてしまう。
何の話か言えよ
ヘジたんが AOP 嫌いだとかクエリ式嫌いだと書かれてたアレ? そんなガクブルな話書かれてたか?
>>513 いや、だから、常識なのに何をガクブルしてんの?と。
クエリ式もあれはひどいよな 使い物にならん
いやいや、クエリ式は使い出すと便利でしょうがないよ。
>>516 LINQのほとんどの演算子が使えないのに?
>>517 どういうこと?
「LINQ to SQL では LINQ の標準クエリ演算子を全部サポートしてないのに?」といいたいのかな?
>>518 拡張メソッドでは呼び出せて、SQLにも使えるのに
クエリ式では使えないものがいっぱいあるだろ
>>519 ああ、そういうことね。
まあ、それでも、let とか2重 from とか使うときはクエリ式便利。
from x in a
from y in b
select new { x, y };
とか、クエリ式使わないと SelectMany 使って書くの大変よ。
正直letとか使われるとコードがわけわかんなくなる 拡張メソッドでいいじゃん
や、let はむしろ便利だろ il からコード起こしてみたらすごいことになってたけどw
クエリ式この世からなくなってくれればコード読みやすくなるのに
csvファイルを読み込んで数値計算をさせたいのですけれど どうやったらいいのか分かりません。 条件式書くのとcsvファイルを読み込んでそのまま出力することはできます。 むしろそれくらいしかできない初心者です。 アドバイスお願いします。
>>524 そのまま出力できるならその値を出力せずに計算すればよかろ
>>525 普通に計算式を書いてから、その後出力する処理を書けばいいということでしょうか?
>>527 あああああ そうだったんですか。
難しく考えすぎてました。ありがとうございました。ものすごく助かりました。
529 :
デフォルトの名無しさん :2007/12/14(金) 08:35:40
てもその計算式をどうやって解析するかは想像できてるか?
530 :
デフォルトの名無しさん :2007/12/14(金) 08:36:06
天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。 天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。 天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。 天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。天パ男死ね。バケモン。身障。気色悪すぎ。ボーズで天パ隠すなよ。
WinAPI の DllImport やら、 const int WM_HOGE みたいなのをC++ヘッダファイルから 自動生成するようなツールってないの? VB6 にあったやつみたいな。 それか、WinAPI をひたすらラッピングした .NET Frx 向けライブラリ。
>>532 おおサンクス。ググっても DllImport の解説やら、WinAPI を使ったサンプルばっか出てきて
困ってたんだよね。これで幸せになれそうだ。
たしかアドインでPInvoke関連のヤツがあったはず。 具体的に何を補助してくれるのかしらんが、余裕があれば試してみたらいい。
隔離スレなのにずいぶん機能してるな
オライリー プログラミングC# プログラミング Microsoft Visual C# 2005 言語編 C#の勉強をはじめる場合、どちらがお勧めですか?
難しくなさそうなのをちょっと読んで あとは使ってれば分かる
>>537 すでにほかの言語が使えるなら、オライリーが無駄な説明がなく理解しやすい。
下はシラネ。ただ、言語編とかつくのは他のも読む前提で書かれてることが多い。
後、@itのC#入門改訂版ならタダで読める。正直助長な部分もあるが、本を買う前に一度見てみて、
それだけでは不十分だと感じてから本を買っても遅くないんじゃないか?
ってかMSDNとかの Microsoft 様のドキュメント読めば十分すぐるだろ・・・
>>540 リファレンスには十分だが、携行できないしいろんな意味で不十分
「C#の勉強を始める場合」だからな。
>>539 C++は使えるのとJAVAの文法の基本は分かっているので
オライリーにしてみます。MSの本は高すぎるのもネックです。
>>540 基本を押さえたら適宜参照してみます。
>>542 正直、C++ と Java 使えるなら MS のドキュメントだけで十分だと思うけど。
MSDNの ・C# プログラミング ガイド ・Java 開発者のための C# プログラミング言語 あたりに一通り目を通しとけば、まあいけると思うけどな。 どうしても紙媒体が好きならオライリーのC#いいと思うよ。
以外とWebですますっていう人間多いのか? 俺は新しい言語を勉強するときには、とりあえず一冊本を買うんだが、 Webだけだと記憶しづらくないか?
msdnはローカルに入れますよ
>>547 ごめん、Webっていうのは言葉のあやで、デジタルデータでってこと。
あんまり紙資源を無駄にしたくないから本は買わない ウラニウムとどっちが無駄かは知らんけど
「Web ですます」というより、C# は「Web ですむ」。 それくらい日本語情報充実してる。
どっちにしろ公式のドキュメントには目を通しておく必要があるし、 MSの物の場合それだけで十分なことも多いからなぁ・・・
俺の場合基本的に本ですべてすませて、必要なところだけ公式のドキュメントを見る。
俺も情報をつかむ程度ならweb、じっくり勉強するなら本だな。 論文とかもできるだけ印刷して読む・・・あ、単純に紙媒体が好きなだけかな?結局好みの問題かも。 でもディスプレイとずっと睨めっこするのは辛くない? というかMSDNは重いのが・・・ 動的生成なサイトってイライラが溜まって好きじゃないんだよなw
>>553 禿胴。昔はモニター越しの情報も紙媒体も一緒だと考えてたんだが、
長年やってるうちに結局紙媒体の方が覚えやすいっていう結論になった。
オライリーの本は二部が難しいな。 のマーシャリングやらアセンブリやら属性、シリアル化とか わけわからん。 ここはC#というよりは.NETの世界なんだろうけど。
何らかの言語触ってりゃC#なんか一日で書けると思うが まークラスライブラリは必要になったときに引くが
558 :
デフォルトの名無しさん :2007/12/15(土) 01:07:27
1日もかかるかよ
>>557 は本当に一日で習得できた?
プログラムを動かすだけならコピペでも出来るし、
それに一通り使えるようになった後ではいままでやってきたことがひどく簡単なことだったと思うもんだよ。
何らかの言語触ってりゃ コボラー 絶対無理w まあ、かけるだけならアホプログラムでも書けるといえなくもないから、 1日でとか短時間を自慢げに言うのって馬鹿にしか見えんよね。
このスレらしいくだらない話だなw
>>560 C++やらJavaやらやってたんで、楽勝だったよ。
文法理解しただけで「習得」したと思っちゃう人いるよね。
何らかの言語と C++やjavaじゃぜんぜん条件が違うわけだが。 まあそんなことはどうでもいい。 できるって言うレベルが人によって違いすぎて何の意味もないわな。
C#なんて、2.0あたりまでは、メジャーな言語の寄せ集めみたいな文法で、 入門書をパラパラと読んで「ああ、こういう言語ね」と思えないようなヤツは不勉強すぎ。
言語自体の割合は小さくなってフレームワークなんかの割合がでかいって 偉い人も言ってたのにね。
1.1まででの壁はデリゲートぐらいか 2.0は匿名メソッド(のスコープ) 言語としてはこじんまり
あ、こういう言語ね 書ける ここでいうマスター はいはいなんの意味もないね。 ほんとに言語固有の部分は少ないしね。 まあそれでも仕様のボリュームはそれなりにあるけど、 ごく基本的な部分だけでもプログラムは書けるしな。
そんなんだから、ライブラリでも設計実装させたら とんでもないことになったりする。
深く考えずに、細かいところを検証せずに やたらマニアックなことする奴も氏ね、 コードは複雑で冗長でそのくせ穴だらけでたいして役にも立たない、 ああもうトラウマだぜ。
573 :
デフォルトの名無しさん :2007/12/15(土) 11:30:57
みんなすごいんだね。 俺なんて、他人のサンプルコード見ては 「なんだよ、このアトリビュート。どうやって学んだんだよ」 「このプログラムの設計ってまず何からどうやって作ったんだ?」 ってな感じで右往左往して C言語で作ったプログラムをC#で組んでみようと思っても 上手くいかないし。 よし、JAVA宿題スレにそのプログラムの問題投稿して 解いてもらって、そこからJAVA経由で理解しようと 思ったけど、返ってきた答えが答えになってない 不完全なプログラムだったりして、どーしたもんかと考えたり・・・ 基本構文はすぐに解ったけどオブジェクト指向が出来てない 自分に辟易する。
それは単に自分の頭が悪いだけで、 みんながすごいわけじゃなかろう。
>>573 あんまりふらふらせずに一つの言語に専念してみたらどうだろうか?
ここで上がってる多言語使える人間も、基本的には一つの言語を十分に学んでから、
その言語を起点して他の言語を学んでる人が多いはず。
複数の言語を同時に習得しようとすると、文法やメトリックを混同してまったく勉強できないことも多い。
俺は、とりあえずjavaが使えれば、基本的なOOP的言語は文法の違いだけですぐに覚えられると思う。
多言語を習得するというのは、実はそれほどすごいことじゃない。 文法とライブラリを使用する程度なら、その言語の主要概念(OOPとか)をすでに習得していればそれこそ丸一日あれば十分。 だから、Javaさえ覚えられればCやC++、C#は使えるも同然だし(言語固有の習慣や文法を除いて)、 言語を習得したっていうのは、言語の設計概念を理解してるかということに直結すると思う。 だから、一日で十分とかいってる人間も、似たような概念で構成された言語を、 今まで覚えた言語の概念を流用して使えるといってるわけで、 関数型言語をまったく知らない状態から、haskellを一日で自由に使えるわけがない。
>だから、Javaさえ覚えられればCやC++、C#は使えるも同然だし(言語固有の習慣や文法を除いて) 無茶ゆうなw ってか、言語固有の習慣や文法を除いて ってどういうこったよ?それはどう使えるっていうんだ? C++まともじゃなくてもやったことあるなら そんな台詞はどうやっても出てこん。
java屋がC#始めると変なとこだけ潔癖症でかなわん。 C#の文法でjavaを書く癖が直ってくれない。
あるある、チェック済み例外がうじうじとか言い出すよな。
>>573 そうだね。
こんだけオブジェクト指向が広まってるのに、たとえば、
「C一筋で10年、それ以外にはまったく興味もなくてすごしてしました。
いまさらC#やJavaなんてできません」
みたいなPGって激しくオワットルね。
C++勉強してればオブジェクト指向の概念自体はだいたいわかるんじゃないのかな。 時歳に使いこなせるかどうかは別だけど。
C++よりゃよっぽどオブジェクト指向部分に集中し易いjavaでも 結局思い切り人次第だからな〜
>>577 同意。C++の複雑度はJAVAの比ではない。C++を知ってる人間なら
JAVAはえらく簡単に覚えられるが、その逆は真ではない。
C++は手動でメモリ管理しなきゃならんし 標準ライブラリも足りないものだらけだし 言語自体にも罠がいっぱいある
>>584 メモリ管理なら、今やスマートポインタを使わない
なんて考えられない。boostがよりいっそう充実して
ライブラリが進化することを期待する。現にそうなって
きている。
いい加減すれ違い。
ここを隔離スレと知っての発言か?
いや、おまいらまずC#が生まれた背景を理解しろよ。一言だとJavaのパクリだがw 「C#はC++をモデルとしてプログラマーを面倒で煩雑な作業から開放するために 作られたより効率的開発のしやすい言語」でC++プログラマーが開発者なんだよ。 つまり、C#はC++からメモリ開放や宣言の煩雑さを省いたオートマバージョンなんだよ。 つまらないCopyとCloneの違いなんてC++プログラマーは一瞬で理解できる。 それを勘違いしているC#ヲタはC#はすばらしいと思っているが、 C#でC++より優れたものを作れるかといったら答えはYESでもありNOでもある。 「何に優れたものか」によって尺度が違うからな。 C++⊃C#、VB.NET これは間違いない。C++を極めればどんな言語でも理解できるよな。 ただ、C++を極めると簡単に言ってもSTL、ATLからUNIX系、MS系や 地方言語のマクロ、コンパイラ、デバイスのインターフェースからOS制御、途方もないボリュームだ。 OSを記述する言語としてのC++ではなく、業務アプリを作るC++を学ぶなら 表面だけなら言語経験より開発手法や設計思想なんかの方がよっぽど重要なのかもな。 はい長文ゴメンなさ〜い。
痛い
C#にはあってC++にはない致命的なもの 一つのクラスを一つのソースファイルに書く機能 リフレクション object型 クロージャ 式ツリー 自動シリアライズ そしてもちろんGC C++にあってC#にない致命的なもの なし
テンプレートがないのは重症だろ
素晴らしい!これぞ隔離スレ
ファイルのインクルードは? あれがないおかげで、プロジェクト全体から見えるシンボル(#defineで定義するやつ) を定義しようと思ったらプロジェクトのプロパティーでチマチマやらんといかん。 面倒だし明示的じゃない。
C++にあってC#に無い物はわざわざ削った物ばかり
>>593 何を言ってるのか分からん
#defineをプロジェクトのプロパティでどう代用するんだ
C#で#defineはそんな使わんと思うんだが マクロないんだし
>>596 この機能のことであればひとかけらも致命的ではないだろ
お前のコードはいろんなシンボルを使った#ifだらけなのかもしらんが
プロパティで設定すればいいだけの話だ
C# でも #if SYMBOL はやるけどもな。 #define は、 マクロ型関数は使うな、 プロジェクト全体に渡るシンボル定義はコンパイラオプション+プロジェクト設定でやれ ってこと。 プロパティはあんまり関係ないと思うが。
>>598 たしかに致命的ではないね。
その点は申し訳ない。
つ C++/CLI
>>590 おまえは本当に痛い。
リソースの乏しい久組み込みではGCが激しく邪魔になる。
一生Winアプリでも作ってろカスが。
まるで組込用途でC#使ったことがあるような言いぐさだなw
まあ組み込み用途ならCだし
>>603 適当に言いました。
すいませんでした。
C#のジェネリックは実体化しなくても型チェックされるから、 肝心なところで使い物にならない。
型のチェックがガチガチなのはむしろ好きだがね ちょっと間違うとコンパイルも通らない
CとかC++は何でもかんでも値型にキャストできるのが気持ち悪い。 なんでchar[]とかがintにキャストできるのかと。 ポインタはパフォーマンスアップに繋がるのはわかるがこれだけは 気持ち悪くてしょうがない。
C#の将来は明るいですか? Windowsのソフトを作る予定がなくてもC# を覚える必要があるか。JAVAとどっちを 勉強すべきか。
基本的にC++はメモリ操作が特徴。 型なんてただのメモリの入れ物としてしか認識してないから。
>>611 CはともかくさすがにC++にそれは言い過ぎのように思う
>>611 仮想関数があれば仮想テーブルや型情報、vptrもある。
ただの入れ物とは思えない。
Windowsのソフトを作る予定がないならC#使ってもしょうがない 作る予定があるソフトに必要な言語をやるといい
>>615 Linuxに移植されたら?
世界は変わるかも?
Monoのこと、ときどきでいいから思い出してください
>>617 しょっちゅう使ってるよ
ペンケースに入ってる
そういえばC++にはbool型をとる安全なifもないな
安全 そのようなものはC++の思想に反するのだよ うそですすみません。
むしろif文にbool型しかとらないJava/C#が異端なんじゃねーの? 俺もbool型オンリーの方が好きだが、スクリプト言語してるとそうじゃない方が多い気がする。
型に寛容な言語だとboolだけってわけにもいかないから
D言語は bool b = true; if(b){} // これはいけるけど、 if(b = true) {} // これはだめだお
動的型じゃ意味ないわな
>>623 やるならここまできっちりやるべきなんだろうな
>>623 Dはbool以外の型の値もifに与えられるけど、
代入式を取れないってのは革新的だよね。
Dはよく知らんが while ((line = reader.ReadLine()) != null) こういうのはOKなの?
>>626 メソッドのリターンコードで条件判定するようなプログラミングが簡単に
表現できない欠陥品だろD言語は
何を言ってるの君は?
bool以外の値をifに与えられちゃダメだと思うがね boolの代入は規制すべきだと思う
そういった人それぞれのプログラミング思想を具現化したものがそれぞれの言語な訳です
だな
C言語(C++)のDLLを、C#と連携を取ろうと思いました。 char*の受け渡しで、詰まるところがありました。 以下のコードで、環境により、エラーが出たりでなかったりします。 (現在、エラーが出る環境がないため、エラーメッセージ失念……) --------エラーとなるコード C#側(Form1.cs)--------- [DllImport("Hoge.dll")] extern static StringBuilder GetHogeMessage(); private void Form1_Load(object sender, EventArgs e) { StringBuilder msg = GetHogeMessage(); this.label1.Text = msg.ToString(); } -------エラーとなるコード CのDLL側(Hoge.dll)---------- char msg[255]; extern "C" __declspec(dllexport) char* GetHogeMessage() { sprintf_s(msg, 255, "ホゲホゲプー"); return msg; } -------------------------------------- 以下のように、ネットで、よく見かけるコードに変えましたら、 エラーが出なくなりました。 続きます。
634 :
デフォルトの名無しさん :2007/12/26(水) 02:04:57
--------正しく動くコード C#側(Form1.cs)--------- [DllImport("Hoge.dll")] extern static void GetHogeMessage( StringBuilder name, int len ); private void Form1_Load(object sender, EventArgs e) { StringBuilder msg = new StringBuilder(255); GetHogeMessage(msg, 255); this.label1.Text = msg.ToString(); } -------正しく動くコード CのDLL側(Hoge.dll)---------- extern "C" __declspec(dllexport) void GetCurrentName(char* msg, int length) { sprintf_s(msg, length, "ホゲホゲプー"); } 私のよく知る Delphiでは、string ←→ char*(PChar)間では、 コンパイル時に自動で変換コードを入れているのが、 デバッガで逆アセンブルすると、わかります。 同様に、動作を知ろうと、Reflectorで、 ILに変換したのも読んでみたのですが、コンパイラマジックなどなく、 理解にいたりませんでした。 C#は(というか、MSIL?)、内部動作的には、char* → StringBuilderでは、何をやっているのでしょうか? 私は想像では、StringBuilder.pChar のような非公開のプロパティに、char*を代入して処理しているのでは?と思っています。 そうなると、上記のエラーとなるコードでは、インスタンスを生成していないために、 強引なキャストが起き、StringBuilderとして処理はされるものの、 msg.ToString などで、エラーが起きることがある、と。 この辺の、動作に関するドキュメント等ありませんでしょうか?
635 :
デフォルトの名無しさん :2007/12/26(水) 02:05:54
コードミスりました orz --------正しく動くコード C#側(Form1.cs)--------- [DllImport("Hoge.dll")] extern static void GetHogeMessage(StringBuilder name, int len ); private void Form1_Load(object sender, EventArgs e) { StringBuilder msg = new StringBuilder(255); GetHogeMessage(msg, 255); this.label1.Text = msg.ToString(); } -------正しく動くコード CのDLL側(Hoge.dll)---------- extern "C" __declspec(dllexport) void GetHogeMessage(char* msg, int length) { sprintf_s(msg, length, "ホゲホゲプー"); }
マーシャラがStringBuilderが持ってるバッファのポインタをchar*として渡すだけ。 char*を返す関数なら普通にStringで受ければいい。
638 :
デフォルトの名無しさん :2007/12/26(水) 03:00:09
>>636-637 サンクス!!
アンマネージドと、マネージドの相互変換をマーシャリングというのですね。
Buffers のサンプル
http://msdn2.microsoft.com/ja-jp/library/x3txb6xc (VS.80).aspx
>>637 の文字列のところに書いてありました。
文字列の変更の可能性がある場合は、StringBuilderを使うのはあってるみたいです。
引数などで渡した場合、StringBuilderのバッファのポインタが渡されるだけなんですね。
アンマネージドで確保されたchar* を返却値としてもらう場合は、
自動的に、解放されるのを防ぐために、IntPtr でアンマネージのままもらって、
Marshal.PtrToStringAuto で、stringに変換すればいいのですね。
わかりました!
ありがとうございました。
.net のVBコードをC#に変換できるツールってないですか?
ありますよ
ありがとうです
ツールでVBコードをC#に変換して 勉強がてらいじってるけどさっぱり分からん c++でネイティブ書くなんて一生無理だなこれは
それはない プログラミングが上達しない才能が無い限りいつかできるようになっちゃうよ
>>638 char*からなら、PtrToStringAnsiではないのか?
645 :
デフォルトの名無しさん :2007/12/28(金) 01:18:07
こんばんは。質問があります。 [管理ツール]−[データ ソース (ODBC)]-[ユーザDSN]でデータソースの設定を行う際、 表示される画面(例えばアクセスの場合だとデータベースの選択画面)をプログラム上で 出すにはどうすればいいのでしょうか? ヒントか参考になるサイトでもいいので教えていただけないでしょうか。 よろしくお願いします。
GetLastErrorをHRESULTに加工して それから例外を作る装備はないですか?
throw Marshal.GetExceptionForHR(Marshal.GetLastWin32Error());
LastWin32ErrorはHRESULTじゃないと言うに GetHRForLastWin32Error
>>643 すげぇ才能だなww
逆にそれは見てみたい
>上達しない才能
論理的思考を拒否する人。 感情や直感が最優先の人。 自分の思いが総て正しいと思う人。(これはちょっと微妙か 実際居ると思うぞ。
急に何の話してるの?
654 :
デフォルトの名無しさん :2008/01/09(水) 05:55:52
da.Fill(dt)で取得したデータの内容をColumnNameでダイレクトに取得したいのですが foreach以外に良い方法があるでしょうか?
657 :
655 :2008/01/14(月) 00:05:49
>>656 理解が足りてませんでした・・
ありがとうございました
質問です SizeChangedイベントをハンドルしてInvalidateを呼び出して画面全体を再描画したいんですが 領域全体が無効化→背景色クリアが入ってしまい、その後に全体を書くので偉くちらつきます。 で、この背景色クリアを無効化したいんですが、どのようにしたら良いですか? 背景色クリアに関してはWinAPIで叩いてたころは確か ブラシを入れないとか、Invalidateの引数でRedrawするかしないかを指定できたと思うんですが… よろしくお願いします。
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer,true); と設定してダブルバッファリングすればいい
いやダブルバッファするかどうかは別問題でしょ。
>>658 についてはResizeRedrawを有効にすればOKだと思うけど。
なんか
>>658 はあまりよくわかってなさそうだから一応補足すると、
これは要するにいちいちInvalidateしなくてよくなるって意味ね。
用途によって違うだろ
662 :
658 :2008/01/14(月) 13:24:59
>>660 ResizeRedraw=trueにしても駄目でした。
おっしゃるとおり、いちいちInvalidateしなくてよくなるんですが、
単に勝手にInvalidateを呼び出しているだけみたいですね。
結局ですが、多分.NETのInvalidateの実装が
InvalidateRect( m_hWnd, NULL, TRUE );
みたいにされちゃってるんだと思ったんで、
直接user32.dllのInvalidateRectをDllImportして
bEraseをFALSEで呼び出したらブラシのクリアが無くなりました。
ご返信していただいた方ありがとうございました。
>>658 なにもしない OnPaintBackground は?
664 :
658 :2008/01/14(月) 16:11:11
>>663 .NET的にはそれが一番よさそうな実装方法ですね…
ありがとうございます。そちらのコードに修正します。
WM_ERASEBKGND をいじった事なかったのか
すみませんが教えてください。C#とC++は、.NETで行っても処理速度は あくまでも同じなのでしょうか?それとも、C++の方が圧倒的に早いのでしょうか? C#とVBでは処理速度は描画も含めて同じだと思いますが、C++では直接 Win32APIで動かしていて高速動作するようになっているのでしょうか? よろしくお願いします。
>>666 .NETが扱えるのはC++ではなくC++/CLI
C++/CLIが吐き出す中間コードはC#,VBと同じ
よって速度は同じ
C++/CLIはネイティブコードを埋め込める
>>668 C#もunmanaged使えば同じじゃないの?
同じ内容を書けば同じ速さになるはずということで
671 :
666 :2008/01/17(木) 11:21:15
>>667-669 解説ありがとうございます。
たとえば、Windowsのエクスプローラはフォルダのフォーカス移動に伴う
ファイル表示でもものすごく高速に実行され、画面の描画もめちゃくちゃ
瞬時に行われ、ノートPCなどの描画が比較的遅いPCですと.NETの
Formアプリケーションなどとはけっこう速度差を体感します。レインボウ
のような現象も顕著に出ていて、ネイティブのアプリケーションとでは
ものすごく遅い感じが否めませんでした。
こうした差は、C++/CLIを使って、すべてをネイティブコードにコンパイル
してしまうと、たとえばエクスプローラ並みにすばらしく高速で動くように
体感できるようになるということなのでしょうか。(長くてすみません)
>>669 C#でunmanagedは使えないだろ
>>671 それはWindows.Formsが遅いだけ。
C++/CLIを使っても同じGUIライブラリを使う限り、もっさりするのは換わらない
>>673 なるほど、そうだったんですか。
ということは、C++/CLIで、Formsを使わずに何かネイティブのGUI処理をする
方法を使う(MFCでしょうか、よくは知らないのですが)などすれば、
エクスプローラ並みの高速処理が実現できるということでしょうか、
そしてそういうことはC#やVBでは実現できないと・・・、この辺がよくわかりません、
よろしくお願いします。
>>674 C# と GDI+ でも、あんまり Forms の世話にならないで自前で描画する
大型のコントロール等書いて使えばそこそこ高速になるよ。
下手に Forms で UI 書くより、ブラウザ埋め込んで Ajax でもした方が
高速になるケースもあるだろうし (ブラウザはレンダリングが結構速いから・・・)。
>この辺がよくわかりません
「ネイティブ」の意味が分からないということ?
Forms はなんであんなに重いのかね?
677 :
デフォルトの名無しさん :2008/01/17(木) 12:37:29
>>675 たびたびすみません。
>自前で描画する大型のコントロール等書いて
これは要するに、Paintイベントなどでの処理を描くということでしょうか。
>「ネイティブ」の意味が分からないということ?
「自前で描画する大型のコントロール等」という場合に、そこに.NETFramework
のクラスで描画をするだけでよくて、いちいちAPIを使うことなく高速化できるという
ことでしょうか?
678 :
666 :2008/01/17(木) 12:41:00
名前入れるの忘れました。 そのようにしてコントロールを高速化した場合、たとえば現在Form の右下を つまんでリサイズすると、Formのサイズ変更がやたらと遅くてボーダーの移動が ぱらぱらと目に見えて動きます。こういったことも高速になるでしょうか?
GDIのAPIを直接叩くGraphicsクラスみたいなのは作ったことあるぜ
たとえばTextBoxを100個WinFormに貼り付けて使うより、 普段はTextBoxの「ハリボテ」を100個描画しておいてユーザーがマウスポインタで クリックしたときだけ本物のTextBoxを該当位置にひとつだけ表示するような コントロールを自作した方が早いってことじゃない? でもこの手のコントロールの自作ってかなり面倒なんだよね。 情報すくないから手探りでいろいろ調べる必要があったり。
>>678 そう。
同時にOnPaintBackgroundで一瞬背景色で塗られるなどのUI 的に不快な動作も直す。
Panel を Dock させてあれこれやるより、OnSizeChanged 等で自前でレイアウトする方が速いし。
ただ GDI+ の遅さは非力なPCでは如何ともしがたいところもあるので、低スペックPCでも
超軽快に動くようにしたいなら C++ でネイティブでやるより無いと思う。
682 :
666 :2008/01/17(木) 13:03:35
>>679-681 いろいろご指導ありがとうございます!
>>680 >同時にOnPaintBackgroundで一瞬背景色で塗られるなどのUI 的に不快な動作も直す。
あの動きも改善方法があったんですね、うれしいです。自分でも実装できる
かどうかわかりませんが勉強してみます!
>Panel を Dock させてあれこれやるより、OnSizeChanged 等で自前でレイアウトする方が速いし。
このPanelのDockやDocking機能のコントロ-ルは使っていました。
そうすることなく自分でコントロールの移動やリサイズをさせた方が早い
のですね。いまからそれやると大変かとも思いましたが、今後の参考に致します!
勉強になります、ご指導ありがとうございました!!
683 :
666 :2008/01/17(木) 13:07:33
>>682 (訂正)
すみませんリンク先まちがえました。訂正
>>680 →
>>681 >ただ GDI+ の遅さは非力なPCでは如何ともしがたいところもあるので、低スペックPCでも
>超軽快に動くようにしたいなら C++ でネイティブでやるより無いと思う。
この件も頭に置いておきます。どうもでした!
フォルダのタイムスタンプについて教えてください。サブフォルダを追加してそこに ファイルを作成して編集したりしてあるフォルダの中身が変化していましたが、 なぜかそのフォルダのタイムスタンプがその変更よりも前のままになっていました。 こうならずに、更新日時が反映されている場合もありました。これは何か更新される ために必要な条件のようなものがあってそれが異なっているためなのでしょうか?
そりゃディレクトリエントリが更新された時刻だもの
686 :
684 :2008/01/18(金) 15:57:46
>>685 そうだったのですか、ということは内部のサブフォルダ内の何かのファイルが変更された
としてもそれの時刻は繁栄されないのですね。わかりました。
すみませんがもう一つお願いします。
アプリケーションのアイコンを探すときにレジストリ内のDefaultIconキーの値のところに、
次のようにマイナスの番号が入っている場合、shell32.dllのファイルの中の番号としては
使えないのでしょうか?kernel32.dllの LoadLibraryExA で検索してアイコンを見つける
ときにも使えるのでしょうか?
HKEY_CLASSES_ROOT\VBSFile\DefaultIcon\"(default)" = "shell32.dll,-298"
HKEY_CLASSES_ROOT\txtfile\DefaultIcon\"(default)" = "shell32.dll,-16"
(これでサウンドの場合の C:\WINDOWS\system32\wmploc.dll,-734 の-734 を
そのまま使ったところ、音符マークのアイコンとは別のものが来たのでした)
わからんが、wmploc.dllを開いてみたら 734 に音符のアイコン入ってたけど。 マイナスは別の意味を持たせてるのかも?
688 :
684 :2008/01/18(金) 17:24:42
>>687 あ、すみませんでした、一つ間違いがあることに気がつきました。とはいうものの、
プラスとしてやってみたもののそれでも取ることができませんでした。なんだろう、
映画のフイルムの絵のようなアイコンなのですが・・・。まずは、そのアイコンの
ビューワを探して見てみます、ありがとうございました。
アイコンはVisualStudioでDLL読んでみたんだけど、 EEだとリソースは無理か
>>686-687 0以上の値は、0からの連番で何個目という指定(シェルのアイコン指定のダイアログの順番)。
負の値は、絶対値がリソースIDを表すという指定。
691 :
デフォルトの名無しさん :2008/01/18(金) 19:15:16
>>690 あーそうだったのですか、わかりました。それでもう一度やってみます、
どうもありがとうございました!!
692 :
691 :2008/01/18(金) 21:20:38
>>689-690 アイコンの取得に成功しました、ありがとうございました。助かりました!!
int / int で小数点が出てこないのはなんでだぜ?
その方が速いから
>>693 int/intの結果はintになると規格で決まってるから
LOG4NETで設定ファイルを使わずに、ソース上で出力先やAppenderの指定をできる方法ってありますか? クライアントアプリケーションとして扱う場合に、ユーザに勝手に設定を弄られたくないから LogManagerでApp.Configの設定を読むような方式にはしたくないのです。 ログ出力クラスを自作したほうが早いですかね?
そのまんまコードで初期化すりゃいいんでは?
698 :
696 :2008/01/20(日) 03:49:16
>697 ログメッセージを出力するためのILogインタフェースを持った インスタンスを取得するには、LogManagerクラスから取得する しかないようなんですよね。 LogManagerクラスからはRepositoryやAppenderを取得できても、 設定はできないので、どうしたらいいのか分かりません。 RollingFileAppender appender = new RollingFileAppender(); appender.AppendToFile = true; appender.File = @"C:\test.log"; appender.Layout = new PatternLayout("%d %5p %c{2} - %m%n"); RootLogger root = new RootLogger(Level.Debug); root.AddAppender(appender); root.Log(Level.Debug,"tset", new Exception()); 以上のコードでログが出ないか期待しましたがダメでした...
>698 log4netのソースを直に書き換えて埋め込んじゃえばいいんじゃない?
701 :
デフォルトの名無しさん :2008/01/20(日) 20:53:54
アホちゃいまんねん
702 :
デフォルトの名無しさん :2008/01/20(日) 20:59:58
パーでんねん
703 :
698 :2008/01/20(日) 23:56:26
>699 なるべくOSSのモジュールはソース変更したくないんですよ。 ライセンスに従って公開しなきゃいけなくなっちゃうし。 公開するだけならまだ変更部分だけで済みそうですが、 公開するための環境を維持しておかなきゃいけなかったり、面倒です。
>703 log4netはアパッチライセンスだから融通が利くよ。
ParallelFXのParallel.Forで実行されるスレッド数はいじることができますか?
>>705 System.Threading.Tasks.TaskManagerPolicy
のコンストラクタで、minThreads, idealThreads, maxThreads を指定可能。
FlowLayoutPanelにコントロールを追加しているのですが、 下記のようなコードだと一瞬ちらつきます。 FlowLayoutPanelにBeginUpdate、EndUpdateのような描画を一時止めるようなメソッドはないでしょうか? Panel.BeginUpdate;←のようなものありませんか? Panel.Controls.Clear();←ここでクリアしてる為、一瞬まっさらになり、ちらつく for (int i = 0; i < max; i++) { Panel.Controls.Add( コントロール ); } Panel.EndUpdate;←のようなものありませんか?
節穴? SuspendLayout/ResumeLayout
PictureBoxの非同期読み込みみたいに、画像の読み込みを途中でキャンセルしたり 読み込み状況をモニターできるようにしたいです。 Image.FromFile等ではそのようなコールバックを指定できないようです。 どうやればいいのでしょうか?
ためしもしないで適当に書くと Image.FromSteamに非同期Streamを渡せばいいんじゃね
>>710 Streamを自分で実装してReadの中でゴニョゴニョ、ってことでしょうか。
そういうやり方しかないんかなあ。
画像のデコード程度、キャンセルしたくなるほどの時間もかからんと思うが
Image.FromStreamするとImageが生きてる間はStreamも生きてなきゃダメなのか… と思ってKB309482見て試してみたけど、アニメーションGIFだとダメだった…
DataSetを使ってレコード単位にDBを操作する場合に、 DataSet.DataTable.Rows[i]["カラム名"] のような記述が必要になりますよね。 (DataGridのDataSourceを使えばそんな意識はしないですが) この、文字列でカラム名を指定するのがイマイチだと思うのです。 文字列だからインテリセンスも効かないですし、打ち間違えの可能性も。 カラム名を入れたenumを作れば解決できるような気もしますが、 DataSetの中に既に定義があるのですから、それを流用できないでしょうか? 要するに、カラムをカラム名で指定する際に、intと文字列以外の方法が あるでしょうか?
>>714 DataSet継承してカラム名をプロパティにしたクラスを作る。
VisualStudioでテーブルから自動生成すればできるだろ。
>>713 一旦 MemoryStream に読み込んでそっから Image 作ればいいよ
717 :
714 :2008/01/31(木) 10:22:15
>>715 どうも有り難うございます。
しばらく考えているんですけれど、どうもイメージが浮かばないです。
DataSetを継承しても、汎用的なものは出来ないように思うのですが。
VSで自動生成と言う意味は、VSのデザイナで自動生成されたDataSetの
ソースを何らかの方法で解析して、カラム名を格納するという意味なのでしょうか‥‥。
>>717 厳密に型指定されたDataSetでググる。
DataSetをそのまま使うならカラムやその型の情報はクエリーの応答があるまでわからない。
その場合はカラム名の文字列か序数で指定するしかないな。
719 :
714 :2008/01/31(木) 18:19:17
>>718 なるほど、DataSetを作る段階で別の種類のDataSetだったのですね。
どうも有り難うございます。調べてみます。
720 :
デフォルトの名無しさん :2008/01/31(木) 22:15:17
DBと接続して使うんじゃなく、dataset単独で簡易なデータベースとして使うなら、 プロジェクトに新規でxsd(スキーマ)を追加してテーブルやリレーション、キーを定義して、 いっぺんコンパイルすると、ツールボックスにdatasetを継承したdataset1(xsdファイルで定義した 名前による)コンポーネントが現れる。フォームのデザイナでこいつをD&Dしてやると型付けの あるdatasetとして使えるよ。
表計算ソフトの=REPT(x;y)を模倣した自作関数をfprintfの第3引数以降に使う場合です。 rept(int x,int y)の記述にはfor,while,do〜whileのどれが適任でしょう? 回数を指定するyは0の場合もあります。
それは本当にC#の質問ですか
ウィンドウを持ったアプリケーションが起動されるのを 監視することはできますか?
できます。
725 :
723 :2008/02/02(土) 13:09:26
>>724 やり方か調べるためのキーワードを教えていただけませんか?
findwindow
>712 画像のデコードがそこまで重いことはまずないと思うが、 ファイルアクセスが妙に遅延することはあると思うよ。 ノートンとかウイルスバスターがファイルアクセスに むやみやたらに割り込むから信じられないくらい応答が返ってこないことがあったり。
や、それなら普通に事前にMemoryStreamに(非同期で)読んどけば良いじゃん?
画像がWeb上とかにあって数KBダウンロード毎に描画するんならキャンセルとかあってもいいかもしれんが、 既にハードディスクあるものを表示するだけで、わざわざキャンセルとか普通やらないな
.NETでATLのCComPtrみたいな タイプライブラリのないInterfaceを扱う仕組みはあるですか?
Managed DirectX
自前でinterface再定義はできる Guid属性とかComImport属性とか使う IDispatchならType.InvokeMemberでレイトバインディングもできる
std::exceptionにUNICODE入れると文字が壊れますか?
スレ違い
その質問には答えるなということか。 了解した。
IPCをチャンネルに使ったリモーティングを使って、同一PC内でプロセス間通信を しているのですが、厳密署名したら少し動かなくなりました。 Clinet.exeとServer.exeとRemote.dllの3つのプロジェクトからなるソリューションです。 それぞれのアセンブリに同一のsnkファイルで署名したところ、 Client.exeが、Server.exeからのコールバックのみを受け取れなくなりました。 クライアントからサーバへのメッセージングは今までどおりに出来ています。 こういうモノなのでしょうか?どなたかご存知の方がいらしたら、宜しくお願いします。
738 :
737 :2008/02/13(水) 13:33:40
IpcChannel channel = new IpcChannel(properties, null, new BinaryServerFormatterSinkProvider(properties, null)); クライアントとサービスの両方を、上記の書き方で初期化したら出来ました。
SqlTransactionのCommit()のタイムアウト時間を変更したいのですが どこで設定すればいいのでしょうか? サーバーの負荷がでかいときにCommitのタイムアウト時間だけ短くてタイムアウトしてしまいます。
start tran somewhere here SqlCommand cmd = new SqlCommand(mySqlCommand, conn); cmd.CommandTimeout = 0; // NO TIMEOUT cmd.ExecuteNonQuery(); commit here
>740 それで変わるのはExecuteNonQuery()のタイムアウト時間だけで Commit()のタイムアウト時間は変わらないから困ってるんだよ。
なるほど。 しかし、"BEGIN TRANSACTION"と"COMMIT"をExecuteNonQueryで実行したら?
>742 確かにSqlTransactionのCommitもExecuteNonQueryでCOMMIT叩いてるだけにしか見えないのでそれでもいいかなとか思ってました…。 やってみたらそれで問題なく動いてしまったし。 SqlTransactionの存在意義がなくなってしまうけど仕方がないか。
マクロメディアFlashの タイムラインみたいなウィンドウ作りたいけど やっぱり自作しなきゃだめかな なんか楽そうな方法ありませんか?
最近どっかで見たな
NiVEとか?
747 :
747 :2008/02/29(金) 01:44:05
axWindowsMediaPlayerを使ってオーディオファイルを再生しています。 ListBoxにプレイリストの内容を表示しようと this.listBox1.SuspendLayout(); for(int i = 0; i < wmp.currentPlaylist.count; i++) { this.listBox1.Items.Add(wmp.currentPlaylist.get_Item(i)); } として、ListBoxにプレイリストの内容を表示しました。 更に再生中のMediaを選択状態にしたく、続けて for(int i = 0; i < this.listBox1.Items.Count; i++) { if(this.listBox1.Items[i].Equals(wmp.Ctlcontrols.currentItem)) { this.listBox1.SelectedIndex = i; } } this.listBox1.ResumeLayout(); としました。しかし、再生中のMediaが選択されません。 インターフェース同士の比較が上手くいかないからなのかなと思っています。 上手くいく方法がありましたら教えて下さい。もう3時間位悩んでいます。 よろしくお願いします。
748 :
747 :2008/02/29(金) 04:47:58
age忘れてました。まだ悩んでます。助けて下さい。orz
そもそも、PlayList[]の型とcurrentItemの型が違う。
750 :
747 :2008/02/29(金) 16:37:55
wmp.currentPlaylist.get_Item(i) も wmp.Ctlcontrols.currentItem もWMPLib.IWMPMediaかと思ったのですが、違うのでしょうか? for(int i = 0; i < this.listBox1.Items.Count; i++) { if(((WMPLib.IWMPMedia)(this.listBox1.Items[i])).Equals(wmp.Ctlcontrols.currentItem)) { this.listBox1.SelectedIndex = i; } } this.listBox1.ResumeLayout(); とキャストしても比較出来てないみたいだし、どうしましょ…orz
そもそもオブジェクトを比較してどうすんだ メディアプレイヤーいぢったことないけども、普通に考えて実体はCOMの先だろう 何らかのインスタンスを識別するIDとかがあるだろうからそれで比較汁
>>751 何らかのインスタンスを識別するID
o...rz
753 :
747 :2008/02/29(金) 22:35:46
解決しますた。 get_isIdenticalの戻り値と引数を見て、 もしかして…と思って試したら当たりですた。 this.listBox1.SuspendLayout(); for(int i = 0; i < wmp.currentPlaylist.count; i++) { WMPLib.IWMPMedia media = wmp.currentPlaylist.get_Item(i); int j = this.listBox1.Items.Add(media); if(wmp.Ctlcontrols.currentItem.get_isIdentical(media)) { this.listBox1.SelectedIndex = j; } } this.listBox1.ResumeLayout();
listViewに大量のデータを設定していると スクロールした時とか、再描画がとてつもなく重いんです。 プロパティとかで回避方法ってありますか? また、セル表示で別のコントロールでお勧めのやつってありますか?
VirtualMode やや面倒だけどな DataGridView
756 :
756 :2008/03/06(木) 18:09:14
相談があります。
http://forums.fanatic.net.nz/index.php?showtopic=11226&st=0&p=81800& のCのコードを参考にしてC#で同じ事をしようとコードを書きました。
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace msnTest {
public partial class Form1 :Form {
private const int WM_COPYDATA = 0x004A;
[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref COPYDATASTRUCT lParam);
[StructLayout(LayoutKind.Sequential)]
private struct COPYDATASTRUCT {
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}
}
続く
757 :
756 :2008/03/06(木) 18:13:37
COPYDATASTRUCT sendData = new COPYDATASTRUCT(); sendData.dwData = (IntPtr)0x547; sendData.lpData = songDataPtr; sendData.cbData = Marshal.SizeOf(songData); IntPtr msnHandle = FindWindow("MsnMsgrUIManager", null); MessageBox.Show(SendMessage(msnHandle, WM_COPYDATA, IntPtr.Zero, ref sendData).ToString()); Marshal.FreeHGlobal(songDataPtr); } } }
758 :
756 :2008/03/06(木) 18:16:53
あれ、なぜか書けない…。間が飛んでる…
そのまま放置とはどういう了見だ
ワロタ
761 :
756 :2008/03/08(土) 20:39:33
762 :
デフォルトの名無しさん :2008/03/10(月) 03:11:16
しつもんです。 Graphics g = pictureBox1.CreateGraphics(); mypen = new Pen(Color.White); fillbrush = new SolidBrush(Color.Black); g.FillEllipse(fillbrush, 10, 140, 400, 400); g.DrawEllipse(mypen, 10, 140, 400, 400); pictureBox1.BackColor = Color.Red; とやると、せっかくかいた円が消えてしまうのですが、 どうすれば消えないでかけるのでしょうか? 背景の色の設定と、円を書く順番を変えても意味ありませんでした。
>Graphics g = pictureBox1.CreateGraphics(); なにこれ
764 :
デフォルトの名無しさん :2008/03/10(月) 03:27:44
>>763 pictureBox1に円を書きたかったのでこうしたんですけれど、
必要ないんですか?
コントロールを継承したクラスでOnPaintメソッドをオーバライドする CreateGraphics()じゃなくてOnPaintに渡されるe.GraphicsのGraphicsで描画する
766 :
デフォルトの名無しさん :2008/03/10(月) 03:44:49
>>765 ???
すいません、もう少し分かりやすく説明してもらえませんか?
おいおい・・・
人間やめろ。
>>766 君にはまだ早い
C#の基礎を理解してから来なさい
>>768 >>769 「現在のウィンドウのメッセージの存続期間だけ有効です。」
を具体的に説明してくれ。
おいおい・・・
人間やめろ。
>>770 君にはまだ早い
C#の基礎を理解してから来なさい
ここ、もう相談スレじゃないよな…
本スレ行けよ
WinXPのC#.NET2003での質問ですが、 DDLのChangedで動的に選択したインデックスが上手く取得できません どうしたらよろしいでしょうか?
777 :
デフォルトの名無しさん :2008/03/10(月) 18:11:18
ファイト
笑えばいいと思うよ
何、このスレ
垂直同期をとるためにVsync待ちをしたいと思い調べたところ C++では IDirectDraw::WaitForVerticalBlank IDirectDraw::GetVerticalBlankStatus IDirentDraw::GetScanLine などを使うようなのですが、 これらの機能をC#で使用する方法はあるでしょうか? また、C#で垂直同期をとる手法として一般的なものがあれば 教えていただけないでしょうか
Managed DirectX
ずいぶん懐かしい言葉だなー。 垂直同期待ちって。
液晶全盛、リフレッシュレートいじり放題のこのご時勢にVSync待ちはないだろ
へーCRTのリフレッシュレートが「いじり放題」じゃなかったなんて知らなかったよw むしろ液晶の方がそういう面では不自由なデバイスのはずだと思ってたけど
液晶のリフレッシュレートが弄りやすいかどうかなんて話してないんだが
へーじゃあ「どんな話」をするつもりだったのかとっくり語ってもらおうじゃないの。 いやまあできないなら無理すんなよw
液晶全盛 かつ リフレッシュレートいじり放題という意味で、 液晶全盛 だから リフレッシュレートいじり放題という解釈ではないということだと思う。
788 :
783 :2008/03/14(金) 00:07:04
おまえら俺の言葉が足りなくて悪かった
言いたい事は
>>787 さんのいう通りだ
おやすみ
いや普通はそう解釈するよ 揚げ足を取ろうとするなら別だけど
>>789 君も頭悪いなw
>>788 は図らずも自分を擁護できる発言をする奴がいたからそれを利用してるだけ。
そんなことねえだろ、と言いたいのなら、
>>783 の意図が
>>787 の通りだとして(それでも全然かまわないが)
「なぜ」「このご時勢にVSync待ちはない」という結論に繋がるのか説明してみな。
必ずいい方向に脳内補完する人と必ず悪い方向に脳内補完する人が この世の中にはいるんだな。 なぜ分かれるかというと性格がいいか悪いかなんだな。
Vistaは垂直同期取ってるんじゃなかったっけ
もうそろそろカスはほっとこうぜ
>>795 Vistaのことをひどく言うのはやめてあげてください。
Vistaは、悪くない
悪いのは、サンプルプログラムのフォント関連部分と
>>791 の頭
まあ
>>797 がそういう「負け惜しみ」はみっともないと思う程度の恥の意識もない奴だ、
というのはよくわかったよw
うわ、反応早ww
反応早かったら何?
っていうか、どうしてこの手の馬鹿ってのは自分の言葉を自分に適用しようとしないのかねw
一言で言えば恥を知らないからだろうけどさ。
そんなことはどうでもいいから
>>791 に書いた疑問を説明してみてよ早く。
801 :
783 :2008/03/14(金) 20:59:24
ちょっとおまえら俺の事はもうスルーしてC#の話ししてくださいホントお願いします
C#の話はC#スレでやりましょう
テアリング避けでVsync待ちしたいこともあるけど、 漏れのやり方が悪いのかビジーループになるんで非ゲームでは あんまり使いたくないな・・・
もうリフレッシュレート論争やめようや
続けたい奴は続けていいよ どうせ糞スレだし
中途半端に機能してるから紛らわしいw
>>784 で書いた自分の勘違いを認めたくないだけだろ
こういうバカは何言っても食いついてくるからほっとけばよろし
808 :
デフォルトの名無しさん :2008/03/19(水) 17:35:42
ここで質問ですよ リッチテキストボックスに画像貼り付けたり、背景を自前で描画したりやりたいんですが WndProcのWM_PAINTを捕らえても文字の上に描画されてしまいます 文字の下に描画できませんか?
つWPF
810 :
デフォルトの名無しさん :2008/03/19(水) 19:44:09
ググレ押忍
>>808 そんなの簡単だろ・・・と思ってやってみると意外とできないねこれ
Func<T,TResult>に共通化されつつある今、 Converter<T>やPredicate<T>などを使う意味はあるのでしょうか?
意味を明確にできる
>>814 前からいちいち定義するのがいやでDelegate<Result,Param1,Param2>とか普通のメソッドの型の順番にあわせて使ってたんだが、
Funcniそのまま使えないんだよなぁ・・・どうしよう
DataGridViewでNullValueが設定されている列のセルの値を、プログ ラムでDBNull.Valueに設定したとき、セルにNullValueの値を表示す るにはどうしたらいいのですか? MSDNライブラリには、DBNull.Valueを設定するだけではできないと書 いてあるけど... セルの値がDBNull.Valueで、セルの表示はNullValueの値にする方法 を教えてください。
変換は行われないってのはDataSourceNullValueがDBNull.Valueで(ryってところの解説だぜ?
>>818 ありがとうございます。よく読んだらその通りでした。
その列の型はstringで、DataSourceNullValueを設定してないため、MSDNライブラリの
「DataSourceNullValue が DBNull.Value で、セルの ValueType が参照型」に見事に
合致してました。
DataSourceNullValueをstring.Emptyにして試してみます。
コレクション要素の変更をコレクションのオーナーに通知する方法 はないですか?オーナーをコレクションとしてラッピングするくらいしか 思いつかなくて。
821 :
デフォルトの名無しさん :2008/03/24(月) 18:55:21
その方法でいいんでない? 何か問題があるのか?
IBindingListでも実装しとけ
配列の配列にアクセスする方法について教えていただけないでしょうか? int data = new int[5][5]; に数値データが入っているとして、例えば全要素を表示させることを考えます。 その際あえて、ポインタを使ってアクセスすることを考えてます。 (ポインタなんて使わず、添字を使えばいいというのはわかっていますが、 あくまで、勉強のためということで。。。) ポインタ(*p)を使う方法はわかるのですが(ソースの上半分)、ポインタのポインタ(**p)を使ったやり方が(ソース下半分)がわかりません。 ちなみに具体的にはソース中の<<<<data>>>の部分の書き方がわかりません。 (もしかしたら、ぜんぜん違うのかもしれませんが。。。) わかる方教えていただけないでしょうか?よろしくお願いします。m(_ _)m //とりあえず うまくいった ポインタ を使う方法 fixed (int* p = &data[0][0]) { for (int* px = p; px != p + 5; px++) { for (int py = *px; py != *px + 5; py++) Console.Write("<" + (int)&py + "," + py + ">"); Console.WriteLine(); } } //うまくいかない ポインタのポインタ を使う方法 fixed (int** p = <<<<data>>>) { for (int** px = p; px != p + 5; px++) { for (int* py = *px; py != *px + 5; py++) Console.Write("<" + (int)py + "," + *py + ">"); Console.WriteLine(); } }
>>824 ポインタなんて使わず、添字を使え
こうですか?
C#でわざわざポインタなんて勉強する価値無し
int*[] temp = new int*[data.Length]; for (int i = 0; i < temp.Length; i++) { temp[i] = (int*)(void*)Marshal.UnsafeAddrOfPinnedArrayElement(data[i], 0); } fixed (int** p = temp) { ... こうじゃね 本気でこんなの書く奴がいたら頭おかしい
>>824 上も全然ダメ。めちゃくちゃ。
コンパイル通りゃいいってもんじゃないよ・・・
そこまでやるならC++/CLI使えって話しだな
その記事,すごく客観的で秀逸だよな
832 :
824 :2008/04/02(水) 18:38:08
>>826 具体的なソースをご提示いただき、ありがとうございます。
>>827 上のソースも、ポインタの使い方に間違いがありますか。。。
一応、ほしい結果は得られたので、正しいかと思ったのですが。。。
>>828 もちろん、その通りですが、あくまで勉強ということで。。。。
>>829 この記事読みました。
実際に簡単なループをまわして何パターンかのソースで確認したところ、配列とポインタとでそんなに大きく処理時間がかわらないようです。
(逆にポインタが遅い場合もありました。。。)
ポインタのポインタは関数の文字列型の引数に使う程度で、やっぱりあまり出番がないんでしょうか。。。。
|┃三 / ̄\ |┃ | | |┃ \_/ ガラッ. |┃ | |┃ ノ// ./ ̄ ̄ ̄ \ |┃三 / ::\:::/:::: \ |┃ / <●>::::::<●> \. |┃ | (__人__) | |┃三 \ ` ⌒´ / |┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
C++とC#の違いを教えて下され
全然違うので説明が逆に難しい。
JAVAとC#の違いを教えて下され
中途半端に似てるから鬱陶しい 特にJavaのジェネリックの糞さには発狂しそうになる
>>836 Sunが作ったのがJava。
Microsoftが作ったのがC#。
JavaとJ#の違いを教えて
JavaをWindowsに最適化したのがJ#
そーいや大学の研究科目でjavaを使ったGUIとかいうのがあったがどうにもなあ 「最終的には1000行を超えるコード〜」とか「毎年大人気の科目」とか意味の分からん宣伝ばっかで萎えた。 そんなん個人でもうやってるって話だし。チームプログラミングとかを前面に押し出してたなら魅力があっただろうに
学部一回生向けの授業?
>>841 大学でチームプログラミングなんて教えれる先生がいないって。
>>842 三回生向けだからあれなわけで
一回生でそこまでやったらそれは別にいいと思うけどね
大学でチーム開発してもできるやつが全部やっちゃうから意味なし。
>>842 学部一回生でそんな高級なことしたら単位が全然でないじゃないか!
学部一回だとこんなもんだ。
・電源の入れ方、終了のしかた。
・エディタのつかいかた
・ファイル操作のしかた
・ほーむぺーじをつくろう
・一番最後に hello world(全角スペース入れてコンパイル通せないヤツ多発)
これは酷いww
>>845 卒論を二人で一つ書く大学もあるらしいからな
ありえる
一回目のCの授業でHelloWorldコンパイルまで行ったけどwwwwwwww
どこの底辺専門学校だよ。
院なら別に共著って普通じゃねえ?
>>847 二人で作業したからといって、労力が半分になるわけでもないし、
二人で作業したからといって、二倍の完成度になるわけでもない。
むしろ独りよがりな内容にならなくて良いんじゃないか。まさにXPだな。
え?
お菓子を食べながら卒論を書くんですね わかります
いいえビールです
早く終えて生ハムメロンでも食べなはれ
何だか腹減ってきた
ArrayListのテンプレート版はないの?
System.Collections.Generic 名前空間の List<T>
862 :
デフォルトの名無しさん :2008/04/22(火) 17:02:02
C#のおかげで少しだけC++のテンプレートが解ったような気がした
>>862 そりゃ気のせいだな、ぶっちゃけ別物できる事の範囲が違いすぎる、つかなんだこのスレ
昔の重複スレの残骸?
「すこしだけわかったような気がした」って言っただけなのに・・・
気にスンナ
C++始めようと思うんだが、C#をから見たC++みたいな都合のいいサイト無いかな?
>>866 おお、もうそんなこと言い出す奴がいる時代か。
需要としてはその逆ばっかりだったんだけど。
なので、あんまりそういうサイトないと思うよ。
やっぱ無いよねf^^ パイオニアになって勉強がてらまとめサイト作ろうかな・・・。 何から勉強していいか分からんレベルだけどww
>>866 C++は歴史がある言語だから、C#から見るより歴史を追った方が分かりやすいかもしれん
そうしないと理不尽と理解できない仕様の塊に悶絶するハメになりそうな予感が・・・
大きなところで C言語 → クラスが実装された初期C++ → 例外・種類の増えたキャスト・テンプレート → それからのクラスライブリの発展(ジェネリック・メタ)と順に。
いきなりクラスとか勉強する人もいるけとね、玉ねぎはむいた方がいいと俺は思う。
>>869 構造化プログラミング言語としても、
新しい言語の方が優秀なのよね。
今から勉強するなら、C# で始めて、
C# で構造化プログラミング、C# で OOP、C# で構造化例外、C# でジェネリクス
と勉強する方がいいと思う。
いまさら C++ に戻って欲しくないのよね。
せっかく C++ の負の側面を切り捨てた C# があるのに、
C# から C++ に舞い戻るなんてやめて欲しいなぁと。
それは正しいけど、「C++の設計と進化」読んだり、webの解説を読めば載っている事であって 「C#しか知らない人から見たC++」ていう観点で語るのがおもしろいんじゃね 「なんとC++にはGCがありません」みたいな
いや、一度は見てみるべきだな その時代の思想、その正しいとされる書き方考え方ってやつが見えてくる、 C#の思想だって、いつまでもそのままではいられない、現にどんどん変わっているし。 変わるという前提で何ができるかという事が大事だと俺は思うね。 C++は歴史を追って勉強すべきというのは、予想外の仕様であっても当時は正当と思われる思想の元に考えられているもので、一見無節操に見えても無節操に拡張されているわけではない。 だからその方が憶えやすいと思うんだよ。
ただなぁ、過去には常識だったけど、今は非推奨になってる書き方なんかも多くて、 下手に歴史を追うとそういう負の遺産まで覚えちゃうのよね。 それが負の遺産だと認識できる人間にとってはいい勉強なんだけど、 世の中そういう人ばかりではないから・・・
いまいちまとまりが悪いので 873 をまとめてみると、 要するに、C++の言語使用は、一見ルールなき言語仕様に見えても、深いところにルールはあるんだよ。
mutableなんて最初なんであるのか意味がわからんかったさ
>>874 負の遺産を負の遺産と認識できないならプログラマは辞めるべきだな、と俺は思う。
アンチパターンは重要だよ。
まあ取り敢えずは書いてみればいいんじゃね? 読み物としてオリジナリティは出るだろう 実用的か?となると疑問符付くが
>>877 理想論言えばね。
そりゃ、才能ある人間ばかり集められるなら苦労はしないという話に。
話がずいぶんそれてきたな。
C → C++ の歴史を知った人間が C# 使って入門記事書くのがベストだと思ってる。
なので、C# でプログラミングを覚える → C++ に移行もありだとは思う。
が、できれば C++ 自体が滅んで欲しいなぁとも今となっては思う。
俺もC#から始めた口だが、C/C++できないことに多少なりとも劣等感感じるんで、それら学びたいってのはあるけどね
C#からはじめる逆に凄いようにも感じちゃうなあ。 俺なんかもし15年遅く生まれて、初めて触るのがいきなりC#とかだったら ちゃんと順応できただろうかと考えちゃうよ。 構造体も知らない内からクラスの概念を学ぶってのはどういう感覚なのかな
俺もC#から始めた口だが、独習Cと独習C++で十分だった。
C++のクラスは拡張構造体ではないよ C++ からの人は結構誤解している人が多い。 実は自分も誤解していたクチだったりする訳だが。
>>882 そのレベルだと、きっと使えるような気持になっているだけかと思われます。
>>883 間違い
C#のクラスは拡張構造体ではないよ C++ からの人は結構誤解している人が多い。
>>884 君は勘違いをしてるよ。
C#経験者がC/C++に入門する際に参考にする情報の話をしてるんだよ。
その後もそのレベルに留まってるという君の想像に君が指摘を加えてもこっちはどうしようもないんだけど。
まぁ、一度とことんやってC++のとてつもない広い世界をみてみれば思いなおせると思いますよ。
C++で二〇〇二年ぐらいまでやっててブランクあけて今C#。F#二手を出し中。 STLまでは知ってるけど、メタは知らん。なんか変態的になってるらしいが。 C#でよいとこは、やはり抽象化度合いがC++よりあがってるところ。C++でそれをやろうとしてトリッキーになるよりもいい。 F#はさらにその抽象化度合いを上げられるのでたぶんマスターしたらそっちに行く。プリミティブなところでトリッキーなことやるよりも自分はそっちの方が好きだ。
それがどうしたの
意外にC#から入った人いるんだな
>>866 の需要は結構あるのかも
Javaから入った人は腐るほどいそうだけど
>>887 とてつもない広いというより、とてつもなく深いという感じじゃないか?
JavaからC++に入っていまはC#やってるけどC++の意味が分からなかったことは 仮想関数 virtual void function() = 0; //なぜ "= 0" 静的メンバ class hoge{ static int a; //クラス内では宣言しかできない } int hoge::a = 100; //定義はクラス外でないとできない これって歴史的な理由があるのかな?
>>893 C++の設計段階では出来るだけ新しいキーワードを
付け加えたくなかったという経緯がある
(C++の設計と進化)
>>893 ついでに14882:2003では
class hoge {
static const int a = 100;
};
を許してるから。静的クラス変数のconstのint型に限って
class内で値の定義ができる。
>>893 後者は、Cのグローバル変数と同じ方法
(ヘッダには宣言だけ書いて、どこか1ヶ所で定義する)
を踏襲したと考えれば納得がいく。
なぜコンパイラの都合に過ぎない「宣言」などというものを廃止する方向で 進化しなかったんだろう
C++スレでやれよ
>>893 純粋仮想関数は、イメージとしては関数ポインタに NULL 代入してるような感じ。
まあ、分かりにくいから C# では abstract キーワードが導入されたわけだけど。
静的メンバは、C++ では宣言と定義が別だからなぁ。
クラス = ヘッダファイルに書く = 宣言だけ書く。
クラスの外 = .cpp ファイルに書く = 実際の定義(値の代入は定義の方でやる)。
>>899 まあ、今のこのスレの流れは、「C# プログラマに C++ を教えるなら」的な空気だから。
全く無関係というわけでも。
C# 入門サイトの管理人の目にでも触れれば、そういう記事が追加されるかもしれないし。
さいきんこのスレまともに機能してなかったから、まあいいかと
むしろそれなりに機能してることが異常w
まあ重複スレの再利用として悪くない
どうせいらないスレなんだから
>>871 >「なんとC++にはGCがありません」
それちょっと読みたいなww
最初はC++(VS.NETアカデミック)だったけど、当時は.NETは全く眼中に無かった。
VS2005 EE が無償提供されて「タダなら使ってやんよ!」と思ってC#始めた人って結構多いんじゃない?
俺はVisualStudio.Netがβ版の頃にC#始めたよ
確かECMAで標準化されたときだったかな そのときC#の言語としての評価が高かったので興味を持った でVS2002をアカデミックで
俺は初めて自分で買ったパッケージがC#2003だった。 半年使って辞めたが2005になってまた始めたよ。 今ではC#オンリーです
C#でリクナビ見てみたら案件少ないね やっぱC++とかJavaが多い 本当にC#なんて需要あるの?
C#はWebで需要があるだけです。
スタンドアロンのWindowsアプリ開発にC#は需要ないの? Webだけ?C++と同じぐらいのものを作れると思ってたんだけど
作ることはできるしC++より簡単だけど色々と大人の事情があるわけです
うちのグループは結構WinFormもC#で作ってるけどね、 社内に配布する場合でもframework入ってないPCあるから意外と嫌がられるけどね
>>913 日本は Java が強いみたい。
俺は imode のせいだと思ってるけど。
下手すると、Java が世界的に絶滅した後、日本だけ Java が残るとか変なことになりそうで怖い。
あと、Java が強い国では、C# よりも VB が強くなる傾向があるみたい。
似てるからか、Java が増えると相対的に C# が減る。
Javaのメインの用途は鯖だろ C#はクライアントの案件も結構ある そんな単純な図式じゃないよ
C#とVBで案件食い合ってるんじゃないの?
>>921 思い過ごしにしか思えないけどなあw
そもそもデータの信憑性がねえ。。
javaってコーヒーとか島の名前も入ってないかそれ?w
なんか違うものが混じってるんじゃないかと思うぐらい、日本のVB多いな。
C#を実務で選択できない理由の一つとしてVBerの存在があげられるな。 VB→VB.net→C#で「C#使えます」が多すぎる。 リソース調達が出来ないよ・・・
926 :
デフォルトの名無しさん :2008/04/27(日) 15:47:05
>>921 VBじゃなく、VisualBasicに変えたら激減してしまった。
あんまりその統計は参考にならなそうだな。
VBだとウィルスバスターも入るね
>>925 VB.netができれば、C#は使えますでも問題ない気はするけどね
ちょびっと場数踏めばすぐでしょうし。それと、逆の流れも。
VBからVB.NETてのは不安にさせるところだよなw
c++やDirectxを勉強したいので マイクロソフトから出ているVisualStudio2008を購入しようと思うのですが 結構使い勝手いいですか?
>>931 勉強するだけなら無償版で十分じゃないの?
無償のExpressで足りないというのなら、Professionalも90日評価版がある。 卒業間近で今しかアカデミック買えないというのでもない限り、 それらを使った後で買うかどうか考えればいい。
手の届くSTと無償のEEでどの程度出来ることが違うのか分からない .NET Framework使うんだから一緒じゃないの?
express版はマネージ形式(中間言語)アプリしか作れないよ ネイティブコードのアプリ(MFC)作りたかったら買ってみたら?
>>931 勉強ならExpressにしろ。
基礎無い内にProの機能使ったって変な癖つくだけ。
いやいや、そんなことはない。 VC++ ExpressにはMFCもATLもリソースエディタもないが、 ネイティブコードを吐くコンパイラはある。 VC++の話が進むようならスレ違いだな。
938 :
デフォルトの名無しさん :2008/04/27(日) 18:16:45
VC++ってコードが気持ち悪いからC#やることにしたよー^ノシ
ろくにC++知らない癖に
>>938 みたいな事言われるとムカつくが
C++/CLIがキモいのは否定できない
>>935 有料版になるとC#でもネイティブコードのアプリが作れるのでしょうか?
C++/CLI以上に(重度の)テンプレートプログラミングはキモいとは思う
作れません
>>940 C#は中間言語アプリしかないみたいだからexpress版で十分かも
EEだと外部プロセスへのアタッチが出来ないから、DesktopSidebarのプラグインを作ったとき、デバッグが面倒だったな。 どうせ無償なんだからEE入れといて、アップグレードは壁にぶち当たってから考えればいいんじゃない?
俺が2005Proの機能で使ってるのって、サーバーエクスプローラぐらいだけどw
あとインストーラかな 連投ごめんね
Silverlight2SDKドキュメントのサンプルコードはVBよりC#の方が先になってて感動した
948 :
デフォルトの名無しさん :2008/04/27(日) 19:55:03
みんなC#が決定打になる波を心待ちにしてるんだね^^
Javaに似てるから習得しやすいんでいっそのこと C++とVBは全部C#に置き換わってくれるとありがたい
つーかMS謹製の言語が何種類もあるのか疑問
951 :
デフォルトの名無しさん :2008/04/27(日) 21:07:01
2005で開発しているのですが DateTimePickerで MinDateに2000/1/1を MaxDateに2000/12/31を設定しています。 このプログラムをVistaで実行すると ▼ボタンでカレンダーを表示した瞬間に 現在の日付が強制的に2000/12/31(MaxDate)に 置き換えられてしまいます。 Vistaではカレンダー自体が2000/XPと異なっていますが この動作は仕様なのでしょうか?
>>927 俺の親はVBといえばVentureBusinessだとか言ってた
>>951 再現せんね。Vista/.NET 2.0SP1
Value未設定の場合に起動時にMaxValueに設定されるだけだ。
あ、MaxValueじゃなくて今の日付の直近値か。
955 :
951 :2008/04/27(日) 21:33:02
>>953 ありがとうございます。
再度検証してみましたところ、下記の条件で再現しています。
条件:MinDate〜MaxDateの範囲に、今の日付が含まれないこと。
上記の範囲が今日の日付より昔の場合はMaxDateに
未来の場合はMinDateに、カレンダーを▼で表示する度に
強制的に設定されてしまいます。
957 :
951 :2008/04/28(月) 06:14:40
>>956 新規アプリで、DateTimePickerを配置(&MaxDate、MinDate設定)
しただけでも同じ現象が起こりました。
SPは
Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1 (KB926602)
Windows2000で開発・ビルドしています。
ちなみに、テスト環境のVistaにはVisualStdioはインストールしていません。
.NetFrameworkのバージョンは3.0でも3.5でも同じ現象が出ます。
リンク先はdelphiですが、同様の現象みたいですね…
デバッグだと20kのexeが発行すると全部で500kになっちゃうんだけど 20kのexeだけを配布しても問題ないよね?
デバッグ版配布すんなw
960 :
デフォルトの名無しさん :2008/04/29(火) 22:23:59
DbConnection conn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=・・・"); DbCommand command = conn.CreateCommand(); command.CommandText = query; DbDataReader reader = command.ExecuteReader(); while (reader.Read()) { int n = reader[0]; // ココ } ↑みたいな感じで、AccessのmdbファイルにOleDbで接続して、読み込んでいるのだけど、 「ココ」のところの「reader[0]」が、全部文字列を返します。 odbc経由で、下のようなSQLを流して、数値型で作った項目もです。 CREATE TABLE hoge ( N INTEGER ) oracle + VB.NET2003で、同じような感じで読みこんだときには、とうぜん数値の項目は数値で、文字列は文字列で 帰ってきました。 mdb(Jet)だと、これで正しい動作なんでしょうか? それとも自分がどこか間違ってますか?
それはどっちかっつとDB板とかで聞いた方がいんじゃね DB関係のトラブルて大抵環境だし
>>960 普通は全部文字列=StringじゃなくObject型だっと思うが?
全てInt32型なら
int n = reader.GetInt32(0);
でおkと思うよ
もしくは
int n = (int)reader[0];
とか
スマソ。
>>960 のコードじゃ問題はなかった。(説明用に書いたコードで実際にバグの出てるコードとは違う)
reader[0] まではしっかりDBの型が保存されてて、(int)reader[0]とかやっても、問題ありませんでした。
readerの内容をDataTableに移し変えて、ロジック部分ではそれを利用してたのだけど、移し変える方法が
まずくて、全部文字列に変化してました。
実際はこういう感じのコードでした。
DataTable table = ExecReader("SELECT ・・・"); // SQLを投げると、結果をDataTableに入れて返す関数
DataRow row = table.Rows[0];
(int)row["hoge"]; // ここでキャスト失敗の例外発生
> readerの内容をDataTableに移し変えて、 なぜ素直にFillしないんだろう
rowに入れるんなら.ToString()付けるかConvart.ToIntじゃないか
誰か、より良い方法があったら教えてください。 // 何箇所も変更場所があるのは好ましくない class MyComponent1 { string myProperty = "初期文字列"; [DefaultValue("初期文字列")] public string MyProperty { get { return myProperty; } set { myProperty = value; } } public MyComponent1() { } } // リファクタリングで MyProperty を書き換えると GetProperty("MyProperty") に変更が入らない // 結局複数個所を書き換える方が見通しがいい class MyComponent2 { string myProperty; [DefaultValue("初期文字列")] // ここを書き換えたら myProperty の初期値にも反映したい public string MyProperty { get { return myProperty; } set { myProperty = value; } } public MyComponent2() { var defaultValue = typeof(MyComponent2).GetProperty("MyProperty").GetCustomAttributes(typeof(DefaultValueAttribute), false)[0]; myProperty = defaultValue.ToString(); } }
ん、ここは偽スレ?
スレを変えるなら両方で一言断っとけ
970 :
デフォルトの名無しさん :2008/05/03(土) 13:18:17
Part46の偽スレで書いてしまったので、こちらで再投稿させてください iTextSharp使ってテンプレート読込んだけれど、その後の文字描画がテンプレートの下に隠れてしまうが、 レイヤの順序を操作する方法とかあるのでしょうか? テンプレート読込み後に文字描画しても、その逆でも同じように隠れますが。
こっちは廃棄スレ
972 :
デフォルトの名無しさん :2008/05/05(月) 06:22:48
もりあがってまいりました!
次スレというか本スレ
2つ上のレスすら読めないってどんだけ〜
俺に、C#習得者向けのC++の constについて教えてくれ。 C++のconstとかconstとかconstがよくわからない。 前はDelphiやってたからか余計に混乱する。 Effective C++とかModern C++ Designeとか読んでもモヤモヤする。 同じ職場の別プロジェクトのプログラマーはクラス全部(という表現がよいのかわからんが?) constにしようと時間の無駄に気づかずやっきになっている。 C#風に言えばどうなんだ?
引数にconstついているのに、プロパティに書き込みができたり、フィールドをいじることができたりすることが、 おかしい感覚らしい。
C#でconstってほとんど出番無いよね
>>976 const 使ってる既存のライブラリを利用する際に
問題が発生することがあるんだよ。
const 使わないやつは死刑だ。
>>976 全部ってのはメンバ関数全部のことか、メンバ変数のことかどっちだ?
C++ではconstには3種類あって、 ・変数自身へのconst: 変数を変化しない/させない。定数。 ・(ポインタの)ポイント先へのconst: そのポインタからは読み込みしかしない。 ・メンバ関数に付く:そのメンバ関数からは(thisに対して)読み込みしかしない。 で 、ここでmutableの登場。実装上は書くんだけど、意味的には読み込みだけ、みたいな (典型的にはキャッシュみたいな)メンバ変数に付けるとconstメンバ関数からも書ける。
不変な値ってのには2つの意味があって、 1. 直定数(literal: 1 とか 0.5 みたいな数値)に名前が付いてるだけ。 コンパイル結果がまさに定数。 2. コンパイラが不変な値と認識してるだけのもの。 コンパイル結果は通常の変数と変わらないんだけど、 プログラマが値を変更できないもの。 の2つある。 C# の const は 1 の意味でしか使えない。 readonly が 2 の意味に近いけど、readonly はプロパティとかを書きかえれちゃうんで不完全。 C++ の const は 2 の意味でも使える。 というか、大昔には 2 の意味でしか使えなかった(1 はマクロを使って定義)。
>>982 素朴な疑問。
君のいう1と2の区別っていうのは
(a) Cではなくアセンブラレベルの話をしている場合
(b) ROMを持った環境の話をしている場合
でしか意味がない区別のように感じるけどどうなの。
>>983 1 は配列の静的なサイズ指定に使えるが
2 は使えない。
>>985 あと、まあ、Cみたいにパフォーマンスを気にする言語では、
コンパイル結果が定数になってるかどうかは結構重要。
load 命令が1個増えるだけで実行だいぶ遅くなるから。
OOP が絡むとさらに複雑で、 - メモリが不変 - (メソッド呼び出しの結果が変わらないという意味で) 外部から見て不変に見える という区別も。 後者は、例えば最初に1回だけ計算して、その値をキャッシュしとくような場合、 外から見た値としては毎度同じ値しか返さない(=不変)なんだけど、 最初のキャッシュ計算のときにメモリ操作は発生しちゃう。 C++ の mutable キーワードはそういうときのためにある。
で,複雑面倒な割に利点が少ないから捨てられた
>>988 というか、学者肌の人間が導入したけど
実務上ほとんど使わないから一般プログラマーが見向きもしなかった
って感じじゃない?
言語マニアと一般人の温度差ってのはよくある話。
メンバ関数のconstはメンバ関数のvolatileよりはだいぶ使われてる
>>989 正確には
>>982 の1の意味以外の const に意味がないことが判明したんだよ、メタメタしたプログラムを書きまくるなら、すぐに気づける
一切言語のキャスト等を一切使わず、言語の制約にも抵触せずに const 変数を書き換える大技がある、少し頭をひねってみると面白いよ。
constの意味は、自分でコードするときに、仕損じがないようにするためのお呪い以上の意味は無かったんだよ。
新しい言語では削除してしまうのが吉、ややこしくなるだけだから。
リテラル以外の意味のconstが最低限必要な箇所というのは 文字列に関する部分で、char配列やstd:stringがそう。 多くの言語では文字列は特別な型として扱うことが多い。 C#やJavaは不変クラスで対応している。 それで必要がなくなった。 不変クラス文字列は文字を編集する操作には向かないが、 広く参照を分散させることやマルチスレッドに非常になじむという特徴を持っている。
正直言って、C++勉強すれば良かった。 C#が出来たときに最先端と思って選んだけど ネイティブコードを吐くC++の方が実用性がある
仕損じがないようにするって、すげー重要なことだと思うんだがな・・・。
だからって複雑にしすぎたら仕損じの余地が増える
このくらいで複雑とか言ってたら D 2.0 は扱えないぜ・・・
あの本末転倒言語ですね
あの D 2.0 の const まわりの仕様は流石になんとかして欲しい。
::::::::::::::::::::::::::::::::::;.' . ^堰@| + ';::::::::::::::::::::::: ::::::::::::::::::::::::::::: ;.' .| | ';::::::::::::::::::::: :::::::::::::::::::::::::::;.' | | ';::::::::::::::::::: :::::::::::::::::::::: ;.' ┼ i 亅_|, -、 ';::::::::::::::::: ::::::::::::::::::::;.' 厂/ ィ ⌒ヽ. ';::::::::::::::: ::::::::::::::: ;.′ // .|rqミLノ_l | 〉 ';::::::::::::: :::::::::::::;.' ー匕 人公┘ ヒ}リ./ 厂}';:::::::::::: :::::::: ;.′ └冖ー> 、 n 火// .'::::::::::: 輝かしい1000! ::::::;.' ゜' /.に二二二 イ> ';:::::::: : ;.′ , ‐― 、:::{ ';:::::: :' 。 / .:!.:.i:|::ト、 \.ヘ. ';:::: ./ .:トLハ忙7| :l. Yヘ ';:: {j.:l:忙! くノ .:.| ∧ ⊥ '; f^Y 礼_ ゥ イ .:.:.| ::∧ | 二.二.rへ. 二.|厂〕 .:.|ーイ + o . . └ヘ \/ /卜トゝ | . . : : \_/ | .| : | :
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。