質問編集履歴
4
訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
そこで、C#側のTimerで読んでくるのではなく、C++DLLを裏側で動作させ、DLLがデータを受信したら、それをC# プロパティに設定し、イベントを発生させる方法にしたいです。
|
21
21
|
|
22
22
|
C#でDLLを連続させるには、 Form1_LoadにDLLを入れればいいのでしょうか?
|
23
|
-
試しでDLLの中をLoopにし、 Form1_Loadにセットし、返り値をBufferに入れてTimerで定期的に取りに行くようにしてみたんですが、動
|
23
|
+
試しでDLLの中をLoopにし、 Form1_Loadにセットし、返り値をBufferに入れてTimerで定期的に取りに行くようにしてみたんですが、動きませんでした。
|
24
24
|
※同期をとることではなく、ただ裏で回せるために試したものです。
|
25
25
|
|
26
26
|
```ここに言語を入力
|
@@ -31,4 +31,4 @@
|
|
31
31
|
buff = MSGbuff[0];
|
32
32
|
return buff;}
|
33
33
|
```
|
34
|
-
DLLを裏で動作させることや動機を取る
|
34
|
+
DLLを裏で動作させることや動機を取る方法など、アドバイスをお願いします。
|
3
訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
【試した方法】
|
4
4
|
C++dllを呼び出す度にデータを読み出すようにし、C#側でDLLをTimerメソッドに入れて定期的にデータを読んでくる。 ※以下のコードで成功しました。
|
5
|
-
|
6
5
|
```ここに言語を入力
|
7
6
|
int __stdcall GetData() {
|
8
7
|
static int buff;
|
@@ -12,10 +11,8 @@
|
|
12
11
|
|
13
12
|
private void timer1_Tick(object sender, EventArgs e)
|
14
13
|
{tBox_Angle.Text = Convert.ToString((short)DLLimpo.GetData());}
|
14
|
+
```
|
15
15
|
|
16
|
-
}```
|
17
|
-
|
18
|
-
|
19
16
|
しかし、この方法では、I/Fデータと同期がとれているわけではないので、
|
20
17
|
受信漏れが発生します。
|
21
18
|
|
2
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,8 +12,10 @@
|
|
12
12
|
|
13
13
|
private void timer1_Tick(object sender, EventArgs e)
|
14
14
|
{tBox_Angle.Text = Convert.ToString((short)DLLimpo.GetData());}
|
15
|
+
|
15
16
|
}```
|
16
17
|
|
18
|
+
|
17
19
|
しかし、この方法では、I/Fデータと同期がとれているわけではないので、
|
18
20
|
受信漏れが発生します。
|
19
21
|
|
1
マークダウン訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,14 +4,12 @@
|
|
4
4
|
C++dllを呼び出す度にデータを読み出すようにし、C#側でDLLをTimerメソッドに入れて定期的にデータを読んでくる。 ※以下のコードで成功しました。
|
5
5
|
|
6
6
|
```ここに言語を入力
|
7
|
-
C++ DLL側
|
8
7
|
int __stdcall GetData() {
|
9
8
|
static int buff;
|
10
9
|
oApi.Receive(0, &MSGbuff); /外部I/Fからデータを読み取るAPI
|
11
10
|
buff = MSGbuff[0];
|
12
11
|
return buff;
|
13
12
|
|
14
|
-
C#側
|
15
13
|
private void timer1_Tick(object sender, EventArgs e)
|
16
14
|
{tBox_Angle.Text = Convert.ToString((short)DLLimpo.GetData());}
|
17
15
|
}```
|