質問編集履歴

2

誤記修正

2021/03/12 11:14

投稿

tuyudaku
tuyudaku

スコア75

test CHANGED
File without changes
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  問題が発生するアプリを作ってみました。
86
86
 
87
- `System.dll`が私が実際に使いたい他社製DLL
87
+ `System.dll`が私が実際に使いたい他社製DLLの代わりです。
88
88
 
89
89
  本来であればElapsedイベントの引数(Delegate?)は
90
90
 

1

追記

2021/03/12 11:14

投稿

tuyudaku
tuyudaku

スコア75

test CHANGED
File without changes
test CHANGED
@@ -77,3 +77,109 @@
77
77
  何か心当たり、知識がある方がいらっしゃいましたら
78
78
 
79
79
  助言を頂けないでしょうか?お願いいたします。
80
+
81
+
82
+
83
+ ###追記
84
+
85
+ 問題が発生するアプリを作ってみました。
86
+
87
+ `System.dll`が私が実際に使いたい他社製DLL
88
+
89
+ 本来であればElapsedイベントの引数(Delegate?)は
90
+
91
+ `(object sender, ElapsedEventArgs e)`なので`OnElapsed`も同様の引数にしたいところなのですが、
92
+
93
+ `ElapsedEventArgs`が`System.dll`内で定義されているものなのでそのまま使うことができません。
94
+
95
+ これを何とかして基底型?汎用型?のようなものからキャストしてデータを扱おうと思ったのですが、
96
+
97
+ そもそもイベントの登録ができない、というかデリゲートの作成ができなくて困っているという状況です。
98
+
99
+
100
+
101
+ 分かりにくい質問で申し訳ありません、よろしくお願いいたします。
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ ```C#
110
+
111
+ namespace ConsoleApp1
112
+
113
+ {
114
+
115
+ class Program
116
+
117
+ {
118
+
119
+ static object timer_instance = null;
120
+
121
+ static myClass c = null;
122
+
123
+
124
+
125
+ static void Main(string[] args)
126
+
127
+ {
128
+
129
+ c = new myClass();
130
+
131
+
132
+
133
+ var a = Assembly.LoadFrom( "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll" );
134
+
135
+ var type = a.GetType("System.Timers.Timer");
136
+
137
+ timer_instance = Activator.CreateInstance(type, new object[]{ 100.0 });
138
+
139
+ // Timer timer = new Timer() という風に使うことが出来ない状態
140
+
141
+
142
+
143
+ var event_info = type.GetEvent("Elapsed");
144
+
145
+ var _delegate = Delegate.CreateDelegate(event_info.EventHandlerType, c, "OnElapsed");
146
+
147
+ event_info.AddEventHandler(timer_instance, _delegate);
148
+
149
+
150
+
151
+ var method = type.GetMethod("Start");
152
+
153
+ method.Invoke(timer_instance, null);
154
+
155
+
156
+
157
+ Task.Delay(1000000).Wait();
158
+
159
+ }
160
+
161
+ }
162
+
163
+
164
+
165
+ class myClass
166
+
167
+ {
168
+
169
+ // ElapsedEventArgs
170
+
171
+ private void OnElapsed( object sender, object e )
172
+
173
+ {
174
+
175
+ Console.WriteLine("test");
176
+
177
+ }
178
+
179
+ }
180
+
181
+ }
182
+
183
+
184
+
185
+ ```