C♯, C#相談室 Part3 ..
[2ch|▼Menu]
539:デフォルトの名無しさん
07/12/14 17:47:31
>>537
すでにほかの言語が使えるなら、オライリーが無駄な説明がなく理解しやすい。
下はシラネ。ただ、言語編とかつくのは他のも読む前提で書かれてることが多い。
後、@itのC#入門改訂版ならタダで読める。正直助長な部分もあるが、本を買う前に一度見てみて、
それだけでは不十分だと感じてから本を買っても遅くないんじゃないか?

540:デフォルトの名無しさん
07/12/14 18:58:04
ってかMSDNとかの Microsoft 様のドキュメント読めば十分すぐるだろ・・・

541:デフォルトの名無しさん
07/12/14 20:11:48
>>540
リファレンスには十分だが、携行できないしいろんな意味で不十分
「C#の勉強を始める場合」だからな。

542:デフォルトの名無しさん
07/12/14 20:13:03
>>539
C++は使えるのとJAVAの文法の基本は分かっているので
オライリーにしてみます。MSの本は高すぎるのもネックです。
>>540
基本を押さえたら適宜参照してみます。


543:デフォルトの名無しさん
07/12/14 20:48:26
携行できないのはたしかにその通りだけど、↓あたりとか折角無料なのに
スルーしてしまうのはもったいないと思う。

URLリンク(msdn2.microsoft.com)


544:デフォルトの名無しさん
07/12/14 20:51:56
>>542
正直、C++ と Java 使えるなら MS のドキュメントだけで十分だと思うけど。

545:デフォルトの名無しさん
07/12/14 21:07:26
MSDNの
・C# プログラミング ガイド
・Java 開発者のための C# プログラミング言語
あたりに一通り目を通しとけば、まあいけると思うけどな。

どうしても紙媒体が好きならオライリーのC#いいと思うよ。

546:デフォルトの名無しさん
07/12/14 21:19:20
以外とWebですますっていう人間多いのか?
俺は新しい言語を勉強するときには、とりあえず一冊本を買うんだが、
Webだけだと記憶しづらくないか?

547:デフォルトの名無しさん
07/12/14 21:20:23
msdnはローカルに入れますよ

548:デフォルトの名無しさん
07/12/14 21:25:51
>>547
ごめん、Webっていうのは言葉のあやで、デジタルデータでってこと。

549:デフォルトの名無しさん
07/12/14 21:30:31
あんまり紙資源を無駄にしたくないから本は買わない
ウラニウムとどっちが無駄かは知らんけど

550:デフォルトの名無しさん
07/12/14 21:42:48
「Web ですます」というより、C# は「Web ですむ」。
それくらい日本語情報充実してる。

551:デフォルトの名無しさん
07/12/14 22:00:43
どっちにしろ公式のドキュメントには目を通しておく必要があるし、
MSの物の場合それだけで十分なことも多いからなぁ・・・

552:デフォルトの名無しさん
07/12/14 22:02:49
俺の場合基本的に本ですべてすませて、必要なところだけ公式のドキュメントを見る。

553:デフォルトの名無しさん
07/12/14 23:18:24
俺も情報をつかむ程度ならweb、じっくり勉強するなら本だな。
論文とかもできるだけ印刷して読む・・・あ、単純に紙媒体が好きなだけかな?結局好みの問題かも。
でもディスプレイとずっと睨めっこするのは辛くない?

というかMSDNは重いのが・・・
動的生成なサイトってイライラが溜まって好きじゃないんだよなw

554:デフォルトの名無しさん
07/12/14 23:30:20
>>553
禿胴。昔はモニター越しの情報も紙媒体も一緒だと考えてたんだが、
長年やってるうちに結局紙媒体の方が覚えやすいっていう結論になった。

555:デフォルトの名無しさん
07/12/15 00:38:52
オライリーの本は二部が難しいな。
のマーシャリングやらアセンブリやら属性、シリアル化とか
わけわからん。
ここはC#というよりは.NETの世界なんだろうけど。

556:デフォルトの名無しさん
07/12/15 00:57:36
>>555
二部って何を指してるの?

557:デフォルトの名無しさん
07/12/15 00:59:39
何らかの言語触ってりゃC#なんか一日で書けると思うが
まークラスライブラリは必要になったときに引くが

558:デフォルトの名無しさん
07/12/15 01:07:27
1日もかかるかよ


559:デフォルトの名無しさん
07/12/15 09:48:19
>>556
本の目次

560:デフォルトの名無しさん
07/12/15 10:01:01
>>557は本当に一日で習得できた?
プログラムを動かすだけならコピペでも出来るし、
それに一通り使えるようになった後ではいままでやってきたことがひどく簡単なことだったと思うもんだよ。

561:デフォルトの名無しさん
07/12/15 10:09:47
何らかの言語触ってりゃ
コボラー
絶対無理w
まあ、かけるだけならアホプログラムでも書けるといえなくもないから、
1日でとか短時間を自慢げに言うのって馬鹿にしか見えんよね。


562:デフォルトの名無しさん
07/12/15 10:13:54
このスレらしいくだらない話だなw

563:デフォルトの名無しさん
07/12/15 10:18:49
>>560
C++やらJavaやらやってたんで、楽勝だったよ。

564:デフォルトの名無しさん
07/12/15 10:20:54
文法理解しただけで「習得」したと思っちゃう人いるよね。

565:デフォルトの名無しさん
07/12/15 10:34:09
何らかの言語と
C++やjavaじゃぜんぜん条件が違うわけだが。
まあそんなことはどうでもいい。
できるって言うレベルが人によって違いすぎて何の意味もないわな。


