문제

코드를 탐색하는 동안 전화를 찾았습니다 OpenPrinter (). 코드는 컴파일하고 잘 작동합니다. 그러나 우리는 지나가고 있습니다 HANDLE 대신에 LPHANDLE (MSDN에 지정된대로). 나는 그것을 발견했다 windef.h 다음 선언이 있습니다.

typedef HANDLE FAR          *LPHANDLE;

LP는 무엇을 의미합니까? a를 사용해야할까요 LPHANDLE, 또는 보관하십시오 HANDLE?

도움이 되었습니까?

해결책

LP는 긴 포인터를 나타냅니다. 이 경우 핸들에 대한 포인터입니다.

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

포인터를 해제하여 처리 할 수있는 것과 같은 방식으로 사용할 수 있습니다.

HANDLE anotherh = *ph;
or
<winapi function>(*ph, ...);

다른 팁

"LP"는 긴 포인터를 나타냅니다.

dword! = dword* (또는 lpdword)와 마찬가지로 핸들! = lphandle

그만큼 멀리 날짜는 날짜로 거슬러 올라갑니다 8086/8088 CPU 그리고 사용한 세그먼트 메모리 모달. 그날 당신은 가질 수 있습니다 가까운 그리고 멀리 메모리에 대한 포인터.

그만큼 LP (긴 포인터)는 단지 마이크로 소프트 헝가리 표기법 그 초기부터.

요즘 Win32 메모리 모델은 평평합니다 가까운 그리고 멀리 포인터는 기본적으로 동일합니다. 그러나 a 포인터 근처 이제 a와 동일합니다 먼 포터 그렇다고 포인터가 핸들과 동일하다는 의미는 아닙니다.

그리고 당신에게 작은 배경 긴 포인터가 16 비트 창에서 일반 16 비트 포인터와 다르기도했습니다. OS는 세그먼트 메모리 모델을 사용하여 세그먼트에서 오프셋하거나 긴 포인터 인 세그먼트 + 오프셋이있는 세그먼트 메모리 모델을 사용했습니다. 헝가리 표기법 LP는 이러한 긴 포인터에 사용되었으며 이러한 유산의 이유로 Windows API 전체에 여전히 흩어져 있습니다.

물론 32 비트 및 64 비트 Windows OSS에서는 평평한 메모리 모델이 사용 되며이 OSS의 포인터 사이에 구분이 없습니다 (PAE는 개념적으로 유사한 것을 추가합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top