当前位置: 首页 > 编程语言 > C#

API函数AllocConsole和AttachConsole(-1)有什么区别?分享

时间:2023-04-10 17:33:00 C#

API函数AllocConsole和AttachConsole(-1)有什么区别?您能否解释一下,API函数AllocConsole和AttachConsole(-1)之间有什么区别?我的意思是如果AttachConsole获得ATTACH_PARENT_PROCESS(DWORD)-1。好吧,根本区别在于:在第一种情况下,您会得到一个全新的控制台窗口,而在第二种情况下,您会使用现有的控制台窗口。当然,如果您已经连接到控制台(即,您是从cmd.exe启动的控制台模式程序),则没有太大区别-您将在任一API中遇到错误。另请注意,仅仅因为您与控制台分离并不意味着分离的控制台有用-例如,如果您是从cmd窗口启动的控制台进程,该窗口基本上会阻塞,直到您的进程结束。使用一些代码:intmain(intargc,char*argv[]){intch;布尔结果;printf("默认控制台");ch=getchar();bResult=FreeConsole();bResult=AllocConsole();printf("AllocConsole()n");ch=getchar();bResult=FreeConsole();bResult=AttachConsole(ATTACH_PARENT_PROCESS);printf("AttachConsole(ATTACH_PARENT_PROCESS)n");ch=getchar();我不认为有一个名为CreateConsole的AllocConsole,但是有AllocConsole。假设这就是您的意思,我认为不同之处在于,如果父进程没有控制台,则AttachConsole(ATTACH_PARENT_PROCESS)可以返回ERROR_INVALID_HANDLE。尝试从命令提示符运行此代码,然后开始->运行:#include#pragmacomment(lib,"user32.lib")intmain(){BOOLb;炭味精[1024];b=自由控制台();sprintf(msg,"%d",b);MessageBox(NULL,msg,"FreeConsole",0);b=AttachConsole(ATTACH_PARENT_PROCESS);sprintf(味精,"%d",b);MessageBox(NULL,msg,"AttachConsole",0);返回0;}从命令提示符运行时,会显示两个包含1的消息框,表示两次调用都成功。从Start->Run运行时,第一个方框是1,第二个方框是0,表示只有第一次调用成功。第二次失败是因为explorer.exe(从开始->运行启动的进程的父进程)没有控制台。好久没用winapi了,翻了MSDN文档,也没找到CreateConsoleAPI函数。所以我的猜测是CreateConsole是一个遗留的东西,已经被AttachConsole取代了。因此可能没有区别,但CreateConsole可能已被弃用。以上就是C#学习教程:API函数AllocConsole和AttachConsole(-1)有什么区别?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: