- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个程序在使用 Visual Studio 2010 编译时运行良好,但现在我使用 Visual Studio 2017 fgets/fputs 似乎无法正常运行。(是的,我知道这听起来如何,我确定问题出在我身上,不是 Visual Studio...)
这是一个包含 3 个项目的 Visual Studio 解决方案,都是 Visual C++ 命令行应用程序。
程序 1 启动程序 2 和程序 3,使用管道将程序 2 的标准输出发送到程序 3 的标准输入。因此
lastPipe = GetStdHandle(STD_INPUT_HANDLE);
/* Duplicate stdin to input_desc */
DuplicateHandle(thisProcessId, lastPipe, thisProcessId, &input_desc2, 0, FALSE, DUPLICATE_SAME_ACCESS);
sa_first.nLength = sizeof(sa_first);
sa_first.lpSecurityDescriptor = NULL;
sa_first.bInheritHandle = TRUE;
CreatePipe(&readPipe2, &out_desc2, &sa, 16384);
/* Duplicate the input_desc handle so it can be closed */
DuplicateHandle(thisProcessId, readPipe2, thisProcessId, &lastPipe, 0, FALSE, DUPLICATE_SAME_ACCESS);
CloseHandle(readPipe2);
memset(&si2,0,sizeof(si2));
si2.cb = sizeof(si2);
si2.dwFlags = STARTF_USESTDHANDLES;
si2.hStdInput = input_desc2;
si2.hStdOutput = out_desc2;
si2.hStdError = GetStdHandle(STD_ERROR_HANDLE);
CreateProcess(NULL, "program 2.exe", NULL,NULL,TRUE,0,NULL,NULL,&si2,&pi2);
// Send Program 2 stdout to Program 3 stdin
DuplicateHandle(cpid, lastPipe, cpid, &input_desc3, 0, TRUE, DUPLICATE_SAME_ACCESS));
CloseHandle(lastPipe);
out_desc3 = GetStdHandle(STD_OUTPUT_HANDLE);
memset(&si3,0,sizeof(si3));
si3.cb = sizeof(si3);
si3.dwFlags = STARTF_USESTDHANDLES;
si3.hStdInput = input_desc3;
si3.hStdOutput = out_desc3;
si3.hStdError = GetStdHandle(STD_ERROR_HANDLE);
CreateProcess(NULL, "program 3.exe", NULL,NULL,TRUE,0,NULL,NULL,&si3,&pi3);
(为简洁起见删除了错误检查)
现在是有趣的部分。程序 2 有这个:
// Program 2
fputs("Hello world", stdout);
putc('\n', stdout);
fputs("This should be line 2", stdout);
putc('\n', stdout);
最后,程序 3 是这样的:
// Program 3
char buffer[1024];
retval = fgets(buffer, 500, stdin);
fprintf(stderr, "|%s|", buffer);
当使用 Visual Studio 2017 编译时,程序 3 的输出是
|Hello worldThis should be line 2\n|
(注意“world”和“This”之间缺少换行符,即使它是程序 2 的标准输出的一部分)
它不会每次都发生,只有在调用 fputs/putc 函数数百(或数千)次之后才会发生。
当使用 Visual Studio 2010 编译时,这可以正常工作。
我已经阅读(并重新阅读,并再次阅读)VS 更改日志 ( https://learn.microsoft.com/en-us/cpp/porting/visual-cpp-change-history-2003-2015 ),尽管其中似乎没有任何内容与 CreatePipe、CreateProcess、fputs/putc/fgets 相关...
我也遇到过这个: https://www.daniweb.com/programming/software-development/threads/502037/redirect-stdout-to-a-pipe-with-visual-studio-2015可悲的是,“我只使用 posix 调用”并不像我需要的那样具有启发性/明确性。
我改成
fputs("Hello world\nThis should be line 2\n");
fflush(stdout);
然后
fputs("Hello world\r\nThis should be line 2\r\n");
fflush(stdout);
两者均无效。
我尝试打开命令提示符并执行
"Program 2" > temp.txt
"Program 3" < temp.txt
虽然这不是一个可接受的解决方案(我们的用户不会支持这样的事情),但它确实有效
我需要更改什么才能让它像在 VS 2010 中那样运行?
非常感谢!
最佳答案
检查您的项目设置,尤其是调试页面,并确保命令行和工作目录的设置符合您的预期。该页面是所有用户设置(意味着它们不会随项目移动)。
我什至不确定如果您要从更新版本的 VS(比如 vs2017 中的 vs2010 项目)中的同一目录打开解决方案,VS 是否会导入该页面。
关于c++ - Visual Studio 2017 中有关管道和子进程的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310287/
我想根据我使用的 visual studio 版本编译不同的东西,比如 #if VISUAL_STUDIO_VERSION > 2015 eventH?.Invoke(this, EventArgs.
在 Visual Studio 2010 中调试并将鼠标悬停在变量名称上时,我可以选择使用 3 种不同的内置可视化工具:文本、XML 和 HTML。 这是我所指的示例: 由于我越来越多地使用基于 JS
我将可视化编程语言理解为允许程序员在屏幕上操作图形(而不是文本)对象以构建功能的语言。 我在 C#、VB 等中看到的最接近的东西是 RAD 控件,但这只是组成 UI 和最简单的功能——甚至与语言本身无
我目前正在使用 Visual Studio 2015 来编程 ASP.NET Core 应用程序。我对安装 Visual Studio 2017 有以下疑问: 什么被认为是最佳实践和/或最干净的方法?
尝试从扩展和更新获取 Visual Studio 扩展时,出现以下错误:- 向 visualstudiogallery.msdn.microsoft.com/Services/VStudio/Exte
我已经开发了Windows服务,并且该服务正在我的帐户下在本地计算机上运行。当我尝试通过在Visual Studio 2008中将其作为一个过程附加该服务来调试该服务时,我得到“无法附加到该过程。 V
作为标准安装的一部分,Visual Studio Code 带有一个名为“Monokai Dimmed”的颜色主题。 有没有办法将它移植到 Visual Studio 2015?我检查了社区主题( h
Visual Studio Community Edition是否可以使用Visual Studio Online帐户上的存储库? 我一直为包含在Online帐户中的Visual Studio Onl
我正在使用文本可视化工具在 Visual Studio 中调试字符串变量。然而,似乎字符串中间的大部分不见了。这背后的原因是什么? 最佳答案 Visual Studio 中的 Text Visuali
我正在开始一个涉及使用多个 SDK 的新项目,包括: 英特尔凌动开发者 SDK 文本转语音 SDK(建议?) 某种网络摄像头和增强现实支持(建议?) 我目前有 2008,但我也可以安装 2010。是否
我想知道,如果我发送一个解决方案文件夹(它是用 visual studio C# 编写的),您可以在 visual studio for mac 中打开解决方案吗? 在visual studio 20
有没有办法在 Visual Studio Code 和 Visual Studio 中设置相同的快捷方式(而不必每次都手动更改它们)? 例如,我在 Visual Studio Code 中经常使用 A
我无法启用 实时可视化树 在 Visual Studio 2017 用于 UWP 应用程序 (C#)。这个工具在 VS2015 上工作,但在 VS2017 中从来没有为我工作过。它对我的 WPF 项目
我刚开始了解 Visual Studio Code。我想知道,我可以将 Visual Studio 替换为所有 .NET 开发相关的工作吗? 我可以节省 Visual Studio 许可的成本吗? V
我安装了具有有效许可证(Visual Studio 订阅)的 Visual Studio 2019 企业版(VS 2019 16.1.4),它运行良好。 突然之间,当我尝试打开项目或项目中的任何文件时
Visual Studio 2015 Pro 提供以下 错误 : error BC36716: Visual Basic 9.0 does not support implicit line cont
我正在我的 PC 中使用 .net Framework 2.0 和 Visual C#(Microsoft Visual Studio 2008)开发 Windows 应用程序。 完成我的项目后,我必
有什么方法可以在启动 VS 时禁用 VA X 并仅在需要时将其重新打开?因为它会导致一些滞后。我似乎在 VS 的选项或 VA 的选项中都找不到该选项。 最佳答案 持shift在 Visual Stud
我可以将 Visual Studio 命令提示符 与免费的 Visual C# Express 一起使用吗? Visual Studio 命令提示符 被引用 here : Run 'Visual St
这很容易成为 Visual Studio 历史上最烦人的“功能”之一,我不明白它为什么存在 -- 曾经 . 为什么 CodePlex 项目需要关心我使用的是什么版本的 Visual Studio? 在
我是一名优秀的程序员,十分优秀!