566:デフォルトの名無しさん
07/12/15 10:42:55
URLリンク(blog.livedoor.jp)
> 私自信、新しいプログラミング言語を3日でマスターできなかったら負けだと思っている。
> もちろん「マスター」にもピンからきりまであるが、ここでいう「マスター」は、もちろんライ
> ブラリーやクラスを端から端まで覚えるということではなく、その言語の特徴をつかんで、
> 一目見てその言語で書かれた事がわかるようなコードを読み書きできることを指す。

567:デフォルトの名無しさん
07/12/15 10:47:36
C#なんて、2.0あたりまでは、メジャーな言語の寄せ集めみたいな文法で、
入門書をパラパラと読んで「ああ、こういう言語ね」と思えないようなヤツは不勉強すぎ。


568:デフォルトの名無しさん
07/12/15 10:48:53
言語自体の割合は小さくなってフレームワークなんかの割合がでかいって
偉い人も言ってたのにね。

569:デフォルトの名無しさん
07/12/15 10:52:31
1.1まででの壁はデリゲートぐらいか
2.0は匿名メソッド(のスコープ)

言語としてはこじんまり

570:デフォルトの名無しさん
07/12/15 11:09:48
あ、こういう言語ね
書ける
ここでいうマスター

はいはいなんの意味もないね。
ほんとに言語固有の部分は少ないしね。
まあそれでも仕様のボリュームはそれなりにあるけど、
ごく基本的な部分だけでもプログラムは書けるしな。

571:デフォルトの名無しさん
07/12/15 11:13:31
そんなんだから、ライブラリでも設計実装させたら
とんでもないことになったりする。


572:デフォルトの名無しさん
07/12/15 11:22:58
深く考えずに、細かいところを検証せずに
やたらマニアックなことする奴も氏ね、
コードは複雑で冗長でそのくせ穴だらけでたいして役にも立たない、
ああもうトラウマだぜ。


573:デフォルトの名無しさん
07/12/15 11:30:57
みんなすごいんだね。
俺なんて、他人のサンプルコード見ては
「なんだよ、このアトリビュート。どうやって学んだんだよ」
「このプログラムの設計ってまず何からどうやって作ったんだ?」
ってな感じで右往左往して
C言語で作ったプログラムをC#で組んでみようと思っても
上手くいかないし。
よし、JAVA宿題スレにそのプログラムの問題投稿して
解いてもらって、そこからJAVA経由で理解しようと
思ったけど、返ってきた答えが答えになってない
不完全なプログラムだったりして、どーしたもんかと考えたり・・・

基本構文はすぐに解ったけどオブジェクト指向が出来てない
自分に辟易する。

574:デフォルトの名無しさん
07/12/15 11:32:45
それは単に自分の頭が悪いだけで、
みんながすごいわけじゃなかろう。

575:デフォルトの名無しさん
07/12/15 11:35:21
>>573
あんまりふらふらせずに一つの言語に専念してみたらどうだろうか?
ここで上がってる多言語使える人間も、基本的には一つの言語を十分に学んでから、
その言語を起点して他の言語を学んでる人が多いはず。
複数の言語を同時に習得しようとすると、文法やメトリックを混同してまったく勉強できないことも多い。
俺は、とりあえずjavaが使えれば、基本的なOOP的言語は文法の違いだけですぐに覚えられると思う。


576:デフォルトの名無しさん
07/12/15 11:42:36
多言語を習得するというのは、実はそれほどすごいことじゃない。
文法とライブラリを使用する程度なら、その言語の主要概念(OOPとか)をすでに習得していればそれこそ丸一日あれば十分。
だから、Javaさえ覚えられればCやC++、C#は使えるも同然だし(言語固有の習慣や文法を除いて)、
言語を習得したっていうのは、言語の設計概念を理解してるかということに直結すると思う。
だから、一日で十分とかいってる人間も、似たような概念で構成された言語を、
今まで覚えた言語の概念を流用して使えるといってるわけで、
関数型言語をまったく知らない状態から、haskellを一日で自由に使えるわけがない。

577:デフォルトの名無しさん
07/12/15 11:53:33
>だから、Javaさえ覚えられればCやC++、C#は使えるも同然だし(言語固有の習慣や文法を除いて)

無茶ゆうなw
ってか、言語固有の習慣や文法を除いて
ってどういうこったよ?それはどう使えるっていうんだ?
C++まともじゃなくてもやったことあるなら
そんな台詞はどうやっても出てこん。


578:デフォルトの名無しさん
07/12/15 11:56:40
java屋がC#始めると変なとこだけ潔癖症でかなわん。
C#の文法でjavaを書く癖が直ってくれない。

579:デフォルトの名無しさん
07/12/15 12:01:02
あるある、チェック済み例外がうじうじとか言い出すよな。

580:デフォルトの名無しさん
07/12/15 12:17:54
>>573
そうだね。
こんだけオブジェクト指向が広まってるのに、たとえば、
「C一筋で10年、それ以外にはまったく興味もなくてすごしてしました。
いまさらC#やJavaなんてできません」
みたいなPGって激しくオワットルね。

581:デフォルトの名無しさん
07/12/15 12:23:13
C++勉強してればオブジェクト指向の概念自体はだいたいわかるんじゃないのかな。
時歳に使いこなせるかどうかは別だけど。

582:デフォルトの名無しさん
07/12/15 12:28:23
C++よりゃよっぽどオブジェクト指向部分に集中し易いjavaでも
結局思い切り人次第だからな〜


583:デフォルトの名無しさん
07/12/15 13:14:59
>>577
同意。C++の複雑度はJAVAの比ではない。C++を知ってる人間なら
JAVAはえらく簡単に覚えられるが、その逆は真ではない。

