13/07/11 23:17:44.42
今リフレクションをゴリゴリ使って遊んでるけど、
足りてるようで色々と足りてないところがとても気になるところだ。
フィールドの型が構造体の場合、
そのフィールドを GetValue するとボックス化された値が返されるので、
その値を編集しても元のフィールドに影響が出ない。
構造体配列でも同じことが起きる。
仮想メソッドをオーバーライドした場合、
基底クラスのそのメソッドを派生クラスのオブジェクトを使って
リフレクションで呼ぶ手段が無い。
前者は構造体を編集した後にまたフィールドに代入し直すことで、
後者は基底クラスのメソッドに処理を委譲するだけのメソッドを派生クラスに用意する事で
なんとか動くようにはしたけど、
リフレクションすれば private メンバにまでアクセスできるんだし、
もうちょっと何とかなる手段が欲しい所。
他に何かいい手段ないですかね?
43:デフォルトの名無しさん
13/07/11 23:59:25.64
>>42
少なくとも前者に関してはそれを問題だと思うことの方が間違ってる気が
44:デフォルトの名無しさん
13/07/12 00:05:40.27
>>42
前者は__makerefで参照を取得してFieldInfo.SetValueDirect
後者はDynamicMethodとILGeneratorを使用してcallvirtではなくcall命令を発行
45:デフォルトの名無しさん
13/07/12 07:34:18.83
>>44
それは分かってるんだけど、
全て動的に解決しないといけない状況だからできないんだよね
__makeref も Emit もコンパイル時に型やメソッドが判明していないと使えないから
46:デフォルトの名無しさん
13/07/12 07:36:04.69
いや、違った
__makeref は TypedReference が持ち回りでいないから使えないんだった
47:デフォルトの名無しさん
13/07/12 16:35:26.25
教えてください~!!
.NETのIPCチャネルを使用してプロセス間通信を実現したいのですが、
サーバ側のプロセスが再起動した場合、クライアント側では何を基準
に再接続すればいいのでしょうか?
また、有効期限(InitializeLifetimeService)が無限にしているのですが、
それって、サーバのプロセスが終了すると解放してくれますか?
よろしくお願いいたしますm(_ _)m
48:47
13/07/12 16:47:23.75
ちなみにクライアントは「受け」だけで、クライアントから要求することはありません。
49:デフォルトの名無しさん
13/07/12 16:49:13.90
再接続?
.NET RemotingにせよWCFにせよメソッド呼び出しの形式なんだから
普通は接続なんて意識しないと思うのだけど
> それって、サーバのプロセスが終了すると解放してくれますか?
そうじゃなきゃ一体どこに実体を持つってのさ
50:デフォルトの名無しさん
13/07/12 17:12:58.69
>.NETのIPCチャネル
そんなものはありません
51:47
13/07/12 17:33:47.24
>>再接続というのは
再起動後のサーバーのオブジェクトを参照できるようにしたい。と言う意味です。
方法として、オブジェクトにIDisposableかなにか入れて、Disposeが呼ばれたときに
フラグを立てて、クライアントに再接続要求を出すくらいでしょうか・・・
.NETでIPCチャネルでした。すいません。
52:デフォルトの名無しさん
13/07/12 17:46:32.31
基本的にメソッド呼び出しの度に接続するんだから再接続も何もないって話なんだけど
サーバ側のシングルトンオブジェクトが再作成されたときにクライアントが処理を行いたい?
あと一般的にクライアントがサーバオブジェクトを呼び出す形だが
クライアントが受けて要求することはないって構造がよく分からん
53:47
13/07/12 17:54:03.05
MarshalByRefObjectにイベントをつけて以下の様にする予定です。
public class Test:MarshalByRefObject
{
public event Action<bool> TestEvent;
public void OnTestEvent(bool test)
{
if (TestEvent != null)
TestEvent(test);
}
}
クライアントはサーバーオブジェクトのTestEventにデリゲートを関連付ける
といった形です。
この場合に、サーバーのオブジェクトがリリース(解放)されたかどうかを
どうやってクライアントが知り得るのでしょうか?
54:デフォルトの名無しさん
13/07/12 17:58:58.89
サーバーからクライアントへ「これから破棄するよ」って送るか、
クライアント側からアクセスした時にアクセスできないことから判断する
55:デフォルトの名無しさん
13/07/15 02:13:45.57
質問なんですが
56:デフォルトの名無しさん
13/07/15 03:13:34.85
お断りだ
57:デフォルトの名無しさん
13/07/15 07:08:59.81
お、男割りで
58:デフォルトの名無しさん
13/07/15 15:09:25.12
質問です。
public class A{
string text;
public A(string text){
}
}
59:デフォルトの名無しさん
13/07/15 15:12:09.20
クラス内の変数なのかどうかがわかるように変数名決めたほうがいい
60:デフォルトの名無しさん
13/07/15 15:16:13.90
難解な質問だな
61:デフォルトの名無しさん
13/07/15 15:16:51.14
書いてる途中で送信してしまいました。
しかも書いてる途中でなんとなく自己解決できてしまったので、
とりあえず忘れてください。もうしわけございませんでした。
62:デフォルトの名無しさん
13/07/15 20:07:11.34
質問なんですが
visualstudioでSQLサーバーを使って
所持しているマンガの在庫管理プログラム的なものを作ったんですが
そのプログラムをソケット通信を使って
自分のパソコンをサーバーにして
別のパソコンで動かすようにするのは可能でしょうか?
もし可能ならやり方を教えていただけないでしょうか?
63:デフォルトの名無しさん
13/07/15 20:13:40.65
わざわざソケット使わないと駄目なの?
それは要件か?
接続文字列弄るだけで接続できんだろ
URLリンク(msdn.microsoft.com)
それともサーバープログラムはSQLサーバーとは別に存在させたいのか?
それならSQLは本質的に全く関係ないね
64:デフォルトの名無しさん
13/07/15 23:48:35.71
ソケットの勉強を始めようと思って
自分の作ったものでソケットとつなげたいと思ったんですが
そういう設定があったんですね。
では他にソケットを勉強するにはどういうものがあるでしょうか?
65:デフォルトの名無しさん
13/07/16 00:21:30.42
時代遅れだろ
ASP.NETでサーバー側だけで作るか、
DB-Webサービス-HTTP-クライアント の構成にすればいいのに
66:デフォルトの名無しさん
13/07/16 00:30:32.38
定番はチャット
67:デフォルトの名無しさん
13/07/16 08:49:50.34
C#で作ったアプリを他のPCで動かしたいのですが
「○○が見つかりません」とか「○○が登録されてません」とかで、
結局、開発環境をインストールして1回ビルドするまでは、
起動できませんでした。
Visual C# 2010 Express
追加の参照設定
MSScriptControl、AxWMPLb
VisualBasic.PowerPacks
これらに必要なファイルをコピー・登録して
アプリを実行できるようにする
無料のインストーラはありますか?
または、コピー・登録をバッチで実行するような
方法がありますか?
68:デフォルトの名無しさん
13/07/16 09:14:35.19
そういう時は再頒布でぐぐれ
69:デフォルトの名無しさん
13/07/16 10:36:41.15
>>68 ありがとうございます
VisualBasic.PowerPacksのインストーラを見つけられたのですが、
AxWMPLibがインストールされているにもかかわらず
登録されてませんとでます。
また、MSScriptControlは関係なかったようです。
70:デフォルトの名無しさん
13/07/16 11:24:41.97
そもそもVisualBasic.PowerPacksなんて使うなハゲ
Microsoft.VisualBasic.PowerPacks.Vs.dll は単体配布は認められてないみたいですね。
AxInterop.WMPLib.dllとかInterop.WMPLib.dllみたいなファイルが実行ファイルと同じフォルダにできてませんか?
それを一緒に配布せんかいヅルムケが
71:デフォルトの名無しさん
13/07/16 11:29:00.79
激しく正論
72:デフォルトの名無しさん
13/07/16 12:08:33.45
インストーラーの作成すら理解してないとかコーディング以前の問題だろwww
しかもExpressなのに2008~2012と一番糞重い2010使ってるとかワロスwww
初心者質問スレいけよカスwww
73:デフォルトの名無しさん
13/07/16 12:20:26.07
>>72
おまえは消えろ
74:デフォルトの名無しさん
13/07/16 12:43:45.10
>>70 ありがとうございます。
PowerPacksはLineShapeのために使ってます。
他に、線を引くだけの良い手段があったら教えてください。
AxInterop.WMPLib.dllとInterop.WMPLib.dllが同じフォルダに出来ていて
一緒にコピーしましたが、変りませんでした。
DebugフォルダまたはReleaseフォルダごとコピーしましたが同様でした。
>>72
新しいプロジェクトの一覧にインストーラがありませんでした。
他のインストーラでも良いので、無料で利用できるものがあったら教えてください。
普段は2010のプロジェクトを2012で開いてますが、
やはりインストーラのプロジェクトはありませんでした。
75:デフォルトの名無しさん
13/07/16 13:10:10.16
前にも言った気がするがWMPはバージョン違いかと
76:デフォルトの名無しさん
13/07/16 13:12:31.06
>>73
おまえが消えろwww
>>74
URLリンク(learn.flexerasoftware.com)
登録したらメールでシリアル送られてくるからインスコ、VSからプロジェクトのインストーラー作ればBuildで自動的に作成される
77:デフォルトの名無しさん
13/07/16 13:27:55.23
>>75 ありがとうございます。
すいません、過去ログ拝見してませんでした。
バージョンの違いを吸収する方法はありませんか?
>>76 ありがとうございます。
まずは、これを試してみたいと思います。
78:デフォルトの名無しさん
13/07/16 15:09:57.67
>>77
バージョンの違いを吸収する方法はやった事ないからわからん
79:デフォルトの名無しさん
13/07/17 19:31:53.96
おしえてくださいー!
IPCチャネルのナマエなのですが
以下の二つは同じプロセスで共存できないですよね?
ipc://A/B
ipc://C/D
やるとしたらこうするしかないですか?
ipc://B/A
ipc://C/A
ipc://D/A
ipc://E/A
80:デフォルトの名無しさん
13/07/17 20:18:06.38
public abstract class ObjR : MarshalByRefObject { public abstract void Do(); }
public class ObjC : ObjR { public override void Do() { Console.WriteLine("C"); }
public class ObjD : ObjR { public override void Do() { Console.WriteLine("D"); }
var c1 = new IpcServerChannel("a", "c");
ChannelServices.RegisterChannel(c1, false);
var c2 = new IpcServerChannel("b", "d");
ChannelServices.RegisterChannel(c2, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ObjC), "e", WellKnownObjectMode.SingleCall);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ObjD), "f", WellKnownObjectMode.SingleCall);
var c = (ObjR)Activator.GetObject(typeof(ObjR), "ipc://c/e");
c.Do();
c = (ObjR)Activator.GetObject(typeof(ObjR), "ipc://d/f");
c.Do();
81:デフォルトの名無しさん
13/07/17 21:26:46.19
datatable
view
datasource
↑C#3日目だけどこのへんの関係がよくわからん
だれかわかりやすくおしえて
82:デフォルトの名無しさん
13/07/17 21:29:22.96
IListSourceとかいろいろ絡むんで文字では説明しづらい