首先這里的far,在32位系統已經廢除不用了。它是C/C++語言在16位系統中用以標明指針是個遠指針的修飾符。
遠指針是說指針所指向的地址已經超出了64K(2的十六次方),所以需要使用DS加偏移量的方法來尋址,而不能直接尋址。其反義的修飾符是near。
舉例:
int far *fptr;
fptr=(int far*)0xb0000000;
16位PC機的存儲器地址是由段地址和偏移地址組合而成,每一段不能超過64k字節地址,因而同一個段內的地址存取,用偏移地址就可以實現,因段地址寄存器所存的段地址是不變的。當用指針時,只16位就夠了,這一類就是near指針。當要在另一個段內取數據,就要跨越段,即要指明存取段的段地址和偏移地址,這時段地址寄存器所存段地址要改變,在使用指針指向另一個段內地址時,就要用32位表示,就是far指針了。由此可見,如果你想寫在Win16上也能運行的程序,才會涉及到newr、far指針的概念。在Win32上,指針已無near、far的區分。
LPVOID 在MSDN上的定義:A 32-bit pointer to an unspecified type. 32位上未指明的類型。
例子:
HANDLE ThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, this, 0, NULL); //線程回調函數this這里可以傳任何變量。
DWORD WINAPI MyClass::ThreadProc(LPVOID Param)
{
//這時候傳進來什么類型,Param就是什么類型。
return 0;
}