トップページ⇒tech
1001コメント344KB

ふらっとC♯(Part5)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
このスレッドは

「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。

ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。

少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。

前スレッドはこちら
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3)
http://pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1023766485/l50
0655デフォルトの名無しさんNGNG
VirtualModeみたいなもんか
0656デフォルトの名無しさんNGNG
C#の学習のためなら、もっと他にやることあるんじゃないのか…

と思ったら負けですか?
0657654NGNG
>>656
元々勝ち負けのない趣味のプログラムなのですが、
他にといわれても。文法から始めろと?
>>655
VirtualMode?を調べてみます。
ありがとうございます。
0658デフォルトの名無しさんNGNG
>>654
ReadLineで処理してるんじゃない?
だったら、ReadToEndで読んでみては?

FileStream fs = new FileStream("ファイルのパス",FileMode.Open);
StreamReader sr = new StreamReader(fs);
textBox1.Text = sr.ReadToEnd();

ところでVC#.Net2005っていつ発売なの?
はやく.Net Freamwork2.0を使ってみたい・・・
0659デフォルトの名無しさんNGNG
>>658
早くて来夏だろうねぇ。
環境があるなら、β1を試してみたら?
十分に正式版に向けて準備ができると思うけど。
それに、今ならAvalonのPreviewも出てて、楽しいと思うし。
0660デフォルトの名無しさんNGNG
Avalon previewは現状MSDN会員のみだよね?
0661デフォルトの名無しさんNGNG
フォームの最小化ボタンを押した時みたいに
this.Hide();
this.ShowInTaskbar = true;
と言う状態にしたいのですが何か方法があるのでしょうか?
0662デフォルトの名無しさんNGNG
>>661
それで良いんじゃないのか?
0663661NGNG
>>662
いや、やってみたら分かるけど
this.Hide();
とすると
this.ShowInTaskbarを弄っても反映されないみたい
Locationをどっか遠くに設定するしかないのかな?
0664デフォルトの名無しさんNGNG
this.WindowState = FormWindowState.Minimized;
じゃいかんの?
0665661NGNG
>>664
レスありがとうございます。
それでイケました。
0666デフォルトの名無しさんNGNG
C#でC++でいうマクロのようなものってあるんでしょうか?
マクロとテンプレート使ってトリッキーなことしてたのでそれをC#で実現する方法がわからなくて困ってます。
0667デフォルトの名無しさんNGNG
トリッキーな事はやらない方向にと言うのが言語の潮流。
0668デフォルトの名無しさんNGNG
そんな正論言ってもしゃーないやん
0669デフォルトの名無しさんNGNG
たぶん、むりぽ。次期バージョンでテンプレートはいるらしいけど。
0670デフォルトの名無しさんNGNG
テンプレートはかなり期待。
0671デフォルトの名無しさんNGNG
C++みたいなのだったらやだな。
へたに型とかみなくていいから、単にテンプレート変数を
自分の書いた文字で置き換わってコンパイルされるだけでいい。
そっちのがいろいろ使い道ある。
0672デフォルトの名無しさんNGNG
>>671
単純置換は止めてくれ。C++ の如くアセンブリが肥大化する。
0673デフォルトの名無しさんNGNG
>>671
むしろC++見たいなので、単純置換でないものがいいな、
もし型の置き換えだけであれば、テンプレートよりもメタクラスの実装の方が何倍も綺麗でいいと思うし。
てか、なんでメタクラスは実装されないんだろう……シクシクシク
0674デフォルトの名無しさんNGNG
>>673
メタクラスはクラスのクラスだっけか
smalltalk やった事無いから分からん
0675デフォルトの名無しさんNGNG
>>674
とどのつまり型を入れることのできる変数。
Metaclass a = int ;
a b ;
は
int b ;

たとえばこんな感じ
void Func( Metaclass T , int hoge , ... )
{
}

template 全くいらない
0676デフォルトの名無しさんNGNG
>>673リフレクションじゃだめなのか?
0677デフォルトの名無しさんNGNG
>>675
Type
0678デフォルトの名無しさんNGNG
>>677
それは何かが違う C++ でいえば typedef と type_info 型ぐらい違うな
0679デフォルトの名無しさんNGNG
もう型なんてなくていいよ
0680デフォルトの名無しさんNGNG
スクリプト言語で型無しではまったことないの?
0681デフォルトの名無しさんNGNG
C#(というか.NET)でLuaを使っているサンプルはどこかにないでしょうか。
当方で探しても見つかりませんでした。
0682デフォルトの名無しさんNGNG
>>681
それはこれのこと?
ttp://bandodalua.lua.inf.puc-rio.br/luanet/
0683デフォルトの名無しさんNGNG
ttp://www.codeproject.com/managedcpp/luanetwrapper.asp