584:デフォルトの名無しさん
07/12/15 13:34:40
C++は手動でメモリ管理しなきゃならんし
標準ライブラリも足りないものだらけだし
言語自体にも罠がいっぱいある

585:デフォルトの名無しさん
07/12/15 13:44:33
>>584
メモリ管理なら、今やスマートポインタを使わない
なんて考えられない。boostがよりいっそう充実して
ライブラリが進化することを期待する。現にそうなって
きている。

586:デフォルトの名無しさん
07/12/15 13:47:44
いい加減すれ違い。

587:デフォルトの名無しさん
07/12/15 13:50:49
ここを隔離スレと知っての発言か?

588:デフォルトの名無しさん
07/12/15 14:10:25
いや、おまいらまず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++を学ぶなら
表面だけなら言語経験より開発手法や設計思想なんかの方がよっぽど重要なのかもな。

はい長文ゴメンなさ〜い。

589:デフォルトの名無しさん
07/12/15 14:27:21
痛い

590:デフォルトの名無しさん
07/12/15 14:45:54
C#にはあってC++にはない致命的なもの

一つのクラスを一つのソースファイルに書く機能
リフレクション
object型
クロージャ
式ツリー
自動シリアライズ
そしてもちろんGC

C++にあってC#にない致命的なもの

なし

591:デフォルトの名無しさん
07/12/15 14:49:50
テンプレートがないのは重症だろ

592:デフォルトの名無しさん
07/12/15 14:53:58
素晴らしい!これぞ隔離スレ

593:デフォルトの名無しさん
07/12/15 14:57:30
ファイルのインクルードは?

あれがないおかげで、プロジェクト全体から見えるシンボル(#defineで定義するやつ)
を定義しようと思ったらプロジェクトのプロパティーでチマチマやらんといかん。

面倒だし明示的じゃない。

594:デフォルトの名無しさん
07/12/15 15:18:13
C++にあってC#に無い物はわざわざ削った物ばかり

595:デフォルトの名無しさん
07/12/15 15:30:26
>>593
何を言ってるのか分からん
#defineをプロジェクトのプロパティでどう代用するんだ

596:デフォルトの名無しさん
07/12/15 15:36:50
>>595
ただ君が知らないだけなわりになぜか偉そうな口ぶりなのはどうなのw

まあ落ち着いて
URLリンク(msdn2.microsoft.com)(VS.80).aspx
の「Visual Studio 開発環境でこのコンパイラ オプションを設定するには」でも読め。

597:デフォルトの名無しさん
07/12/15 15:46:21
C#で#defineはそんな使わんと思うんだが
マクロないんだし

598:デフォルトの名無しさん
07/12/15 15:54:10
>>596
この機能のことであればひとかけらも致命的ではないだろ
お前のコードはいろんなシンボルを使った#ifだらけなのかもしらんが
プロパティで設定すればいいだけの話だ

599:デフォルトの名無しさん
07/12/15 15:59:18
C# でも #if SYMBOL はやるけどもな。

#define は、
マクロ型関数は使うな、
プロジェクト全体に渡るシンボル定義はコンパイラオプション+プロジェクト設定でやれ
ってこと。
プロパティはあんまり関係ないと思うが。

600:デフォルトの名無しさん
07/12/15 16:20:24
>>598
たしかに致命的ではないね。
その点は申し訳ない。

601:デフォルトの名無しさん
07/12/15 17:39:33
つ C++/CLI

602:デフォルトの名無しさん
07/12/15 18:19:16
>>590
おまえは本当に痛い。
リソースの乏しい久組み込みではGCが激しく邪魔になる。
一生Winアプリでも作ってろカスが。

603:デフォルトの名無しさん
07/12/15 18:39:26
まるで組込用途でC#使ったことがあるような言いぐさだなw

604:デフォルトの名無しさん
07/12/15 18:43:33
まあ組み込み用途ならCだし

605:デフォルトの名無しさん
07/12/15 19:03:47
>>603
適当に言いました。
すいませんでした。

606:デフォルトの名無しさん
07/12/16 00:34:29
>>591
っジェネリック

607:デフォルトの名無しさん
07/12/16 00:36:45
C#のジェネリックは実体化しなくても型チェックされるから、
肝心なところで使い物にならない。

608:デフォルトの名無しさん
07/12/16 00:38:05
型のチェックがガチガチなのはむしろ好きだがね
ちょっと間違うとコンパイルも通らない

609:デフォルトの名無しさん
07/12/16 00:44:21
CとかC++は何でもかんでも値型にキャストできるのが気持ち悪い。
なんでchar[]とかがintにキャストできるのかと。
ポインタはパフォーマンスアップに繋がるのはわかるがこれだけは
気持ち悪くてしょうがない。

610:デフォルトの名無しさん
07/12/16 00:48:55
C#の将来は明るいですか?
Windowsのソフトを作る予定がなくてもC#
を覚える必要があるか。JAVAとどっちを
勉強すべきか。

611:デフォルトの名無しさん
07/12/16 00:49:47
基本的にC++はメモリ操作が特徴。
型なんてただのメモリの入れ物としてしか認識してないから。

612:デフォルトの名無しさん
07/12/16 00:52:04
>>611
CはともかくさすがにC++にそれは言い過ぎのように思う

613:デフォルトの名無しさん
07/12/16 00:52:26
>>611
C#の型はどうなの?

614:デフォルトの名無しさん
07/12/16 00:53:42
>>611
仮想関数があれば仮想テーブルや型情報、vptrもある。
ただの入れ物とは思えない。

615:デフォルトの名無しさん
07/12/16 01:11:04
Windowsのソフトを作る予定がないならC#使ってもしょうがない
作る予定があるソフトに必要な言語をやるといい

616:デフォルトの名無しさん
07/12/16 01:28:21
>>615
Linuxに移植されたら?
世界は変わるかも?

617:デフォルトの名無しさん
07/12/16 01:33:30
Monoのこと、ときどきでいいから思い出してください

618:デフォルトの名無しさん
07/12/16 01:35:46
>>617
しょっちゅう使ってるよ
ペンケースに入ってる

619:デフォルトの名無しさん
07/12/16 19:00:20
そういえばC++にはbool型をとる安全なifもないな

620:デフォルトの名無しさん
07/12/16 21:28:37
安全
そのようなものはC++の思想に反するのだよ







うそですすみません。


621:デフォルトの名無しさん
07/12/16 21:38:41
むしろif文にbool型しかとらないJava/C#が異端なんじゃねーの?
俺もbool型オンリーの方が好きだが、スクリプト言語してるとそうじゃない方が多い気がする。

622:デフォルトの名無しさん
07/12/16 21:47:50
型に寛容な言語だとboolだけってわけにもいかないから

623:デフォルトの名無しさん
07/12/16 21:48:27
D言語は

bool b = true;
if(b){} // これはいけるけど、
if(b = true) {} // これはだめだお

624:デフォルトの名無しさん
07/12/16 21:48:36
動的型じゃ意味ないわな

625:デフォルトの名無しさん
07/12/16 21:51:33
>>623
やるならここまできっちりやるべきなんだろうな

626:デフォルトの名無しさん
07/12/16 22:05:30
>>623
Dはbool以外の型の値もifに与えられるけど、
代入式を取れないってのは革新的だよね。

627:デフォルトの名無しさん
07/12/16 22:12:14
Dはよく知らんが
while ((line = reader.ReadLine()) != null)
こういうのはOKなの?

628:デフォルトの名無しさん
07/12/16 22:13:29
>>626

メソッドのリターンコードで条件判定するようなプログラミングが簡単に
表現できない欠陥品だろD言語は

629:デフォルトの名無しさん
07/12/16 23:00:27
何を言ってるの君は?


630:デフォルトの名無しさん
07/12/16 23:02:10
bool以外の値をifに与えられちゃダメだと思うがね
boolの代入は規制すべきだと思う

631:デフォルトの名無しさん
07/12/17 11:12:08
そういった人それぞれのプログラミング思想を具現化したものがそれぞれの言語な訳です

632:デフォルトの名無しさん
07/12/17 22:19:44
だな

633:デフォルトの名無しさん
07/12/26 02:04:33
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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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, "ホゲホゲプー");
}

