WinMain(HINSTANCE hInstance, HINSTANCE hPrevInsta

donner123 2004-04-08 08:59:23
INT PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLineArgs,INT nCmdShow)
以上的这些参数是由系统传进来的,但我想具体知道如何传递的?
请各位帮忙!!!
最好有实例说明,不胜感激!!
...全文
249 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick1976 2004-04-08
  • 打赏
  • 举报
回复
简单的说,函数的参数都是通过堆栈传递的
kuangjingbo 2004-04-08
  • 打赏
  • 举报
回复
这个要从汇编代码上看就会很清楚,给你一段:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.DATA
ClassName db "SimpleWinClass",0
AppName db "Our First Window",0

.DATA?
hInstance HINSTANCE ?
CommandLine LPSTR ?

.CODE
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
......

其中invoke表示调用,invoke后的第一个东西是函数名,函数名后面的一些是参数
所以可以看出:hInstance是由GetModuleHandle函数得来的
hPrevInstance现在一般是NULL
szCmdLineArgs是由用户给的,可以由CommandLine得到

关于szCmdLineArgs,这个由来已久,在dos时代就有命令行了
一般是 "命令 命令行参数1 命令行参数2 ...... 命令行参数n"
比如经常用到的"ping 192.168.0.1",ping 就是命令,192.168.0.1就是参数
在c中经常这样int main(int argc, char* argv[]),就可以编写带命令行的程序了
captainwh 2004-04-08
  • 打赏
  • 举报
回复
操作系统通过载入器载入你的程序, 然后c runtime startup code开始运行, 由它调用CreateProcess创建你的进程, WinMain的参数就是由这里传递进来的。
程序运行完毕以后, 又回到c runtime startup code, 调用ExitProcess结束你的进程。
legend-never-die 2004-04-08
  • 打赏
  • 举报
回复
深入浅出说:

当你打开一个应用程序的时候,操作系统会用CreateProcess调用相应的WINMAIN函数,将hInstance作为自己的子进程打开。然后再断开与这个子进程的关系。

其中hInstance就是此程序的进程句柄,而hPrevInstance好像就是装载此进程的进程吧,不过马上就断了关系,所以没什么用,szCmdLineArgs是命令行参数,nCmdShow显示方式,呵呵
top_hipster 2004-04-08
  • 打赏
  • 举报
回复
系统分配进程相应的资源后,执行Winmain函数,同时传入为进程创建的资源信息和命令行信息
dzmsoft 2004-04-08
  • 打赏
  • 举报
回复
INT PASCAL WinMain
(HINSTANCE hInstance, // 这个参数由系统决定,代表模块的装载地址
HINSTANCE hPrevInstance, // 这个参数由系统决定,基本上没什么用
LPSTR szCmdLineArgs, // 这个使在系统运行本程序时整个命令行
INT nCmdShow) // 这个参数是系统要求程序的主窗口初始显示状态,
来让本程序决定是最大化,常规,还是最小化显示
主窗口,你在编程时也可以不用理会,不过专业的
程序需要根据它来调用你的主窗口的 ShowWindow
函数,形式如下:ShowWindow(hMainWnd, nCmdShow);

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