トップページ⇒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
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みたく扱いたいんで。
0755デフォルトの名無しさんNGNG
>>754
知ってるけど秘密 c?c だな
0756デフォルトの名無しさんNGNG
csc.exeでヘルプを調べる
0757デフォルトの名無しさんNGNG
>>755
ば〜かww
0758デフォルトの名無しさんNGNG
cscでやれば、ソリューションファイル、プロジェクトファイル、
アセンブリインフォファイルはいらないんだよ。
0759デフォルトの名無しさんNGNG
ノリの悪い奴がいるな
ちぃー
0760デフォルトの名無しさんNGNG
>>755
こういう奴、正直寒い。同じボケるにしてもボケ方ってものがあると思う。
0761755NGNG
↑必死だなwwwwwww
0762デフォルトの名無しさんNGNG
オマエモナー
0763デフォルトの名無しさんNGNG
Bitmap bmp = new Bitmap(100,100);

Graphics g = Graphics.FromImage(bmp);
bmp.MakeTransparent(Color.Red); 
g.FillRectangle(Brushes.Aqua, 0, 0, 100, 100);
g.Dispose();

MakeTransparentを呼び出すと、その後のGraphicsオブジェクトを利用しての描画が出来ないのですが、どうしてでしょうか?
0764デフォルトの名無しさんNGNG
Graphicsオブジェクトを作ってからbmpに変更を加えているコードに違和感を感じる。。。
0765デフォルトの名無しさんNGNG
質問です。
マイク端子から音声を取り込むのってどうやるんですか?
0766デフォルトの名無しさんNGNG
>>765
↓こっちで聞いた方がいいと思われ。
Managed DirectX vol.2
http://pc5.2ch.net/test/read.cgi/tech/1061285378/
0767デフォルトの名無しさんNGNG
>>765
この辺。
1)Win32APIでやる(C#である意味がかなり薄れるとは思うが)
ttp://wisdom.sakura.ne.jp/system/winapi/media/mm7.html

2)Managed DirectXでやる
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/directx9_m/directx/sound/capturingwaveforms/creatingthecaptureobject.asp
0768デフォルトの名無しさん05/01/17 11:14:41
>>766
>>767
ありがとん。
0769デフォルトの名無しさん05/01/17 14:41:07
static なArrayListのCountを覗こうとするとエラーがでるんですが
例
class Test
{
static ArrayList momo = new ArrayLIst();
static int Count { get { return Test.momo.Count; } }
}
こんな感じで何かしらAddしたものがあればエラーはでないんですが、
0だと駄目です。
trycatchでつかもうとしても駄目。

メッセージ
'System.ArgumentOutOfRangeException' のハンドルされていない例外が system.windows.forms.dll で発生しました。

追加情報 : 指定された引数は、有効な値の範囲内にありません。

0770デフォルトの名無しさん05/01/17 16:33:51
>>769
初期値をいれ時計
0771デフォルトの名無しさん05/01/17 19:27:43
すまんが、C#だと
catch(Exception e)で全部もれなく捕らえられるんでしょうか?
0772デフォルトの名無しさん05/01/17 19:38:16,
>>769
予言するけど、それは多分別の箇所でmomo[0]とかしているせい。
momo を static プロパティにでもして get に breakpoint 置いて見てみるべし。
0773デフォルトの名無しさん05/01/17 21:10:20
>771
できます。
throwできるのはSystem.Exceptionから派生したクラスのインスタンス、またはnullだから。
用途によってはcatchの後を省略してもオケー

private void Form1_Load(object sender, System.EventArgs e)
{
    try
    {
        Nullpo();
    }
    catch
    {
        MessageBox.Show("ガッ");
    }
}

private void Nullpo()
{
    throw null;
}
0774デフォルトの名無しさん05/01/18 19:54:35
ArrayL"I"st
0775デフォルトの名無しさん05/01/18 20:19:07
>>771
捕まえても逃げるものがあるから注意よん
ThreadAbortException とか
0776デフォルトの名無しさん05/01/18 23:08:21
>>775
確認のために聞きたいのですが、「捕まえても逃げる」っていうのは
> ThreadAbortException は、キャッチできても、 catch ブロックの末尾でもう一度自動的に発生する特殊な例外です。
ってことを言ってます?

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemThreadingThreadAbortExceptionClassTopic.asp
0777デフォルトの名無しさん05/01/19 12:06:00
>>775
とか?とかなのか?
0778デフォルトの名無しさん05/01/19 19:56:57
例外だけに例外がありました。
0779デフォルトの名無しさん05/01/19 20:19:45
( ´д)ヒソ(´д`)ヒソ(д` )ヒソ
0780デフォルトの名無しさん05/01/20 01:41:24
冷害
0781デフォルトの名無しさん05/01/20 21:02:08
Regex reg = new Regex(pat , ここのオプション );
というのが沢山在るんですが、オプション部分が全て同じなので、
変数を使いたいのですが、変数って使えますか?
RegexOptions option = RegexOptions..IgnoreCase | RegexOptions.ExplicitCapture;
のようにしてみたけどやっぱりエラーでした
0782デフォルトの名無しさん05/01/20 21:03:33
使えます。
0783デフォルトの名無しさん05/01/20 21:07:10
どんなエラーが出たってんだ?

> RegexOptions..IgnoreCase
ここがポイントか?
0784デフォルトの名無しさん05/01/20 21:22:12
そういう場合は、変に省略せずソース丸ごと貼り付けろ。すぐに分かる。
■ このスレッドは過去ログ倉庫に格納されています