> So what about executing Lua script in .NET applications?
> This should not be a major problem, just the matter of writing a managed C++ wrapper.
0684デフォルトの名無しさんNGNG
かなり基本な質問です、C/C++で書かれたライブラリ
(.NETとか関係なけりゃクラスすらないような)を、C#で
使用する方法は無いのでしょうか

なんとなくムリかなとは思うのですが、あまりに基本な
ためかどこのFAQを読んでもハッキリした答えがなくて
モヤモヤしてます。C/C++で作られた資産を移植しようと
すると、やはり手作業が入るものでしょうか
ズバッと斬ってやって下さい orz
0685デフォルトの名無しさんNGNG
P/Invokeという手法で使用できる。
例えばWin32API呼出もC用ライブラリの呼出と考えられる。
関数のエントリポイント、値渡し参照渡し、相互の型の対応などを考える必要はあるが、基本はこんな感じ。

[System.Runtime.Interopservices.DllImport("user32.dll")]
public static extern uint SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

詳しくはヘルプを見るべし。
ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpconconsumingunmanageddllfunctions.htm
0686デフォルトの名無しさんNGNG
>>684
DLLなら>>685の言うようにP/Invokeで利用可能。
そうでないなら、COMやDLLにするかManaged C++でラッパを書いて利用する。

漏れはP/InvokeメンドクサイのでCOMコンポーネント経由でやったりするのが好きなんだけど、
Windows XP以外ではインストーラが必須になるので嫌う向きもあるみたい。
0687デフォルトの名無しさんNGNG
>>675
おおーすげー便利そう・・・
C#2.0に欲しいなぁ

メタクラスで指定した型の戻り値が欲しい時はどうするの?
object Fanc( Metaclass T, int hoge, ...)
{
}
ならちとイヤーな感じw
0688デフォルトの名無しさんNGNG
>>675
リフレクションのシンタックスシュガーか・・
どんなときに便利なの?
0689デフォルトの名無しさんNGNG
>>675
それって実行時にすっ飛ぶんだよね
えらーしょりしにくくね?
0690デフォルトの名無しさんNGNG
>>675
C#の設計思想と全然合わないな。異物を混ぜるなって感じ。
0691デフォルトの名無しさんNGNG
>>675
悪くはないと思うけど、T 型を返すときはどうすんの?
0692デフォルトの名無しさんNGNG
>>685さん >>686さん ありがとうございます。

てっきりC++のコードが使えないと思ってたので
助かりました。安心してC#を勉強できそうです。
さっそくDLL作成のほうに手をつけてみます。
0693デフォルトの名無しさんNGNG
>>688
Type で reflection って面倒だから、シンタックスシュガーには意味あるんじゃない?
でもテンプレートの代わりにはならないような気が・・・

template <class T> T Max(T a, T b) なんてのから、型推論で T を導出してくれて
こそのテンプレートだし。若干 C++ マンセー入っちゃってるけど。
0694デフォルトの名無しさんNGNG
先に予想してみるテスト。

>>692
ポインタもWindowsのハンドルもIntPtr型だ。
0695デフォルトの名無しさんNGNG
漏れも

>>692
コールバックも書けるから安心してください(MSDN参照)。
0696デフォルトの名無しさんNGNG
>>693,688
シンタックスシュガーではないと思われ
0697デフォルトの名無しさんNGNG
>>691
boostとか見てると良く分かるけれど、戻り値が型推というのはバクダンになりやすいので、使わないというのは有りかと思います。
この形式ではやるとしたら構造体かなにかで型と実体のペアを作って返すしかないですね。

>>690
C#の設計思想など知りませんが、少なくともよりオブジェクト指向的ではあろうかと……
0698デフォルトの名無しさんNGNG
>>696
いや、シンタックスシュガーだと思うよ。だって、
・変数宣言ができる
・メソッド等のInvokeが普通の書き方でできる
っていう、純粋に記法の追加でしかないし。
即値を渡せばコンパイル時に型を決定して最適化はできるだろうけど・・
関係ないけど全然Metaclassじゃなくて単にClassだよね。

