OpenCV學習筆記(2)隱藏 Console 窗口
来源:互联网 发布:unity3d破解版下载 编辑:程序博客网 时间:2024/06/05 06:43
http://blog.csdn.net/chenyusiyuan/article/details/4618962
在VC++中使用OpenCV,一般是建立一個 win32 console application 項目,當運行此類程序的時候,默認情況下會有一個類似DOS窗口的console窗口,供程序與用戶之間交互之用。
但是有時候我們只想在程序中運行一段功能代碼,不希望顯示這個 console 窗口,而是讓代碼執行完畢之後程序自動退出。隱藏這種 win32 console application 的 console 窗口,主要有兩種方式:
1、通過#pragma指令來修改,即在main函數前添加以下一行代碼:
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )
2、通過設置項目屬性來修改,即在 Project –> Properties -> Configuration Properties –> Linker -> System 的 Subsystem 項中,將 Console (/SUBSYSTEM:CONSOLE) 修改為 Console (/SUBSYSTEM:WINDOWS) ,這樣就把控制台程序窗口隱去了。
上述方法是通過設置編譯器的鏈接開關來實現的,所以讓我們來看一下編譯器的鏈接開關選項(也就是 linker 選項)。
一、linker 的 /subsystem 選項:
該選項的語法形式如下:
/SUBSYSTEM:{CONSOLE | EFI_APPLICATION | EFI_BOOT_SERVICE_DRIVER |
EFI_ROM | EFI_RUNTIME_DRIVER | NATIVE | POSIX | WINDOWS | WINDOWSCE}
[,major[.minor]]
這個鏈接選項告訴操作系統如何運行可執行文件。
—— CONSOLE:
win32 字符模式應用程序,此種類型的應用程序在運行的時候會產生一個類似DOS窗口的控制台窗口。如果在應用程序的主函數為 main() 或者 wmain(),在默認情況下該應用程序就是一個控制台應用程序。
—— Extensible Firmware Interface (EFI_***):
這4種 EFI_*** 是和CPU具體架構相關的參數選項,並不常用,有興趣的可以訪問 intel 主頁來查看相關內容。
—— NATIVE:
設備驅動器選項,如果 /DRIVER:WDM 選項被設定的話,該鏈接選項(NATIVE)就為默認選項。
—— POSIX:
在windows NT 種運行在POSIX子系統上的應用程序。
—— WINDOWS:
該類型的應用程序不產生console窗口,程序窗口由用戶自己創建,簡而言之就是一個標准的 Win32 application,其入口地址為 WinMain()函數或者 wWinMain()函數的地址。如果你在應用程序中定義的主函數為 WinMain 或者 wWinMain,在默認情況下該應用程序就是一個Win32 Application !
—— WINDOWSCE:
運行在 windows CE 上的應用程序。
—— major and minor (optional):
主版本號和次版本號,該選項為可選,該選項為0~65535之間的十進制整數。
從上面可以看出,如果我們建立一個 win32 console application 的話,linker 的 /subsystem 選項應該為CONSOLE,可以在 VC6 開發環境的 project->setting->link->project option 或者 VS2005/2008 開發環境的 Project –> Properties -> Configuration Properties –> Linker -> System 中看到!
二、應用程序是如何運行的!
我們知道用 VC 編寫的程序,運行的時候是需要 C/C++ 運行庫支持的。當我們運行一個 C/C++ 程序的時候,鏈接器會首先尋找應用程序的啟動函數,例如:
如果你建立了一個 console 程序的話,編譯器的鏈接開關會是以下這種形式:
/subsystem:"console" /entry:"mainCRTStartup" (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)
如果你建立了一個win32 application,編譯器的鏈接開關則會是以下形式:
/subsystem:"windows" /entry:"WinMain" (ANSI)
/sbusystem:"windows" /entry:"wWinMain" (UINCODE)
上面的兩種形式可以在 Project –> Properties -> Configuration Properties –> Linker -> System (VS2005/08)中看到,其中的 subsystem 和 entry 並不需要都設置,如果你只設置了 /subsystem:"console" 的話,那麼默認的 entry 開關應為 /entry:"mainCRTStartup";反之,如果你在應用程序中定義了 main 函數的話,默認情況下,你的 /subsystem 開關應該為 /system:"console"。
在默認情況下,/subsystem 和 /entry 開關是匹配的,也就是 console 對應 mainCRTStartup 或者 wmainCRTStartup;windows 對應 WinMain 或者 wWinMain。
但是我們也可以通過手動改動的方式使他們不匹配,例如我們可以這樣改動:
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" ) // 設置入口地址
int main(int argc, char* argv[])
{
MessageBox(NULL, "hello", "Notice", MB_OK);
return 0;
}
在默認情況下,鏈接器看到 /subsystem 下是 windows 選項的時候,它會自動尋找 WinMain 或者 wWinMain,
但我們強制指定入口地址,這樣運行程序的時候默認的console窗口就會隱藏!
上面是在代碼中使用 #pragma 指令來設置,還有一種就是直接在開發環境的Project –> Properties -> Configuration Properties –> Linker -> System (VS2005/08)中手工改動!
- OpenCV學習筆記(2)隱藏 Console 窗口
- OpenCV学习笔记(2)隐藏 Console 窗口
- Opencv在VS中去掉console窗口
- OpenCV学习笔记(1)__隐藏 Console 窗口
- OpenCV学习笔记(1)__隐藏 Console 窗口
- OpenCV學習筆記(5)在單個窗口中顯示多個視頻子窗口
- OpenCV學習筆記(21)在OpenCV窗口中創建滾動條瀏覽大圖
- 隐藏Console窗口
- 去掉 CONSOLE 窗口
- 隐藏console窗口方法
- 获取console窗口句柄
- VC弹console窗口
- 打开 console 调试窗口
- vc项目中添加console窗口(备忘)
- VC Console(控制台)程序如何隐藏CMD窗口
- 去掉console黑窗口的方法(qt和vs)
- 用console做调试输出窗口(方法一)
- 去掉console黑窗口的方法(Qt和VS)
- 新浪微博API开发简介之PHP基础篇-用户授权
- 关联容器简介
- linux下svn不能连接上windows服务器:SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法
- 读图时代的图片优化方法
- OpenCV 學習筆記(1)安裝設置、顯示圖像
- OpenCV學習筆記(2)隱藏 Console 窗口
- OpenCV學習筆記(3)用VS2008編譯OpenCV2.0源代碼(編譯錯誤已解決)
- OpenCV學習筆記(4)視頻文件的讀取與保存(2010-01-23 更新)
- OpenCV學習筆記(5)在單個窗口中顯示多個視頻子窗口
- OpenCV學習筆記(6)基於 VC+OpenCV+DirectShow 的多個攝像頭同步工作
- 2012-07-08
- JavaScript设置Cookie
- OpenCV學習筆記(7)圖像的通道(channels)問題
- Prime Distance----筛素数