2012-05-21 27 views
-1

有人可以請解釋一下什麼是僞變量,什麼是函數WinMain下面的第一個參數?僞變量

GetStartupInfo(&StartupInfo); 
int nMainRetVal = WinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineAnsi, 
    (StartupInfo.dwFlags & STARTF_USESHOWWINDOW) 
     ? StartupInfo.wShowWindow : SW_SHOWDEFAULT); 

另外下面的說明做了什麼?

extern "C" const IMAGE_DOS_HEADER __ImageBase; 

回答

0

WinMain的第一個參數是所謂的「應用程序實例句柄」。這件事源於古代的Windows 3.x時代,它表示應用程序正在運行的實例的句柄。但從Win32(Windows 9x/NT)開始,此參數是進程虛擬地址空間中可執行模塊映射的基址。

所以,你看到的是圖像基地址__ImageBase,它被鑄造爲HINSTANCE以符合WinMain簽名。

現在,__ImageBase - 我想這是一個建立時間生成的結構,完全位於圖像的起始地址。

而且,我不確定什麼是「僞變量」。但也許這正是__ImageBase

0

__ImageBase是"current module's HINSTANCE from a static library"。這是鏈接器提供的所謂的僞變量。這個僞變量是模塊已經加載到內存中的地址。使用這種僞變量,您可以直接從內存訪問映射的圖像並解決其內容。