10

IntPtrPInvokeを使用しているときに、Windowsハンドルを参照するためにを使用する必要があることに気付きました。intハンドルだけに使ってみませんか?ハンドルについての私の理解は、それが単なる整数値であるということです。

4

4 に答える 4

18

Windowsハンドルは、ネイティブマシンポインタサイズの整数として定義されます。それは、必要に応じて密かにポインタになることができるようにするためです。(ハンドルはおそらくポインタではありませんが、オペレーティングシステムの実装者が必要と判断した場合は、ハンドルであることが許可されます。通常、セキュリティ上の理由から実際にはポインタではありません。実際にシステムを悪用するのは簡単すぎます。ポインタ。)

32ビット整数として定義されたC#のint。64ビットマシンでは小さすぎます。IntPtrは、マシンサイズのポインタを保持できる整数として定義されます。そのため、ハンドルを操作するときは常にIntPtrを使用します。

于 2012-02-07T00:25:13.607 に答える
10

ハンドルはポインタサイズの値です。

64ビットプラットフォームでは8バイト幅です。

于 2012-02-07T00:24:16.210 に答える
4

ハンドルのサイズは、マシンアーキテクチャ(32/64ビット)によって異なります。IntPtrその世話をします。

于 2012-02-07T00:24:45.983 に答える
2

ハンドルは本質的にシステムレベルのポインターであり、ポインターは暗黙的にintにキャストされません。それ自体がタイプです。そのためIntPtr、.NETではHandleタイプを表す必要があります。

于 2012-02-07T00:24:35.400 に答える