【发布时间】:2017-10-01 22:45:26
【问题描述】:
操作环境:Windows 7、Visual Studio 2010、CLR GUI。
因此,我接到了一项不光彩的任务,即增强从命令提示符启动的 GUI 应用程序。因为它是。因为以前的实施者做出了糟糕的设计决策。无论如何,它会根据输入参数启动几个 GUI 之一。
如果(何时)用户键入了代码无法理解的内容,我希望能够打印回相同的命令提示符窗口。
这是我尝试过的(没有任何输出):
int main( array<System::String^>^ args )
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
OutputDebugString("hello");
Trace::WriteLine("hello");
Debug::Trace::WriteLine("hello");
Console::WriteLine("hello");
std::cout << "hello";
printf("hello");
return 0;
}
提前致谢!
更新:我不想使用AllocConsole(),因为这会打开一个新控制台,当应用程序退出时它会连同所有数据一起消失。同样,弹出消息框也不起作用。我正在寻找一种使输出持久的方法。
迄今为止,我可以从应用程序获取输出的唯一方法是通过消息框(非持久性)或打开一个在应用程序退出时消失的新控制台(通过 AllocConsole() )。而且我是在命令提示符下运行的,而不是调试器的“播放”按钮。
更新
为什么不做研究会被否决?我花了一天时间试图解决这个问题,浏览了几十篇试图找到解决方案的帖子,到目前为止,我发现其他人也在寻找相同的答案,但没有找到。 AllocConsole() 或更改项目类型始终是解决方案,但对我来说都不是解决方案。
更新 我添加了“完整代码”,即 2 个语句。这就是所有的代码。很简单。我正在跳过 GUI 的启动,因为我现在不关心它,我只是希望它打印回启动应用程序的控制台。最基本的HelloWorld。如果有我需要发布的项目设置,我不知道哪些是相关的。这是我想在 GUI 启动之前打印到控制台的地方。如果用户输入有错误,我将无法显示 GUI。
【问题讨论】:
-
使用 Win32 的
AllocConsole函数创建一个您的进程拥有的控制台窗口,您可以将 stdin/stdout 重定向到该窗口。 -
我无法选择我正在使用的内容,我正在添加到其他人的代码中。我使用过 AllocConsole,但它创建了一个新控制台。如果您退出应用程序,信息就会消失。我希望它在我开始它的外壳中。这是我第一次涉足 Visual Studio 编码。我迫不及待地想回到 Linux...
-
您应该编辑您的问题以明确您想要什么。
-
您在创建项目时是否选择了正确的项目类型?您不应该选择“Win32 控制台应用程序”而不是托管 C++ 或 C++/CLI 吗?另请注意,要使事情持久,您需要在命令提示符下手动调用可执行文件;每次运行时单击 Visual Studio Play 按钮将始终关闭控制台窗口!
-
@PfunnyGuy 我要求更多代码的原因是其他人只是看到一个控制台应用程序(而不是您试图更改的现有代码)。请参阅我刚刚添加的答案。
标签: visual-studio visual-c++ c++-cli