Domanda

Durante la navigazione un po 'di codice che ho trovato una chiamata a OpenPrinter () . Il codice compila e funziona bene. Ma, stiamo passando un HANDLE invece di LPHANDLE (come specificato nel MSDN). Ho scoperto che in windef.h esiste la seguente dichiarazione:

typedef HANDLE FAR          *LPHANDLE;

Che cosa significa per LP? Dovrei usare un LPHANDLE, o di tenere HANDLE?

È stato utile?

Soluzione

LP sta per lungo Pointer. E 'un puntatore ad una maniglia in questo caso.

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

Si può usare lo stesso metodo utilizzato per una maniglia dereferenziazione il puntatore:

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

Altri suggerimenti

"LP" sta per puntatore lungo.

gestire! = LPHANDLE, proprio come DWORD! = DWORD * (o LPDWORD)

Il FAR la costruzione risale ai giorni del 8086/8088 CPU e le modali memoria segmentata che ha usato. In quei giorni si potrebbe avere NEAR e FAR puntatori a memoria.

Il LP (indicatore lungo) è solo una sbornia dalla Microsoft ungherese notazione da quei giorni precedenti.

In questi giorni il modello di memoria Win32 è piatta in modo da VICINO e FAR i puntatori sono fondamentalmente la stessa. Ma mentre una nei pressi di puntatore è ora lo stesso di un far poitner questo non significa che un puntatore è lo stesso di una maniglia.

E proprio per darvi un po 'di storia lungo puntatori chiamati anche i puntatori erano differenti rispetto ai normali 16 puntatori bit in 16 bit di Windows. Il sistema operativo utilizzato un modello di memoria segmentata dove si sarebbe compensato da un segmento o di avere un segmento + offset, che è stato un lungo puntatore. La notazione ungherese LP è stato utilizzato per questi lunghi puntatori ed è ancora disseminato in tutta l'API di Windows per questi motivi legacy.

Naturalmente nel 32 bit e 64 bit di Windows sistemi operativi un modello di memoria piatta viene utilizzato e non v'è alcuna distinzione tra i puntatori a questi sistemi operativi (anche se PAE aggiunge qualcosa di concettualmente simile).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top