636:デフォルトの名無しさん
07/12/26 02:10:16
マーシャラがStringBuilderが持ってるバッファのポインタをchar*として渡すだけ。
char*を返す関数なら普通にStringで受ければいい。

637:デフォルトの名無しさん
07/12/26 02:12:17
>>634
URLリンク(msdn2.microsoft.com)(VS.80).aspx

638:デフォルトの名無しさん
07/12/26 03:00:09
>>636-637
サンクス!!
アンマネージドと、マネージドの相互変換をマーシャリングというのですね。

Buffers のサンプル
URLリンク(msdn2.microsoft.com)(VS.80).aspx

>>637の文字列のところに書いてありました。
文字列の変更の可能性がある場合は、StringBuilderを使うのはあってるみたいです。
引数などで渡した場合、StringBuilderのバッファのポインタが渡されるだけなんですね。

アンマネージドで確保されたchar* を返却値としてもらう場合は、
自動的に、解放されるのを防ぐために、IntPtr でアンマネージのままもらって、
Marshal.PtrToStringAuto で、stringに変換すればいいのですね。

わかりました!
ありがとうございました。

639:デフォルトの名無しさん
07/12/26 11:48:22
.net のVBコードをC#に変換できるツールってないですか?

640:デフォルトの名無しさん
07/12/26 12:12:05
ありますよ

641:デフォルトの名無しさん
07/12/26 12:21:21
ありがとうです

642:デフォルトの名無しさん
07/12/27 18:45:28
ツールでVBコードをC#に変換して
勉強がてらいじってるけどさっぱり分からん

c++でネイティブ書くなんて一生無理だなこれは

643:デフォルトの名無しさん
07/12/27 18:53:27
それはない
プログラミングが上達しない才能が無い限りいつかできるようになっちゃうよ

644:デフォルトの名無しさん
07/12/28 00:38:35
>>638
char*からなら、PtrToStringAnsiではないのか?

645:デフォルトの名無しさん
07/12/28 01:18:07
こんばんは。質問があります。
[管理ツール]−[データ ソース (ODBC)]-[ユーザDSN]でデータソースの設定を行う際、
表示される画面(例えばアクセスの場合だとデータベースの選択画面)をプログラム上で
出すにはどうすればいいのでしょうか?
ヒントか参考になるサイトでもいいので教えていただけないでしょうか。
よろしくお願いします。


646:デフォルトの名無しさん
07/12/28 02:11:03
GetLastErrorをHRESULTに加工して
それから例外を作る装備はないですか?

647:デフォルトの名無しさん
07/12/28 04:48:09
>>644
そうですね。

Buffers のサンプル
URLリンク(msdn2.microsoft.com)(VS.80).aspx

の方でも同じようなやり方で、できるとありました。
どもです。

648:デフォルトの名無しさん
07/12/28 11:10:04
throw Marshal.GetExceptionForHR(Marshal.GetLastWin32Error());

649:デフォルトの名無しさん
07/12/28 11:18:20
LastWin32ErrorはHRESULTじゃないと言うに
GetHRForLastWin32Error

