Windows C++ GUI 应用程序
Windows C++ GUI application
我目前正在努力将我的 C++ Qt5/CMake 应用程序从 linux 移植到 windows。当在 linux 中启动应用程序时,我看到 UI 并且一切正常。在 windows 首先启动黑色终端,然后从终端启动我的应用程序。如何在没有黑色控制台的情况下启动应用程序?不美
我正在使用 MSVC cmake 生成器和 visual studio 2013 express。
谢谢大家!
编辑 CMakeLists.txt 以创建 WIN32 应用程序
IF(MSVC)
SET(OPTIONS WIN32)
ENDIF(MSVC)
ADD_EXECUTABLE(${APP_NAME} ${OPTIONS}
${HEADER_FILES}
${SOURCE_FILES}
}
编辑 main.cpp 以使用 wWinMain 并将输入参数转换为 argc、argv
#ifdef _MSC_VER
# include <windows.h>
# include <shellapi.h>
#endif
/// ... some code
#ifdef _MSC_VER
INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPWSTR, INT)
{
UNREFERENCED_PARAMETER(hInst);
UNREFERENCED_PARAMETER(hPrevInstance);
int argc;
char** argv;
{
LPWSTR* lpArgv = CommandLineToArgvW( GetCommandLineW(), &argc );
argv = (char**) malloc( argc*sizeof(char*) );
int size, i = 0;
for( ; i < argc; ++i )
{
size = wcslen( lpArgv[i] ) + 1;
argv[i] = (char*) malloc( size );
wcstombs( argv[i], lpArgv[i], size );
}
LocalFree( lpArgv );
}
#else
int main(int argc, char *argv[])
{
#endif
QGuiApplication a(argc, argv);
/// ... some code
int code = a.exec();
#ifdef _MSC_VER
{
int i = 0;
for( ; i < argc; ++i ) {
free( argv[i] );
}
free( argv );
}
#endif
return code;
}
我目前正在努力将我的 C++ Qt5/CMake 应用程序从 linux 移植到 windows。当在 linux 中启动应用程序时,我看到 UI 并且一切正常。在 windows 首先启动黑色终端,然后从终端启动我的应用程序。如何在没有黑色控制台的情况下启动应用程序?不美
我正在使用 MSVC cmake 生成器和 visual studio 2013 express。
谢谢大家!
编辑 CMakeLists.txt 以创建 WIN32 应用程序
IF(MSVC)
SET(OPTIONS WIN32)
ENDIF(MSVC)
ADD_EXECUTABLE(${APP_NAME} ${OPTIONS}
${HEADER_FILES}
${SOURCE_FILES}
}
编辑 main.cpp 以使用 wWinMain 并将输入参数转换为 argc、argv
#ifdef _MSC_VER
# include <windows.h>
# include <shellapi.h>
#endif
/// ... some code
#ifdef _MSC_VER
INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPWSTR, INT)
{
UNREFERENCED_PARAMETER(hInst);
UNREFERENCED_PARAMETER(hPrevInstance);
int argc;
char** argv;
{
LPWSTR* lpArgv = CommandLineToArgvW( GetCommandLineW(), &argc );
argv = (char**) malloc( argc*sizeof(char*) );
int size, i = 0;
for( ; i < argc; ++i )
{
size = wcslen( lpArgv[i] ) + 1;
argv[i] = (char*) malloc( size );
wcstombs( argv[i], lpArgv[i], size );
}
LocalFree( lpArgv );
}
#else
int main(int argc, char *argv[])
{
#endif
QGuiApplication a(argc, argv);
/// ... some code
int code = a.exec();
#ifdef _MSC_VER
{
int i = 0;
for( ; i < argc; ++i ) {
free( argv[i] );
}
free( argv );
}
#endif
return code;
}