C++ では、単純にポインタを DWORD にキャストできますか?
MyClass * thing;
DWORD myPtr = (DWORD)thing;
それはうまくいくでしょうか?
Windows では、たとえば Windows メッセージで、このような方法でポインターを渡すことは非常に一般的です。LPARAM は LONG_PTR の typedef であり、いくつかの構造体へのポインターを渡すためによく使用されます。reinterpret_cast<DWORD_PTR>(thing)
キャストに使用する必要があります。
あなたは間違いなくそれを行うことができます。
それが機能するかどうかは、環境と何をしたいかによって異なります。
32 ビットの Windows 1 (最も一般的に表示される場所DWORD
) では、通常は問題ありません。64 ビットの Windows ( も表示されますDWORD
が、それほど多くはありません) では、通常は表示されません。
いいえ、64 ビット プロセスでは、ポインタは 64 ビットですが、DWORD は 32 ビットしかありません。DWORD_PTR を使用します。
http://en.cppreference.com/w/cpp/language/explicit_cast
それを読んで、それを理解して、C スタイルのキャストを避けてください。
そうすることはできるかもしれませんが、意味がありません。たとえば、DWORD は 4 バイトで、ポインター (最近) は 8 バイトです。
reinterpret_cast<DWORD&>(myPtr);
動作するはずですが、未定義または切り捨てられている可能性があります。
ところで、reinterpret_cast
「私の親愛なるコンパイラを信頼してください。私が何をしているのか知っています」と言う C++ の方法です。それがどれほど意味があるかに関係なく、あるもののビット (0 と 1) を別のものとして解釈しようとします。
正当な使用法として有名な 1/sqrt ハックがあります ;)