>>697
型推論はともかく、T Max(T a, T b) 程度が書けないのでは記述能力不足・・・
0699デフォルトの名無しさんNGNG
>>698
リフレクションをシンタックスシュガーということにしてしまうと、全てがシンタックスシュガーになってしまわないか?
それは何か違う気がするんだが・・・
0700デフォルトの名無しさんNGNG
>>699
リフレクションをシンタックスシュガーだと言っているのではなく、
>>675の「Metaclass」なるものは単なるリフレクションのシンタックスシュガーに過ぎない
と言ってるだけ。

Type T; があったとき、 T a = new T() なんて書けるとリフレクション使うときには便利、
それには同意する。
0701デフォルトの名無しさんNGNG
そうなのかな、どうにもこうにも拡大解釈としか捕らえられないのだが・・・
0702デフォルトの名無しさんNGNG
だって漏れは「リフレクションをシンタックスシュガーだということに・・・」って主張してないじゃん。
だから一体何をどう捕らえられているのかサッパリわかんない。
ケチらないでもう少し言いたいことを書いてよ。
0703デフォルトの名無しさんNGNG
>>702
ちょっと勘違いがあるかも、リフレクション機能を対象にしたシンタックスシュガーってのは変だと思うわけ。
リフレクションは基本的にこれがありとなると、もはや何でもありになってしまう。
何でもありな物をシンタックスシュガーだと主張するなら言語機能の全てがシンタックスシュガーということになってしまうが、
これは常識的なシンタックスシュガーの概念とは違うと思う。
シンタックスシュガーは元々定義があいまいなので、主観で貴方がそう思うというならそういう事としかいいようがないと思います。
0704デフォルトの名無しさんNGNG
>>703
よくわかった。漏れが>>715をシンタックスシュガーだと思ったのは、現行のTypeとの違いが
局所的な記法の違いだけだってとこから。
主観だけど構文が違うだけで機能が同じなら、それはやはりシンタックスシュガーだと思う。

C++のテンプレートが型推論機構のおかげで普通のチューリングマシンとしての機能を完備していて、
単なるマクロの便利な記法を脱却しているのと比べてしまうからそう思うのかもしれないけど。
0705デフォルトの名無しさんNGNG
ていうかシンタックスシュガーって何ですか。
0706デフォルトの名無しさんNGNG
>>705
分からないときにはとりあえずぐぐって下さいな
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&safe=off&ie=SJIS&oe=SJIS&q=%82%C4%82%A2%82%A4%82%A9%83V%83%93%83%5E%83b%83N%83X%83V%83%85%83K%81%5B%82%C1%82%C4%89%BD%82%C5%82%B7%82%A9%81B
0707デフォルトの名無しさんNGNG
シンタックスシュガーがあるのなら、シンタックスソルトとか、
シンタックスペッパーもあるのですか?
0708デフォルトの名無しさんNGNG
>>706
ぐぐった可能性を微塵も考慮しないあたりがステキ。

