質問するログイン新規登録

質問編集履歴

2

誤記修正

2021/03/12 11:14

投稿

tuyudaku
tuyudaku

スコア75

title CHANGED
File without changes
body CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
  ###追記
43
43
  問題が発生するアプリを作ってみました。
44
- `System.dll`が私が実際に使いたい他社製DLL
44
+ `System.dll`が私が実際に使いたい他社製DLLの代わりです。
45
45
  本来であればElapsedイベントの引数(Delegate?)は
46
46
  `(object sender, ElapsedEventArgs e)`なので`OnElapsed`も同様の引数にしたいところなのですが、
47
47
  `ElapsedEventArgs`が`System.dll`内で定義されているものなのでそのまま使うことができません。

1

追記

2021/03/12 11:14

投稿

tuyudaku
tuyudaku

スコア75

title CHANGED
File without changes
body CHANGED
@@ -37,4 +37,57 @@
37
37
 
38
38
 
39
39
  何か心当たり、知識がある方がいらっしゃいましたら
40
- 助言を頂けないでしょうか?お願いいたします。
40
+ 助言を頂けないでしょうか?お願いいたします。
41
+
42
+ ###追記
43
+ 問題が発生するアプリを作ってみました。
44
+ `System.dll`が私が実際に使いたい他社製DLL
45
+ 本来であればElapsedイベントの引数(Delegate?)は
46
+ `(object sender, ElapsedEventArgs e)`なので`OnElapsed`も同様の引数にしたいところなのですが、
47
+ `ElapsedEventArgs`が`System.dll`内で定義されているものなのでそのまま使うことができません。
48
+ これを何とかして基底型?汎用型?のようなものからキャストしてデータを扱おうと思ったのですが、
49
+ そもそもイベントの登録ができない、というかデリゲートの作成ができなくて困っているという状況です。
50
+
51
+ 分かりにくい質問で申し訳ありません、よろしくお願いいたします。
52
+
53
+
54
+
55
+ ```C#
56
+ namespace ConsoleApp1
57
+ {
58
+ class Program
59
+ {
60
+ static object timer_instance = null;
61
+ static myClass c = null;
62
+
63
+ static void Main(string[] args)
64
+ {
65
+ c = new myClass();
66
+
67
+ var a = Assembly.LoadFrom( "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll" );
68
+ var type = a.GetType("System.Timers.Timer");
69
+ timer_instance = Activator.CreateInstance(type, new object[]{ 100.0 });
70
+ // Timer timer = new Timer() という風に使うことが出来ない状態
71
+
72
+ var event_info = type.GetEvent("Elapsed");
73
+ var _delegate = Delegate.CreateDelegate(event_info.EventHandlerType, c, "OnElapsed");
74
+ event_info.AddEventHandler(timer_instance, _delegate);
75
+
76
+ var method = type.GetMethod("Start");
77
+ method.Invoke(timer_instance, null);
78
+
79
+ Task.Delay(1000000).Wait();
80
+ }
81
+ }
82
+
83
+ class myClass
84
+ {
85
+ // ElapsedEventArgs
86
+ private void OnElapsed( object sender, object e )
87
+ {
88
+ Console.WriteLine("test");
89
+ }
90
+ }
91
+ }
92
+
93
+ ```