回答編集履歴
4
少し修正
answer
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
> ・変数hwndの値は一体何の数字を示している?
|
2
2
|
|
3
3
|
Windowsが内部的に使用しているウィンドウハンドルの識別値です。
|
4
|
-
32bit環境
|
4
|
+
32bit環境⇒64bit環境になると、ポインタ型(メモリアドレスを指す型)など一部のデータサイズが32bit⇒64bitになります。
|
5
|
-
HWNDもC言語の定義ではポインタ型となっています。
|
5
|
+
HWNDもC言語の定義ではポインタ型となっていますので64bitになります。
|
6
6
|
|
7
7
|
> ・「2890758」であれば、そもそもLong型の整数に対応している気がしますが、(https://www.tipsfound.com/vba/02008)
|
8
8
|
なぜ64bit環境では、hwnd(「2890758」)とLong型で不一致が起きるのでしょう。
|
3
追記
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
> ・変数hwndの値は一体何の数字を示している?
|
2
2
|
|
3
3
|
Windowsが内部的に使用しているウィンドウハンドルの識別値です。
|
4
|
-
32bit環境と64bit環境では、ポインタ型など一部のデータサイズが64bitになります。
|
4
|
+
32bit環境と64bit環境では、ポインタ型(メモリアドレスを指す型)など一部のデータサイズが64bitになります。
|
5
5
|
HWNDもC言語の定義ではポインタ型となっています。
|
6
6
|
|
7
7
|
> ・「2890758」であれば、そもそもLong型の整数に対応している気がしますが、(https://www.tipsfound.com/vba/02008)
|
2
少し修正
answer
CHANGED
@@ -8,6 +8,6 @@
|
|
8
8
|
なぜ64bit環境では、hwnd(「2890758」)とLong型で不一致が起きるのでしょう。
|
9
9
|
(LongPtrに書きかえて、わざわざLongLong型にさせなければいけない理由とは・・)
|
10
10
|
|
11
|
-
Windows API呼び出し時に引数はスタックメモリ領域に積まれ、呼び出し先でスタックが掃除されますが、呼び出し側で正しいサイズで積まないと、スタックの掃除を行う際にメモリ破壊を引き起こします。
|
11
|
+
Windows API呼び出し時に引数はスタックメモリ領域に積まれ、呼び出し先でスタックが掃除されますが、呼び出し側で正しいデータサイズで積まないと、スタックの掃除を行う際にメモリ破壊を引き起こします。
|
12
|
-
説明すると長くなるので、詳しく知りたい場合は関数の呼び出し規約について調べてみてください。
|
12
|
+
説明すると非常に長くなるので、詳しく知りたい場合は関数の呼び出し規約について調べてみてください。
|
13
13
|
あと、ポインタ型をLongやLongLongにすると移植性が無くなるのでやめたほうが無難かと思われます。
|
1
少し修正
answer
CHANGED
@@ -8,5 +8,6 @@
|
|
8
8
|
なぜ64bit環境では、hwnd(「2890758」)とLong型で不一致が起きるのでしょう。
|
9
9
|
(LongPtrに書きかえて、わざわざLongLong型にさせなければいけない理由とは・・)
|
10
10
|
|
11
|
-
|
11
|
+
Windows API呼び出し時に引数はスタックメモリ領域に積まれ、呼び出し先でスタックが掃除されますが、呼び出し側で正しいサイズで積まないと、スタックの掃除を行う際にメモリ破壊を引き起こします。
|
12
|
+
説明すると長くなるので、詳しく知りたい場合は関数の呼び出し規約について調べてみてください。
|
12
|
-
|
13
|
+
あと、ポインタ型をLongやLongLongにすると移植性が無くなるのでやめたほうが無難かと思われます。
|