回答編集履歴

4

追記しました

2017/06/01 23:41

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -21,3 +21,35 @@
21
21
  あと考えられる可能性は`c_ulong`などの環境依存の型指定です。
22
22
 
23
23
  `ctypes`には`ctypes.c_int16`などのサイズ固定の指定があるので、そちらを使ってはどうでしょうか?
24
+
25
+
26
+
27
+ ### 追記
28
+
29
+ YouheiSakuraiさんの回答と同意見です。
30
+
31
+
32
+
33
+ `argtype`を指定してあげるか、明示的に変換すればOKです。
34
+
35
+
36
+
37
+ ```python
38
+
39
+ if dll.Open_Handle( ctypes.u_int64(FoundHandle[i]), byref( dOpenHandle )) == False:
40
+
41
+ ```
42
+
43
+
44
+
45
+ 個人的にはYouheiSakuraiさんの`argtype`と`restype`を定義する方法がきれいですね。
46
+
47
+
48
+
49
+ ただし引っかかるのは64ビット版で動作したということですね。
50
+
51
+ 推測ですが偶然動作しているだけで、いつ問題が出てもおかしくないコードだと思います。
52
+
53
+
54
+
55
+

3

追記

2017/06/01 23:41

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  その推測はおそらく合っています、上のページで全く同じエラーコードが出ています。
16
16
 
17
+ 出ているエラーを見ますと、スタックが4バイト**少ない**と出ています。
18
+
17
19
 
18
20
 
19
21
  あと考えられる可能性は`c_ulong`などの環境依存の型指定です。

2

型サイズについて追記

2017/06/01 09:12

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -13,3 +13,9 @@
13
13
 
14
14
 
15
15
  その推測はおそらく合っています、上のページで全く同じエラーコードが出ています。
16
+
17
+
18
+
19
+ あと考えられる可能性は`c_ulong`などの環境依存の型指定です。
20
+
21
+ `ctypes`には`ctypes.c_int16`などのサイズ固定の指定があるので、そちらを使ってはどうでしょうか?

1

追記

2017/06/01 08:34

投稿

pashango2
pashango2

スコア930

test CHANGED
@@ -4,6 +4,12 @@
4
4
 
5
5
 
6
6
 
7
+ [https://docs.python.jp/3/library/ctypes.html](https://docs.python.jp/3/library/ctypes.html)
7
8
 
8
9
 
10
+
9
- [https://docs.python.jp/3/library/ctypes.html](https://docs.python.jp/3/library/ctypes.html)
11
+ > 実際にはGet_Device_Handle()でFoundHandleに正しい値を受け取れていないのではないかと考えています。
12
+
13
+
14
+
15
+ その推測はおそらく合っています、上のページで全く同じエラーコードが出ています。