650:デフォルトの名無しさん
07/12/28 21:48:02
>>643
すげぇ才能だなww
逆にそれは見てみたい
>上達しない才能

651:デフォルトの名無しさん
07/12/28 22:17:45
論理的思考を拒否する人。
感情や直感が最優先の人。
自分の思いが総て正しいと思う人。(これはちょっと微妙か
実際居ると思うぞ。

652:デフォルトの名無しさん
07/12/28 22:19:38
急に何の話してるの?

653:デフォルトの名無しさん
07/12/29 08:03:35
>>650
俺いっぱい見てきてるよ・・・

654:デフォルトの名無しさん
08/01/09 05:55:52
URLリンク(imepita.jp)

655:デフォルトの名無しさん
08/01/13 23:45:17
da.Fill(dt)で取得したデータの内容をColumnNameでダイレクトに取得したいのですが
foreach以外に良い方法があるでしょうか?

656:デフォルトの名無しさん
08/01/13 23:57:24
URLリンク(www.atmarkit.co.jp)

657:655
08/01/14 00:05:49
>>656
理解が足りてませんでした・・

ありがとうございました

658:デフォルトの名無しさん
08/01/14 12:01:58
質問です

SizeChangedイベントをハンドルしてInvalidateを呼び出して画面全体を再描画したいんですが
領域全体が無効化→背景色クリアが入ってしまい、その後に全体を書くので偉くちらつきます。
で、この背景色クリアを無効化したいんですが、どのようにしたら良いですか?

背景色クリアに関してはWinAPIで叩いてたころは確か
ブラシを入れないとか、Invalidateの引数でRedrawするかしないかを指定できたと思うんですが…

よろしくお願いします。

659:デフォルトの名無しさん
08/01/14 12:13:19
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer,true);
と設定してダブルバッファリングすればいい

660:デフォルトの名無しさん
08/01/14 12:18:12
いやダブルバッファするかどうかは別問題でしょ。
>>658についてはResizeRedrawを有効にすればOKだと思うけど。

なんか>>658はあまりよくわかってなさそうだから一応補足すると、
これは要するにいちいちInvalidateしなくてよくなるって意味ね。

661:デフォルトの名無しさん
08/01/14 12:21:52
用途によって違うだろ

662:658
08/01/14 13:24:59
>>660
ResizeRedraw=trueにしても駄目でした。
おっしゃるとおり、いちいちInvalidateしなくてよくなるんですが、
単に勝手にInvalidateを呼び出しているだけみたいですね。

結局ですが、多分.NETのInvalidateの実装が
InvalidateRect( m_hWnd, NULL, TRUE );
みたいにされちゃってるんだと思ったんで、
直接user32.dllのInvalidateRectをDllImportして
bEraseをFALSEで呼び出したらブラシのクリアが無くなりました。

ご返信していただいた方ありがとうございました。

663:デフォルトの名無しさん
08/01/14 15:07:20
>>658
なにもしない OnPaintBackground は?

664:658
08/01/14 16:11:11
>>663
.NET的にはそれが一番よさそうな実装方法ですね…
ありがとうございます。そちらのコードに修正します。

665:デフォルトの名無しさん
08/01/15 11:05:58
WM_ERASEBKGND をいじった事なかったのか

666:デフォルトの名無しさん
08/01/17 07:35:08
すみませんが教えてください。C#とC++は、.NETで行っても処理速度は
あくまでも同じなのでしょうか?それとも、C++の方が圧倒的に早いのでしょうか?
C#とVBでは処理速度は描画も含めて同じだと思いますが、C++では直接
Win32APIで動かしていて高速動作するようになっているのでしょうか?
よろしくお願いします。

667:デフォルトの名無しさん
08/01/17 08:43:03
>>666
.NETが扱えるのはC++ではなくC++/CLI
C++/CLIが吐き出す中間コードはC#,VBと同じ
よって速度は同じ

668:デフォルトの名無しさん
08/01/17 09:33:13
C++/CLIはネイティブコードを埋め込める

669:デフォルトの名無しさん
08/01/17 11:07:18
>>668
C#もunmanaged使えば同じじゃないの?

670:デフォルトの名無しさん
08/01/17 11:18:37
同じ内容を書けば同じ速さになるはずということで

671:666
08/01/17 11:21:15
>>667-669
解説ありがとうございます。
たとえば、Windowsのエクスプローラはフォルダのフォーカス移動に伴う
ファイル表示でもものすごく高速に実行され、画面の描画もめちゃくちゃ
瞬時に行われ、ノートPCなどの描画が比較的遅いPCですと.NETの
Formアプリケーションなどとはけっこう速度差を体感します。レインボウ
のような現象も顕著に出ていて、ネイティブのアプリケーションとでは
ものすごく遅い感じが否めませんでした。

こうした差は、C++/CLIを使って、すべてをネイティブコードにコンパイル
してしまうと、たとえばエクスプローラ並みにすばらしく高速で動くように
体感できるようになるということなのでしょうか。(長くてすみません)

672:デフォルトの名無しさん
08/01/17 11:22:25
>>669
C#でunmanagedは使えないだろ

673:デフォルトの名無しさん
08/01/17 11:27:32
>>671
それはWindows.Formsが遅いだけ。

C++/CLIを使っても同じGUIライブラリを使う限り、もっさりするのは換わらない

674:デフォルトの名無しさん
08/01/17 11:33:04
>>673
なるほど、そうだったんですか。
ということは、C++/CLIで、Formsを使わずに何かネイティブのGUI処理をする
方法を使う(MFCでしょうか、よくは知らないのですが)などすれば、
エクスプローラ並みの高速処理が実現できるということでしょうか、
そしてそういうことはC#やVBでは実現できないと・・・、この辺がよくわかりません、
よろしくお願いします。

