ふらっと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例えば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デフォルトの名無しさん
NGNGDLLなら>>685の言うようにP/Invokeで利用可能。
そうでないなら、COMやDLLにするかManaged C++でラッパを書いて利用する。
漏れはP/InvokeメンドクサイのでCOMコンポーネント経由でやったりするのが好きなんだけど、
Windows XP以外ではインストーラが必須になるので嫌う向きもあるみたい。
0687デフォルトの名無しさん
NGNGおおーすげー便利そう・・・
C#2.0に欲しいなぁ
メタクラスで指定した型の戻り値が欲しい時はどうするの?
object Fanc( Metaclass T, int hoge, ...)
{
}
ならちとイヤーな感じw
0688デフォルトの名無しさん
NGNGリフレクションのシンタックスシュガーか・・
どんなときに便利なの?
0689デフォルトの名無しさん
NGNGそれって実行時にすっ飛ぶんだよね
えらーしょりしにくくね?
0690デフォルトの名無しさん
NGNGC#の設計思想と全然合わないな。異物を混ぜるなって感じ。
0691デフォルトの名無しさん
NGNG悪くはないと思うけど、T 型を返すときはどうすんの?
0692デフォルトの名無しさん
NGNGてっきりC++のコードが使えないと思ってたので
助かりました。安心してC#を勉強できそうです。
さっそくDLL作成のほうに手をつけてみます。
0693デフォルトの名無しさん
NGNGType で reflection って面倒だから、シンタックスシュガーには意味あるんじゃない?
でもテンプレートの代わりにはならないような気が・・・
template <class T> T Max(T a, T b) なんてのから、型推論で T を導出してくれて
こそのテンプレートだし。若干 C++ マンセー入っちゃってるけど。
0694デフォルトの名無しさん
NGNG>>692
ポインタもWindowsのハンドルもIntPtr型だ。
0695デフォルトの名無しさん
NGNG>>692
コールバックも書けるから安心してください(MSDN参照)。
0696デフォルトの名無しさん
NGNGシンタックスシュガーではないと思われ
0697デフォルトの名無しさん
NGNGboostとか見てると良く分かるけれど、戻り値が型推というのはバクダンになりやすいので、使わないというのは有りかと思います。
この形式ではやるとしたら構造体かなにかで型と実体のペアを作って返すしかないですね。
>>690
C#の設計思想など知りませんが、少なくともよりオブジェクト指向的ではあろうかと……
0698デフォルトの名無しさん
NGNGいや、シンタックスシュガーだと思うよ。だって、
・変数宣言ができる
・メソッド等のInvokeが普通の書き方でできる
っていう、純粋に記法の追加でしかないし。
即値を渡せばコンパイル時に型を決定して最適化はできるだろうけど・・
関係ないけど全然Metaclassじゃなくて単にClassだよね。
>>697
型推論はともかく、T Max(T a, T b) 程度が書けないのでは記述能力不足・・・
0699デフォルトの名無しさん
NGNGリフレクションをシンタックスシュガーということにしてしまうと、全てがシンタックスシュガーになってしまわないか?
それは何か違う気がするんだが・・・
0700デフォルトの名無しさん
NGNGリフレクションをシンタックスシュガーだと言っているのではなく、
>>675の「Metaclass」なるものは単なるリフレクションのシンタックスシュガーに過ぎない
と言ってるだけ。
Type T; があったとき、 T a = new T() なんて書けるとリフレクション使うときには便利、
それには同意する。
0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNGだから一体何をどう捕らえられているのかサッパリわかんない。
ケチらないでもう少し言いたいことを書いてよ。
0703デフォルトの名無しさん
NGNGちょっと勘違いがあるかも、リフレクション機能を対象にしたシンタックスシュガーってのは変だと思うわけ。
リフレクションは基本的にこれがありとなると、もはや何でもありになってしまう。
何でもありな物をシンタックスシュガーだと主張するなら言語機能の全てがシンタックスシュガーということになってしまうが、
これは常識的なシンタックスシュガーの概念とは違うと思う。
シンタックスシュガーは元々定義があいまいなので、主観で貴方がそう思うというならそういう事としかいいようがないと思います。
0704デフォルトの名無しさん
NGNGよくわかった。漏れが>>715をシンタックスシュガーだと思ったのは、現行のTypeとの違いが
局所的な記法の違いだけだってとこから。
主観だけど構文が違うだけで機能が同じなら、それはやはりシンタックスシュガーだと思う。
C++のテンプレートが型推論機構のおかげで普通のチューリングマシンとしての機能を完備していて、
単なるマクロの便利な記法を脱却しているのと比べてしまうからそう思うのかもしれないけど。
0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNG分からないときにはとりあえずぐぐって下さいな
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ぐぐった可能性を微塵も考慮しないあたりがステキ。
>>707
正露丸糖衣があるなら正露丸塩衣もあるのですか?
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGC#に対するIDEみたいなもの。
0711692
NGNGありがとうございます(T−T
間違いなくつっかえると思われます¢(。。;)
なお勉強はぼつぼつ進行しつつあり、予言の的中は
15日以降にスケジュールされております。
0713デフォルトの名無しさん
NGNGC#でボタンをクリックすると指定したpdfファイルを印刷するような
プログラムを作成することはできますか?
どうすればいいでしょうか?なにかヒントをお教えください。
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG・"C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe" /p /h "%1"
0716713
NGNGありがとうございました。
おかげで印刷することができました。
複数枚を、印刷したい時や、ページを指定して印刷するときは
どのようにすればいいでしょうか?よろしくおねがいします。
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG馬鹿ハケーン
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNGttp://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
0721719
NGNG0722デフォルトの名無しさん
NGNG実行中のスレッドが勝手にGCされちゃうことってあるの?
void Start()
{
Thread thread = new Thread(new ThreadStart(new MyThread()));
thread.Run(); // 作りっぱなし
}
0723デフォルトの名無しさん
NGNGないから安心したまい。
実行環境が内部でスレッドを管理するので、参照は実は存在するから。
スレッドが行うメソッドが終了したらGCの対象になる。
細かい話だが、StartされないThreadオブジェクトは参照が無くなればGCの対象だが、
WeakReferenceでのみ参照を持っている状態でもGCの対象にならなくなるようだ。
0724デフォルトの名無しさん
NGNGそのためGC対象から外すよう明示的に指示してやるのが良いそうだ
GC.KeepAlive(mutex);
ってな感じで
0725デフォルトの名無しさん
NGNGそれはひょっとしたらSocketがListenした時にMutexが解放されてしまうと言うバグかな。
そうだとしたらGC.KeepAliveも無意味だよ。
そもそもGCの問題じゃないし。
.NET1.0はSP3では解決されてる。.NET2.0(のベータ)は初めから問題なし。
.NET1.1ではSP1でも未解決な、ちょっと頭の痛い問題だ。
TCPチャネルを使ったリモーティングですら解放されてしまうし。
0726デフォルトの名無しさん
NGNGスレッドが終了する時に自動的にそのスレッドが所有するMutexを解放するって話。
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNGhttp://dobon.net/vb/dotnet/process/checkprevinstance.html
> ローカル変数として宣言したMutexを使った場合、うまく行かないことがあるようです(これに従い、
> ここで紹介しているサンプルも修正しました)。静的フィールドを使えば解決されますが、それ以外
> では、GC.KeepAliveメソッドを使用すれば解決できるようです。エントリポイントで二重起動を
> チェックする例を次に示します
0730デフォルトの名無しさん
NGNGでもローカル変数のMutexをGC.KeepAliveしてもやっぱりSocketがListenすると解放される……。
0731デフォルトの名無しさん
NGNGWindowsアプリでローカルにあるHtmlファイルを表示することって出来るのでしょうか?
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG0734731
NGNGキーワードを元に検索して参考になりそうなHPを見つけました。
これから頑張って作ってみます。
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGoffice2005の入ってる人は.netも入っていて
C#アプリも配布できるのだと。
0738デフォルトの名無しさん
NGNG…って、C#とは限らないか。
0739デフォルトの名無しさん
NGNGsingleton を変形し、同じキーで作成しようとしたら、以前作成したオブジェクトを返す
ただし、そのオブジェクトは GC に回収されるようにしたい
WeakReference を Hashtable 内に押し込むのが正解?
WeakReferenceTable オブジェクトとかって無いの?
0740デフォルトの名無しさん
NGNGぐぐったのですが、ほとんど見あたりません・・・
0741デフォルトの名無しさん
NGNG慣れればそう複雑でも無い事が分かるから(奥は深そうだけど)、取りあえず自分で実際に試す事だね。
ttp://d.hatena.ne.jp/N0MURA/20040108
VB.NETだけど、こことか。
0742デフォルトの名無しさん
NGNGありがとうございます、試してきます〜
0743デフォルトの名無しさん
NGNG本は丸ごと一冊リモーティングの本があったよね
お試しとかでなく実用として遣うなら買うことお勧め。時間の短縮分で元が取れると思う。
0744デフォルトの名無しさん
NGNG以下のようなメソッドがあると仮定します。
メソッド {
if (略) {
bool a
result1 = true;
}
if (略) {
bool result2;
result2 = true;
}
if (result1 == true || result2 == true) {
(終了);
}
}
result1 とresult2 がtrueになったときに
一番下の(終了)という部分を実行したいのですが、
ビルドをすると「未割り当てのローカル変数が参照されました。」と
表示されエラーになってしまいますが、何が原因なのでしょうか。
よろしくおねがいします。
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNGC++とかのは見かけるんだけど
0747デフォルトの名無しさん
NGNGドットネットのすてっぷカウント♪
ttp://www.vector.co.jp/soft/win95/prog/se327186.html
とかどうだろう。
0748yuuteen
NGNG初めて書き込ませて頂きます。
C#のSystem.Diagnostics.Process.GetProcessesプロシージャが
Windows2000では失敗すると、下記のサイトにあるのですが、
http://support.microsoft.com/kb/823642/ja#kb3
何故、なのでしょうか?
それと、どうやったら、失敗しないのでしょうか?
誰か、助けて!!
0749デフォルトの名無しさん
NGNGパフォーマンスカウンタに関する問題が原因だったような。
書いてあるように HotFix を入手するか、違う方法を考えればよし。
特に、二重起動防止をやりたいのなら、これじゃなくて、Mutex を
使うほうがいいよ。
0751yuuteen
NGNGありがとうございます。
確かにおっしゃる通りで、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>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よく動いてる仕組みもわからず使う気になりますね
全部を詳細に把握しろとは言いませんが。
0754デフォルトの名無しさん
NGNGjavac 〜.javaみたく扱いたいんで。
0755デフォルトの名無しさん
NGNG知ってるけど秘密 c?c だな
0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNGば〜かww
0758デフォルトの名無しさん
NGNGアセンブリインフォファイルはいらないんだよ。
0759デフォルトの名無しさん
NGNGちぃー
0760デフォルトの名無しさん
NGNGこういう奴、正直寒い。同じボケるにしてもボケ方ってものがあると思う。
0761755
NGNG0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNGGraphics g = Graphics.FromImage(bmp);
bmp.MakeTransparent(Color.Red);
g.FillRectangle(Brushes.Aqua, 0, 0, 100, 100);
g.Dispose();
MakeTransparentを呼び出すと、その後のGraphicsオブジェクトを利用しての描画が出来ないのですが、どうしてでしょうか?
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGマイク端子から音声を取り込むのってどうやるんですか?
0766デフォルトの名無しさん
NGNG↓こっちで聞いた方がいいと思われ。
Managed DirectX vol.2
http://pc5.2ch.net/test/read.cgi/tech/1061285378/
0767デフォルトの名無しさん
NGNGこの辺。
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>>767
ありがとん。
0769デフォルトの名無しさん
05/01/17 14:41:07例
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初期値をいれ時計
0771デフォルトの名無しさん
05/01/17 19:27:43catch(Exception e)で全部もれなく捕らえられるんでしょうか?
0772デフォルトの名無しさん
05/01/17 19:38:16,予言するけど、それは多分別の箇所でmomo[0]とかしているせい。
momo を static プロパティにでもして get に breakpoint 置いて見てみるべし。
0773デフォルトの名無しさん
05/01/17 21:10:20できます。
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:350775デフォルトの名無しさん
05/01/18 20:19:07捕まえても逃げるものがあるから注意よん
ThreadAbortException とか
0776デフォルトの名無しさん
05/01/18 23:08:21確認のために聞きたいのですが、「捕まえても逃げる」っていうのは
> 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とか?とかなのか?
0778デフォルトの名無しさん
05/01/19 19:56:570779デフォルトの名無しさん
05/01/19 20:19:450780デフォルトの名無しさん
05/01/20 01:41:240781デフォルトの名無しさん
05/01/20 21:02:08というのが沢山在るんですが、オプション部分が全て同じなので、
変数を使いたいのですが、変数って使えますか?
RegexOptions option = RegexOptions..IgnoreCase | RegexOptions.ExplicitCapture;
のようにしてみたけどやっぱりエラーでした
0782デフォルトの名無しさん
05/01/20 21:03:330783デフォルトの名無しさん
05/01/20 21:07:10> RegexOptions..IgnoreCase
ここがポイントか?
0784デフォルトの名無しさん
05/01/20 21:22:12■ このスレッドは過去ログ倉庫に格納されています