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

質問編集履歴

4

訂正

2019/12/23 02:20

投稿

ParaParaDance
ParaParaDance

スコア56

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

訂正

2019/12/23 02:20

投稿

ParaParaDance
ParaParaDance

スコア56

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

修正

2019/12/23 02:18

投稿

ParaParaDance
ParaParaDance

スコア56

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

マークダウン訂正

2019/12/23 02:17

投稿

ParaParaDance
ParaParaDance

スコア56

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
  }```