675:デフォルトの名無しさん
08/01/17 12:04:06
>>674
C# と GDI+ でも、あんまり Forms の世話にならないで自前で描画する
大型のコントロール等書いて使えばそこそこ高速になるよ。

下手に Forms で UI 書くより、ブラウザ埋め込んで Ajax でもした方が
高速になるケースもあるだろうし (ブラウザはレンダリングが結構速いから・・・)。

>この辺がよくわかりません
「ネイティブ」の意味が分からないということ?

676:デフォルトの名無しさん
08/01/17 12:10:02
Forms はなんであんなに重いのかね?

677:デフォルトの名無しさん
08/01/17 12:37:29
>>675
たびたびすみません。

>自前で描画する大型のコントロール等書いて

これは要するに、Paintイベントなどでの処理を描くということでしょうか。

>「ネイティブ」の意味が分からないということ?

「自前で描画する大型のコントロール等」という場合に、そこに.NETFramework
のクラスで描画をするだけでよくて、いちいちAPIを使うことなく高速化できるという
ことでしょうか?

678:666
08/01/17 12:41:00
名前入れるの忘れました。

そのようにしてコントロールを高速化した場合、たとえば現在Form の右下を
つまんでリサイズすると、Formのサイズ変更がやたらと遅くてボーダーの移動が
ぱらぱらと目に見えて動きます。こういったことも高速になるでしょうか?

679:デフォルトの名無しさん
08/01/17 12:44:57
GDIのAPIを直接叩くGraphicsクラスみたいなのは作ったことあるぜ

680:デフォルトの名無しさん
08/01/17 12:45:19
たとえばTextBoxを100個WinFormに貼り付けて使うより、
普段はTextBoxの「ハリボテ」を100個描画しておいてユーザーがマウスポインタで
クリックしたときだけ本物のTextBoxを該当位置にひとつだけ表示するような
コントロールを自作した方が早いってことじゃない?

でもこの手のコントロールの自作ってかなり面倒なんだよね。
情報すくないから手探りでいろいろ調べる必要があったり。

681:デフォルトの名無しさん
08/01/17 12:54:09
>>678
そう。
同時にOnPaintBackgroundで一瞬背景色で塗られるなどのUI 的に不快な動作も直す。
Panel を Dock させてあれこれやるより、OnSizeChanged 等で自前でレイアウトする方が速いし。

ただ GDI+ の遅さは非力なPCでは如何ともしがたいところもあるので、低スペックPCでも
超軽快に動くようにしたいなら C++ でネイティブでやるより無いと思う。

682:666
08/01/17 13:03:35
>>679-681
いろいろご指導ありがとうございます!

>>680
>同時にOnPaintBackgroundで一瞬背景色で塗られるなどのUI 的に不快な動作も直す。

あの動きも改善方法があったんですね、うれしいです。自分でも実装できる
かどうかわかりませんが勉強してみます!

>Panel を Dock させてあれこれやるより、OnSizeChanged 等で自前でレイアウトする方が速いし。

このPanelのDockやDocking機能のコントロ-ルは使っていました。
そうすることなく自分でコントロールの移動やリサイズをさせた方が早い
のですね。いまからそれやると大変かとも思いましたが、今後の参考に致します!
勉強になります、ご指導ありがとうございました!!

683:666
08/01/17 13:07:33
>>682(訂正)
すみませんリンク先まちがえました。訂正>>680>>681
>ただ GDI+ の遅さは非力なPCでは如何ともしがたいところもあるので、低スペックPCでも
>超軽快に動くようにしたいなら C++ でネイティブでやるより無いと思う。
この件も頭に置いておきます。どうもでした!


684:デフォルトの名無しさん
08/01/17 23:54:33
フォルダのタイムスタンプについて教えてください。サブフォルダを追加してそこに
ファイルを作成して編集したりしてあるフォルダの中身が変化していましたが、
なぜかそのフォルダのタイムスタンプがその変更よりも前のままになっていました。
こうならずに、更新日時が反映されている場合もありました。これは何か更新される
ために必要な条件のようなものがあってそれが異なっているためなのでしょうか?


685:デフォルトの名無しさん
08/01/18 10:40:29
そりゃディレクトリエントリが更新された時刻だもの

686:684
08/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 を
そのまま使ったところ、音符マークのアイコンとは別のものが来たのでした)


687:デフォルトの名無しさん
08/01/18 16:11:30
わからんが、wmploc.dllを開いてみたら 734 に音符のアイコン入ってたけど。
マイナスは別の意味を持たせてるのかも?

688:684
08/01/18 17:24:42
>>687
あ、すみませんでした、一つ間違いがあることに気がつきました。とはいうものの、
プラスとしてやってみたもののそれでも取ることができませんでした。なんだろう、
映画のフイルムの絵のようなアイコンなのですが・・・。まずは、そのアイコンの
ビューワを探して見てみます、ありがとうございました。


689:デフォルトの名無しさん
08/01/18 17:34:14
アイコンはVisualStudioでDLL読んでみたんだけど、
EEだとリソースは無理か

690:デフォルトの名無しさん
08/01/18 18:43:00
>>686-687
0以上の値は、0からの連番で何個目という指定(シェルのアイコン指定のダイアログの順番)。
負の値は、絶対値がリソースIDを表すという指定。

691:デフォルトの名無しさん
08/01/18 19:15:16
>>690
あーそうだったのですか、わかりました。それでもう一度やってみます、
どうもありがとうございました!!

