LPHANDLE与HANDLE

Céd*_*tte 3 winapi handle

浏览一些代码时,我发现了对OpenPrinter()的调用.代码编译并正常工作.但是,我们正在传递一个HANDLE而不是LPHANDLE(在MSDN中指定).我发现在windef.h以下声明中存在:

typedef HANDLE FAR          *LPHANDLE;
Run Code Online (Sandbox Code Playgroud)

LP代表什么?我应该使用LPHANDLE,还是保留HANDLE

cta*_*cke 7

"LP"代表Long Pointer.

HANDLE!= LPHANDLE,就像DWORD!= DWORD*(或LPDWORD)


Kie*_*eli 6

LP代表Long Pointer.在这种情况下,它是指向句柄的指针.

HANDLE h = <winapi function>();
LPHANDLE ph = &h;
Run Code Online (Sandbox Code Playgroud)

您可以通过解除引用指针的方式使用它的方式:

HANDLE anotherh = *ph;
or
<winapi function>(*ph, ...);
Run Code Online (Sandbox Code Playgroud)