c++ - Visual Studio : how to get output in "Win32" project

标签 c++ visual-studio-2010

我想编写一个简单的程序来查找所有打开的窗口并显示它们的窗口名称;然而,在“Win32 项目”下的 Visual Studio 中,控制台无法通过“cout”函数输出任何内容。

但是如果我试图将代码放在“Win32 控制台”项目下,我会收到有关外部依赖项的错误(所以我假设我不能那样做?)。

那么有什么方法可以将控制台添加到“Win32”项目吗?

有问题的代码(当然是未完成的):

// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR lpCmdLine, int nCmdShow){
    EnumWindows(EnumWindowsProc, NULL);
    return 0;
}

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam){
    LPTSTR title = 0;

    GetWindowText(hwnd, title, sizeof(title));
    cout << "Window Name: " << endl;

    return TRUE;
}

最后但同样重要的是,当我尝试在“Win32 控制台”项目中运行代码时遇到的错误。

Error   2   error LNK1120: 1 unresolved externals   c:\users\justin\documents\visual studio 2012\Projects\ConsoleApplication5\Debug\ConsoleApplication5.exe 1   1   ConsoleApplication5
Error   1   error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup   c:\Users\Justin\documents\visual studio 2012\Projects\ConsoleApplication5\ConsoleApplication5\MSVCRTD.lib(crtexe.obj)   ConsoleApplication5

最佳答案

在您的控制台项目中,必须调用 main 函数而不是 WinMain。

#include <iostream>
#include <windows.h>

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam)
{
    LPTSTR title = 0;

        GetWindowText(hwnd, title, sizeof(title));
        std::cout << "Window Name: " << std::endl;

        return true;
}

int main(int argc, char* argv[]) // SUBSYSTEM:CONSOLE
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR lpCmdLine, int nCmdShow) // SUBSYSTEM:WINDOWS
{
        EnumWindows(EnumWindowsProc, NULL);

        std::cin.get();
        return 0;
}

这适用于 Win32 控制台应用程序项目。这正是您的代码,但我将 WinMain 函数的签名更改为标准 main。

要知道您应该使用两者中的哪一个,请检查以下设置:Properties -> Linker -> System -> SubSystem,如果它设置为 Console (/SUBSYSTEM:CONSOLE ) 它将期望标准主签名,如果它设置为 Windows (/SUBSYSTEM:WINDOWS) 它将期望 WinMain 签名。

关于c++ - Visual Studio : how to get output in "Win32" project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17938275/

相关文章:

c++ - Symbian C++ 和 Maemo 的代码覆盖工具

C++ 标准方法列表

c++ - 为什么我不能在结构中初始化char数组?

c++ - 非虚重载成员函数

visual-studio-2010 - MSI 创建 : Terminate application before upgrading

c# - 如何使用 vs 2010、c# 以编程方式在 Word 2007 文档中插入或编辑饼图?

c# - 评论内有错误..?

visual-studio-2010 - VS2010-该名称的项目已在解决方案中打开

visual-studio-2010 - Visual Studio 2012 停靠窗口 Tab 键顺序

c++ - wxWidget v2.8 软件。让它与 3.0 库一起使用?