692:691
08/01/18 21:20:38
>>689-690
アイコンの取得に成功しました、ありがとうございました。助かりました!!


693:デフォルトの名無しさん
08/01/19 22:18:09
int / int で小数点が出てこないのはなんでだぜ?

694:デフォルトの名無しさん
08/01/19 22:19:29
その方が速いから

695:デフォルトの名無しさん
08/01/19 23:10:17
>>693
int/intの結果はintになると規格で決まってるから

696:デフォルトの名無しさん
08/01/19 23:11:29
LOG4NETで設定ファイルを使わずに、ソース上で出力先やAppenderの指定をできる方法ってありますか?
クライアントアプリケーションとして扱う場合に、ユーザに勝手に設定を弄られたくないから
LogManagerでApp.Configの設定を読むような方式にはしたくないのです。
ログ出力クラスを自作したほうが早いですかね?

697:デフォルトの名無しさん
08/01/19 23:49:42
そのまんまコードで初期化すりゃいいんでは?

698:696
08/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());

以上のコードでログが出ないか期待しましたがダメでした...

699:デフォルトの名無しさん
08/01/20 04:18:03
>698
log4netのソースを直に書き換えて埋め込んじゃえばいいんじゃない?

700:デフォルトの名無しさん
08/01/20 08:13:51
>>699 あほですか?

701:デフォルトの名無しさん
08/01/20 20:53:54
アホちゃいまんねん

702:デフォルトの名無しさん
08/01/20 20:59:58
パーでんねん

703:698
08/01/20 23:56:26
>699
なるべくOSSのモジュールはソース変更したくないんですよ。
ライセンスに従って公開しなきゃいけなくなっちゃうし。
公開するだけならまだ変更部分だけで済みそうですが、
公開するための環境を維持しておかなきゃいけなかったり、面倒です。

704:デフォルトの名無しさん
08/01/21 00:16:31
>703
log4netはアパッチライセンスだから融通が利くよ。

705:デフォルトの名無しさん
08/01/25 13:26:49
ParallelFXのParallel.Forで実行されるスレッド数はいじることができますか?

706:デフォルトの名無しさん
08/01/25 23:21:36
>>705
System.Threading.Tasks.TaskManagerPolicy
のコンストラクタで、minThreads, idealThreads, maxThreads を指定可能。

707:デフォルトの名無しさん
08/01/29 21:49:38
FlowLayoutPanelにコントロールを追加しているのですが、
下記のようなコードだと一瞬ちらつきます。
FlowLayoutPanelにBeginUpdate、EndUpdateのような描画を一時止めるようなメソッドはないでしょうか?

Panel.BeginUpdate;←のようなものありませんか?
Panel.Controls.Clear();←ここでクリアしてる為、一瞬まっさらになり、ちらつく
for (int i = 0; i < max; i++)
{
 Panel.Controls.Add( コントロール );
}
Panel.EndUpdate;←のようなものありませんか?

708:デフォルトの名無しさん
08/01/29 22:28:31
節穴?

SuspendLayout/ResumeLayout

709:デフォルトの名無しさん
08/01/29 23:21:31
PictureBoxの非同期読み込みみたいに、画像の読み込みを途中でキャンセルしたり
読み込み状況をモニターできるようにしたいです。
Image.FromFile等ではそのようなコールバックを指定できないようです。
どうやればいいのでしょうか?

710:デフォルトの名無しさん
08/01/29 23:26:44
ためしもしないで適当に書くと
Image.FromSteamに非同期Streamを渡せばいいんじゃね

711:デフォルトの名無しさん
08/01/30 00:02:26
>>710
Streamを自分で実装してReadの中でゴニョゴニョ、ってことでしょうか。
そういうやり方しかないんかなあ。

712:デフォルトの名無しさん
08/01/30 06:00:26
画像のデコード程度、キャンセルしたくなるほどの時間もかからんと思うが

713:デフォルトの名無しさん
08/01/30 17:05:46
Image.FromStreamするとImageが生きてる間はStreamも生きてなきゃダメなのか…
と思ってKB309482見て試してみたけど、アニメーションGIFだとダメだった…

714:デフォルトの名無しさん
08/01/30 19:33:03
DataSetを使ってレコード単位にDBを操作する場合に、
DataSet.DataTable.Rows[i]["カラム名"]
のような記述が必要になりますよね。
(DataGridのDataSourceを使えばそんな意識はしないですが)

この、文字列でカラム名を指定するのがイマイチだと思うのです。
文字列だからインテリセンスも効かないですし、打ち間違えの可能性も。

カラム名を入れたenumを作れば解決できるような気もしますが、
DataSetの中に既に定義があるのですから、それを流用できないでしょうか?

要するに、カラムをカラム名で指定する際に、intと文字列以外の方法が
あるでしょうか?

715:デフォルトの名無しさん
08/01/30 20:12:22
>>714
DataSet継承してカラム名をプロパティにしたクラスを作る。
VisualStudioでテーブルから自動生成すればできるだろ。

716:デフォルトの名無しさん
08/01/31 09:26:24
>>713
一旦 MemoryStream に読み込んでそっから Image 作ればいいよ

717:714
08/01/31 10:22:15
>>715
どうも有り難うございます。
しばらく考えているんですけれど、どうもイメージが浮かばないです。
DataSetを継承しても、汎用的なものは出来ないように思うのですが。

VSで自動生成と言う意味は、VSのデザイナで自動生成されたDataSetの
ソースを何らかの方法で解析して、カラム名を格納するという意味なのでしょうか‥‥。


718:デフォルトの名無しさん
08/01/31 13:51:08
>>717
厳密に型指定されたDataSetでググる。

