-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;
4

2 回答 2

0

__ImageBase 是“来自静态库的当前模块的 HINSTANCE”。这是链接器提供的所谓的伪变量。这个伪变量是模块在内存中加载的地址。使用此伪变量,您可以直接从内存访问映射的图像并寻址其内容。

于 2012-05-22T05:25:55.357 回答
0

的第一个参数WinMain是所谓的“应用程序实例句柄”。这个东西起源于古老的 Windows 3.x 时代,它表示应用程序正在运行的实例的句柄。但是从Win32开始(Windows 9x/NT)这个参数是进程虚拟地址空间中的可执行模块映射的基地址。

因此,您看到的是图像基地址__ImageBase,它被转换为HINSTANCE以满足WinMain签名。

现在,__ImageBase- 我猜它是一个构建时生成的结构,它恰好位于图像起始地址。

而且,我不确定什么是“伪变量”。但也许这正是__ImageBase

于 2012-05-21T20:32:35.637 回答