3

いくつかのコードを閲覧しているときに、OpenPrinter()の呼び出しを見つけました。コードはコンパイルされ、正常に動作します。ただし、 (MSDNで指定されているように)のHANDLE代わりに渡します。次の宣言が存在するLPHANDLEことがわかりました。windef.h

typedef HANDLE FAR          *LPHANDLE;

LPは何の略ですか?を使用する必要がありますかLPHANDLE、それとも保持する必要がありHANDLEますか?

4

4 に答える 4

7

「LP」はLongPointerの略です。

HANDLE!= LPHANDLE、DWORD!= DWORD *(またはLPDWORD)と同じです

于 2008-12-24T15:23:17.537 に答える
6

LPはLongPointerの略です。この場合、これはハンドルへのポインタです。

HANDLE h = <winapi function>();
LPHANDLE ph = &h;

ポインタを逆参照することにより、ハンドルと同じように使用できます。

HANDLE anotherh = *ph;
or
<winapi function>(*ph, ...);
于 2008-12-24T15:30:24.607 に答える
4

FARコンストラクトは、 8086/8088 CPUとそれが使用したセグメント化されたメモリ モーダルの時代にさかのぼります。当時は、メモリへのNEARおよびFARポインターを使用できました。

LP (ロング ポインター) は、当時の Microsoft ハンガリー語表記法の名残りです

最近の Win32 メモリ モデルはフラットであるため、NEARポインターとFARポインターは基本的に同じです。ただし、near ポインターfarポインターと同じになりましたが、ポインターがハンドルと同じであることを意味するわけではありません。

于 2009-01-08T00:31:19.533 に答える
3

また、少し背景を説明するために、ファーポインターとも呼ばれる長いポインターは、16ビットウィンドウの通常の16ビットポインターとは異なります。OSは、セグメントからオフセットするか、長いポインタであるセグメント+オフセットを持つセグメントメモリモデルを使用していました。ハンガリアン記法LPは、これらの長いポインターに使用されていましたが、これらのレガシーな理由から、WindowsAPI全体にまだ散らばっています。

もちろん、32ビットと64ビットのWindows OSでは、フラットメモリモデルが使用され、これらのOSのポインタを区別する必要はありません(ただし、PAEは概念的に類似したものを追加します)。

于 2008-12-24T15:50:44.987 に答える