DataSetをそのまま使うならカラムやその型の情報はクエリーの応答があるまでわからない。
その場合はカラム名の文字列か序数で指定するしかないな。

719:714
08/01/31 18:19:17
>>718
なるほど、DataSetを作る段階で別の種類のDataSetだったのですね。
どうも有り難うございます。調べてみます。

720:デフォルトの名無しさん
08/01/31 22:15:17

DBと接続して使うんじゃなく、dataset単独で簡易なデータベースとして使うなら、
プロジェクトに新規でxsd(スキーマ)を追加してテーブルやリレーション、キーを定義して、
いっぺんコンパイルすると、ツールボックスにdatasetを継承したdataset1(xsdファイルで定義した
名前による)コンポーネントが現れる。フォームのデザイナでこいつをD&Dしてやると型付けの
あるdatasetとして使えるよ。


721:デフォルトの名無しさん
08/02/01 02:47:42
表計算ソフトの=REPT(x;y)を模倣した自作関数をfprintfの第3引数以降に使う場合です。
rept(int x,int y)の記述にはfor,while,do〜whileのどれが適任でしょう?
回数を指定するyは0の場合もあります。


722:デフォルトの名無しさん
08/02/01 15:04:16
それは本当にC#の質問ですか

723:デフォルトの名無しさん
08/02/02 09:11:50
ウィンドウを持ったアプリケーションが起動されるのを
監視することはできますか?

724:デフォルトの名無しさん
08/02/02 12:20:47
できます。

725:723
08/02/02 13:09:26
>>724
やり方か調べるためのキーワードを教えていただけませんか?

726:デフォルトの名無しさん
08/02/02 13:19:43
findwindow

727:デフォルトの名無しさん
08/02/02 22:26:37
>712
画像のデコードがそこまで重いことはまずないと思うが、
ファイルアクセスが妙に遅延することはあると思うよ。
ノートンとかウイルスバスターがファイルアクセスに
むやみやたらに割り込むから信じられないくらい応答が返ってこないことがあったり。

728:デフォルトの名無しさん
08/02/02 22:51:34
や、それなら普通に事前にMemoryStreamに(非同期で)読んどけば良いじゃん?

729:デフォルトの名無しさん
08/02/02 22:59:01
画像がWeb上とかにあって数KBダウンロード毎に描画するんならキャンセルとかあってもいいかもしれんが、
既にハードディスクあるものを表示するだけで、わざわざキャンセルとか普通やらないな

730:デフォルトの名無しさん
08/02/05 20:08:01
.NETでATLのCComPtrみたいな
タイプライブラリのないInterfaceを扱う仕組みはあるですか?

731:デフォルトの名無しさん
08/02/05 20:26:03
Managed DirectX

732:デフォルトの名無しさん
08/02/05 21:38:05
自前でinterface再定義はできる Guid属性とかComImport属性とか使う
IDispatchならType.InvokeMemberでレイトバインディングもできる

733:デフォルトの名無しさん
08/02/05 23:35:42
std::exceptionにUNICODE入れると文字が壊れますか?

734:デフォルトの名無しさん
08/02/05 23:37:43
スレ違い

735:デフォルトの名無しさん
08/02/13 00:08:55
すみません、よろしければ
スレリンク(tech板:182-183番)
について教えてください。何卒よろしくお願いします。


736:デフォルトの名無しさん
08/02/13 00:36:45
その質問には答えるなということか。
了解した。

737:デフォルトの名無しさん
08/02/13 11:45:38
IPCをチャンネルに使ったリモーティングを使って、同一PC内でプロセス間通信を
しているのですが、厳密署名したら少し動かなくなりました。

Clinet.exeとServer.exeとRemote.dllの3つのプロジェクトからなるソリューションです。
それぞれのアセンブリに同一のsnkファイルで署名したところ、
Client.exeが、Server.exeからのコールバックのみを受け取れなくなりました。
クライアントからサーバへのメッセージングは今までどおりに出来ています。

こういうモノなのでしょうか?どなたかご存知の方がいらしたら、宜しくお願いします。



738:737
08/02/13 13:33:40
IpcChannel channel = new IpcChannel(properties,
 null, new BinaryServerFormatterSinkProvider(properties, null));

クライアントとサービスの両方を、上記の書き方で初期化したら出来ました。

739:デフォルトの名無しさん
08/02/13 21:14:32
SqlTransactionのCommit()のタイムアウト時間を変更したいのですが
どこで設定すればいいのでしょうか?
サーバーの負荷がでかいときにCommitのタイムアウト時間だけ短くてタイムアウトしてしまいます。

740:デフォルトの名無しさん
08/02/14 09:36:26
start tran somewhere here

SqlCommand cmd = new SqlCommand(mySqlCommand, conn);
cmd.CommandTimeout = 0; // NO TIMEOUT
cmd.ExecuteNonQuery();

commit here



741:デフォルトの名無しさん
08/02/14 09:58:26
>740
それで変わるのはExecuteNonQuery()のタイムアウト時間だけで
Commit()のタイムアウト時間は変わらないから困ってるんだよ。

742:デフォルトの名無しさん
08/02/14 10:23:36
なるほど。
しかし、"BEGIN TRANSACTION"と"COMMIT"をExecuteNonQueryで実行したら?


743:デフォルトの名無しさん
08/02/14 22:05:21
>742
確かにSqlTransactionのCommitもExecuteNonQueryでCOMMIT叩いてるだけにしか見えないのでそれでもいいかなとか思ってました…。
やってみたらそれで問題なく動いてしまったし。
SqlTransactionの存在意義がなくなってしまうけど仕方がないか。


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

5086日前に更新/202 KB
担当:undef