>>707
正露丸糖衣があるなら正露丸塩衣もあるのですか?
0709デフォルトの名無しさんNGNG
ていうか正露丸糖衣って何ですか。
0710デフォルトの名無しさんNGNG
>>709
C#に対するIDEみたいなもの。
0711692NGNG
>>692 >>695
ありがとうございます(T−T
間違いなくつっかえると思われます¢(。。;)

なお勉強はぼつぼつ進行しつつあり、予言の的中は
15日以降にスケジュールされております。
0712681NGNG
>>682
亀レス失礼。
どうもありがとうございます。
0713デフォルトの名無しさんNGNG
教えてください。
 C#でボタンをクリックすると指定したpdfファイルを印刷するような
プログラムを作成することはできますか?
 どうすればいいでしょうか?なにかヒントをお教えください。
0714デフォルトの名無しさんNGNG
君はどのくらいプログラミングが出来るのか、なにかヒントをお教えください。
0715デフォルトの名無しさんNGNG
・Process.Start
・"C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe" /p /h "%1"
0716713NGNG
>715
ありがとうございました。
おかげで印刷することができました。
複数枚を、印刷したい時や、ページを指定して印刷するときは
どのようにすればいいでしょうか?よろしくおねがいします。
0717デフォルトの名無しさんNGNG
・・・少しは自分で考えろ
0718デフォルトの名無しさんNGNG
>>716
馬鹿ハケーン
0719デフォルトの名無しさんNGNG
ファイルをゴミ箱に送るにはどうすればいいのでしょうか
0720デフォルトの名無しさんNGNG
>>719
ttp://www.google.com/search?num=100&hl=ja&lr=lang_ja&oe=utf8&q=C%23+%E3%81%94%E3%81%BF%E7%AE%B1
0721719NGNG
スミマセンデシタ orz
0722デフォルトの名無しさんNGNG
そのスレッドの参照を誰も持ってない場合に
実行中のスレッドが勝手にGCされちゃうことってあるの?

void Start()
{
 Thread thread = new Thread(new ThreadStart(new MyThread()));
 thread.Run(); // 作りっぱなし
}
0723デフォルトの名無しさんNGNG
>>722
ないから安心したまい。
実行環境が内部でスレッドを管理するので、参照は実は存在するから。
スレッドが行うメソッドが終了したらGCの対象になる。

細かい話だが、StartされないThreadオブジェクトは参照が無くなればGCの対象だが、
WeakReferenceでのみ参照を持っている状態でもGCの対象にならなくなるようだ。
0724デフォルトの名無しさんNGNG
しかしMutexが勝手にGCされてアプリの多重起動防止が効かなくなるということはあるらしいぞ
そのためGC対象から外すよう明示的に指示してやるのが良いそうだ
GC.KeepAlive(mutex);
ってな感じで
0725デフォルトの名無しさんNGNG
>>724
それはひょっとしたらSocketがListenした時にMutexが解放されてしまうと言うバグかな。
そうだとしたらGC.KeepAliveも無意味だよ。
そもそもGCの問題じゃないし。

.NET1.0はSP3では解決されてる。.NET2.0(のベータ)は初めから問題なし。
.NET1.1ではSP1でも未解決な、ちょっと頭の痛い問題だ。
TCPチャネルを使ったリモーティングですら解放されてしまうし。
0726デフォルトの名無しさんNGNG
そういえばInsider.NETの会議室にもう一つMutex絡みの話が出てた。
スレッドが終了する時に自動的にそのスレッドが所有するMutexを解放するって話。
0727デフォルトの名無しさんNGNG
フレームワークのクラスってたくさんあるじゃん。しかも意味不明。
0728デフォルトの名無しさんNGNG
誤爆乙
0729デフォルトの名無しさんNGNG
>>725
http://dobon.net/vb/dotnet/process/checkprevinstance.html
> ローカル変数として宣言したMutexを使った場合、うまく行かないことがあるようです(これに従い、
> ここで紹介しているサンプルも修正しました)。静的フィールドを使えば解決されますが、それ以外
> では、GC.KeepAliveメソッドを使用すれば解決できるようです。エントリポイントで二重起動を
> チェックする例を次に示します
0730デフォルトの名無しさんNGNG
あ、静的変数にしたら問題なくなった。

でもローカル変数のMutexをGC.KeepAliveしてもやっぱりSocketがListenすると解放される……。
0731デフォルトの名無しさんNGNG
Htmlをテキストとそのままと表示して、置換を使った簡単なエディタを作りたいなと思うのですが
WindowsアプリでローカルにあるHtmlファイルを表示することって出来るのでしょうか?
0732デフォルトの名無しさんNGNG
うぇぶくらいあんとつかえばいいのでは?
0733デフォルトの名無しさんNGNG
WebBrowserコンポーネントを使えばいいのでは?
0734731NGNG
レス有り難うございます。
キーワードを元に検索して参考になりそうなHPを見つけました。
これから頑張って作ってみます。
0735デフォルトの名無しさんNGNG
次期OSでの商用パッケージアプリってC#で開発されるのかな?
0736デフォルトの名無しさんNGNG
VisualStudioとか
0737デフォルトの名無しさんNGNG
つぎのofficeがC#ってのを聞いたことがある。
office2005の入ってる人は.netも入っていて
C#アプリも配布できるのだと。
0738デフォルトの名無しさんNGNG
Office2003も.NETでプラグインを作れたような。
…って、C#とは限らないか。
0739デフォルトの名無しさんNGNG
同一アプリケーションドメイン上に、同じキーを持つオブジェクトが1つしかない事を保証したい
singleton を変形し、同じキーで作成しようとしたら、以前作成したオブジェクトを返す
ただし、そのオブジェクトは GC に回収されるようにしたい

WeakReference を Hashtable 内に押し込むのが正解?
WeakReferenceTable オブジェクトとかって無いの?
0740デフォルトの名無しさんNGNG
C#でRemotingを使いたいのですが、MSDNやGDN以外で参考になるサイトはありますか?
ぐぐったのですが、ほとんど見あたりません・・・
0741デフォルトの名無しさんNGNG
>>740
慣れればそう複雑でも無い事が分かるから(奥は深そうだけど)、取りあえず自分で実際に試す事だね。
ttp://d.hatena.ne.jp/N0MURA/20040108
VB.NETだけど、こことか。
0742デフォルトの名無しさんNGNG
>>741
ありがとうございます、試してきます〜
0743デフォルトの名無しさんNGNG
>>740
本は丸ごと一冊リモーティングの本があったよね
お試しとかでなく実用として遣うなら買うことお勧め。時間の短縮分で元が取れると思う。
0744デフォルトの名無しさんNGNG
かなり頭が悪いのですが、よろしくお願いします。
以下のようなメソッドがあると仮定します。

メソッド {
if (略) {
bool a
result1 = true;
}

if (略) {
bool result2;
result2 = true;
}

if (result1 == true || result2 == true) {
(終了);
}

}

result1 とresult2 がtrueになったときに
一番下の(終了)という部分を実行したいのですが、
ビルドをすると「未割り当てのローカル変数が参照されました。」と
表示されエラーになってしまいますが、何が原因なのでしょうか。
よろしくおねがいします。
0745デフォルトの名無しさんNGNG
変数のスコープ http://wisdom.sakura.ne.jp/programming/cs/cs23.html
0746デフォルトの名無しさんNGNG
C♯ソースコードのステップ数とかを評価してくれるソフトってない?
C++とかのは見かけるんだけど
0747デフォルトの名無しさんNGNG
>>746
ドットネットのすてっぷカウント♪
ttp://www.vector.co.jp/soft/win95/prog/se327186.html
とかどうだろう。
0748yuuteenNGNG
こんにちわ。
初めて書き込ませて頂きます。
C#のSystem.Diagnostics.Process.GetProcessesプロシージャが
Windows2000では失敗すると、下記のサイトにあるのですが、

http://support.microsoft.com/kb/823642/ja#kb3

何故、なのでしょうか?
それと、どうやったら、失敗しないのでしょうか?

誰か、助けて!!

0749デフォルトの名無しさんNGNG
>>748

パフォーマンスカウンタに関する問題が原因だったような。
書いてあるように HotFix を入手するか、違う方法を考えればよし。

特に、二重起動防止をやりたいのなら、これじゃなくて、Mutex を
使うほうがいいよ。
0750746NGNG
>>747
ズバリでした
探しそびれていたようで。
痛み入りますorz
0751yuuteenNGNG
>>749
ありがとうございます。
確かにおっしゃる通りで、HotFixを入手する手も考えたのですが
そもそも、根本的に二重起動チェックの方法が悪いのではというところで 悩んでいました。
ちなみに、バッチの二重起動チェックなのですが...。
下記がMutexを使用した場合のソースなのですが こんな感じなのでしょうか?
また、"MyName"は他の文字列と置換え可能だと、サンプルを見る限り
書いてあったのですが、バッチの二重起動チェックの場合、何をここに
記述しなくてはいけないのですか?
二重起動チェック処理は共通関数化して行う予定です。 ご教授下さい。
///////////////////////////////////////////////////////////////////////////
bool exit = false;
System.Threading.Mutex m = new System.Threading.Mutex(false, "MyName");

if (m.WaitOne(0, false) == false)
{
//すでに起動していると判断する
m.close();
exit = true;
}
else
{
exit = flse;
}
//アプリケーションが終わるまでmへの参照を維持するようにする
GC.KeepAlive(m);
}
///////////////////////////////////////////////////////////////////////////
0752デフォルトの名無しさんNGNG
>//アプリケーションが終わるまでmへの参照を維持するようにする
>GC.KeepAlive(m);
GC.KeepAliveはそういう仕様ではありません。

こんなクラスを使えば良いでしょう。

class Hoge {
 System.Threading.Mutex _m;
 boole _is_ok;
 public Hoge(string id)
 {
  _m = new System.Threading.Mutex(false, id);
  _is_ok = _m.WaitOne(0, false);
 }
 public ~Hoge()
 {
  _m.Close();
 }
 public bool IsOK { get { return _is_ok; } }
}

使い方
class YourApp {
 Hoge _hoge = new Hoge("YourAppName"); // メンバ変数等、アプリが終了するまで残る変数に入れること。
 public void Main()
 {
  if ( !_hoge.IsOK ) return;
  ...
 }
}
0753デフォルトの名無しさんNGNG
>>751
よく動いてる仕組みもわからず使う気になりますね
全部を詳細に把握しろとは言いませんが。
0754デフォルトの名無しさんNGNG
コマンドラインコンパイルの方法教えてください。
javac 〜.javaみたく扱いたいんで。
■ このスレッドは過去ログ倉庫に格納されています