能否請您解釋一下我,什麼是API函數AllocConsole
和AttachConsole(-1)
之間有什麼不同?我的意思是如果AttachConsole
得到ATTACH_PARENT_PROCESS(DWORD)-1
。API函數AllocConsole和AttachConsole(-1)有什麼不同?
6
A
回答
13
好,最根本的區別是:
AllocConsole()
將創建一個新的控制檯(和附加到它)AttachConsole(ATTACH_PARENT_PROCESS /* -1 */)
不會創建一個新的控制檯,它會附着於母公司現有的控制檯處理。
在第一種情況下,您將獲得一個全新的控制檯窗口,在第二種情況下,您將使用現有的控制檯窗口。
當然,如果你已經連接到控制檯(即,你是從cmd.exe的推出了一個控制檯程序)沒有太大的區別 - 你會用兩種API得到一個錯誤。
另外請注意,只是因爲你從控制檯分離並不意味着分離的控制檯將是有用的 - 例如,如果你從cmd窗口啓動控制檯進程,該窗口基本上阻塞,直到你的過程結束。
一些代碼一起玩:
int main(int argc, char* argv[])
{
int ch;
BOOL bResult;
printf("default console\n");
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();
return 0;
}
0
它已經有一段時間,因爲我用的WINAPI,但我擡頭the MSDN documentation,我沒能找到CreateConsole API函數。所以我的猜測是CreateConsole是遺留的東西,並已被AttachConsole取代。所以可能沒有區別,但CreateConsole可能已被棄用。
5
我不認爲有一個名爲CreateConsole
功能,但有AllocConsole
。
假設這就是你的意思,我認爲不同的是AttachConsole(ATTACH_PARENT_PROCESS)
可以return ERROR_INVALID_HANDLE
如果父進程沒有控制檯。
嘗試,無論從命令提示符並開始運行該代碼 - >運行:
#include <windows.h>
#pragma comment (lib, "user32.lib")
int main()
{
BOOL b;
char msg[1024];
b = FreeConsole();
sprintf(msg, "%d", b);
MessageBox(NULL, msg, "FreeConsole", 0);
b = AttachConsole(ATTACH_PARENT_PROCESS);
sprintf(msg, "%d", b);
MessageBox(NULL, msg, "AttachConsole", 0);
return 0;
}
從命令提示符下運行時,將顯示含有1
兩個消息框,這意味着兩個通話成功。從「開始」 - >「運行」運行時,第一個框中包含1
,第二個框中包含0
,表示僅第一次調用成功。第二個失敗,因爲explorer.exe(它是從開始 - >運行啓動的進程的父級)沒有控制檯。
相關問題
- 1. 函數nndist和kNNdist有什麼不同?
- 2. 處理函數和回調函數有什麼不同?
- 3. 靜態成員函數和全局函數有什麼不同?
- 4. 舊的和新的JavaScript函數語法有什麼不同?
- 5. 在javascript中傳遞函數和函數調用本身有什麼不同?
- 6. node.js中process.exit(1)和process.exit(0)方法有什麼不同?
- 7. 同步函數和同步塊之間有什麼區別?
- 8. SAL(Source Annotation Language)的用途是什麼?SAL 1和2有什麼不同?
- 9. 什麼是MongoDB的$ min?這與find()有什麼不同。sort({the_field:1})。limit(1)?
- 10. WinAPI AttachConsole?
- 11. 爲什麼我的C++函數有不同的指針參數?
- 12. AllocConsole問題
- 13. 下面得到(1)函數做什麼?
- 14. 在_proto_構造函數中,普通函數和箭頭函數有什麼不同?
- 15. 流利的API與其他API有什麼不同?
- 16. 我不知道什麼是argv和raw_input()有什麼不同?
- 17. 同名繼承函數和重載虛函數有什麼區別?
- 18. NtFsControlFile()和DeviceIoControl()函數有什麼區別?
- 19. lowByte()和highByte()函數有什麼作用?
- 20. $ get和$ find函數有什麼區別?
- 21. malloc()和虛函數有什麼問題?
- 22. round()和trunc()函數有什麼區別?
- 23. HTML和WML/WAP有什麼不同?
- 24. Log4J 1.2和Log4J 2.0有什麼不同?
- 25. oslo.config和oslo_config有什麼不同?
- 26. Html.Label和Html.Display有什麼不同?
- 27. iText,JasperReports和Adobe LC有什麼不同?
- 28. 與%.1f和%.01f有什麼不同?
- 29. Scala中Int和Integer有什麼不同?
- 30. 使用「=」和「LIKE」有什麼不同嗎?
可以在C#.NET來創建編譯成一個Windows程序(而不是一個控制檯程序)可執行文件的控制檯窗口? – configurator 2009-01-11 19:27:30