Articles of visual studio 2013

调用静态链接函数崩溃每次在Windows 8/10而不是7

问题 : 我已经build立了https://github.com/reorg/pg_repack项目,它生成一个二进制文件。 这个二进制文件与postgres 9.6可重新分发(我使用EntrepriseDb)。 所有在Windows 7上工作正常。我没有问题,在构build或运行期间。 但是,在Windows 8或10,应用程序总是崩溃的下列序列。 这个二进制文件是使用Visual Studio 2013在Windows 7上生成的(在Windows 10上,我尝试过使用在Windows 10上生成的一个版本,但它不会改变任何东西),在x64系统上为x64应用程序生成二进制文件,它使用dynamic基础。 为了确保我使用正确的二进制文件,我已经将所有可重新分发的二进制文件复制到我的应用程序的文件夹中。 在Windows 7上的组装细节(工作案例): main之后几行,应用程序调用函数set_pglocale_pgservice set_pglocale_pgservice(argv[0], "pgscripts"); 00007FF6E4B39C85 mov eax,8 00007FF6E4B39C8A imul rax,rax,0 00007FF6E4B39C8E lea rdx,[default_options+120h (07FF6E4B43B10h)] 00007FF6E4B39C95 mov rcx,qword ptr [argv] 00007FF6E4B39C9A mov rcx,qword ptr [rcx+rax] 00007FF6E4B39C9E call qword ptr [__imp_set_pglocale_pgservice (07FF6E4B40520h)] 内存在07FF6E4B40520h 0x00007FF6E4B40520 00000001403e1da0 .>@…. 0x00007FF6E4B40528 0000000000000000 …….. 0x00007FF6E4B40530 […]

x86 LargeAddressAware兼容性的unit testing

对于win32可执行文件(x86),我们可以设置LargeAddressAware标志,以便在x64 Windows上运行时可以访问4 GB(而不是2 GB)的虚拟地址空间。 这看起来非常有吸引力。 但是,有风险涉及。 例如,请参阅: 在32位Windows可执行文件中使用/ LARGEADDRESSAWARE的缺点? 因此,让我们继续并configuration正在执行一些unit testing的系统范围registry开关AllocationPreference设置为MEM_TOP_DOWN 。 应该这样做,不是吗? 它不! 问题是Visual Studio的x86“testing运行器”(执行引擎)本身不是LAA。 这个父进程只会看到“低”2 GB的VAS,我们的模块也会被testing。 来自VS2013.1的例子 mstest.exe产生QTAgent32.exe vstest.console.exe产生vstest.executionengine.x86.exe 他们都不是LAA启用! 那么使用启用LAA的x86testing运行器的推荐方法是什么? 这里有一个代码片段(VSunit testing,csharp)来检查LAA执行环境。 除非它成功了你的testing环境是不适合你有一套unit testing(也)覆盖与LAA的兼容性: using System; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestCheckEnv32LAA { [TestClass] public class CheckEnv32LAA { #region [Native DLL import] [Flags()] public enum AllocationType : uint { COMMIT […]

在C ++中使用Media Foundation&Windows 8捕获问题

这将是我的第一个问题在StackOverflow几天后寻找一个解释。 请温柔地问我,因为我知道我的问题有点奇怪是一个普遍的问题。 我制作了一个基于微软示例“CaptureToFile”的MF捕捉video应用程序。 它确实在Windows 7 x64上工作。 我升级到Visual Studio 2013没有问题。 当我尝试在Windows 8.1 x64机器上进行所有的开发时出现问题。 该应用程序编译和执行没有错误,但它是无法通过在asynchronous模式下使用m_pReader-> ReadSample()捕获采样; 只有前两个样本到达OnReadSample方法; 并且必须有“控制”样本,因为IMFSample全部为空。 之后,应用程序被“吊”等待数据。 我已经尝试了原始MFCaptureToFile样品,同样的悲伤结果。 当然,我觉得硬件和软件是相似的(相同的驱动程序版本的捕获卡,都是台式电脑…) 你知道这种行为的可能原因吗? 在Win7中,一切都是无懈可击的! 或者至less,如果你能点亮一些关于寻找新事物的新途径 提前致谢 更新:游戏中还有另外一个“玩家”。 纵观线程,我发现一个工作线程在'RTWorkQ.dll',实时工作队列容器中,只针对Windows 8。我将继续研究。 同时,如果您有任何想法,可以分享,我很乐意听到您的声音。 更新2:我修改了示例MFCaptureToFile同步获取video样本,因为我认为这个问题可能是由于asynchronous行为; 与队列有关。 我不得不说,即使这个变化,问题仍然存在。 第二次尝试阅读样本时,应用程序被“吊死”,等待阅读不会永远不会到来。 更新3:我已经尝试使用捕获video(MFCaptureEngine)的另一种MF方式的CaptureEngine示例应用程序。 它的构build和运行完美无瑕,但是在开始“预览”时不会显示任何图像,也不会logging任何有用的,只有非可播放的文件。 更新4:我已经在Windows 8 PRO中安装了Visual Studio 2010 Ultimate。 样本MFCaptureToFile在样本中再次失败。 无法从图像采集卡读取第二个采样。 我开始认为这可能是采集卡(Datapath VisionRGB-E1S)和Windows 8 PRO之间的不兼容,尽pipe驱动程序确保在此平台上正常工作,并且testing程序显示图像。 明天我要用外置的USBnetworking摄像机来testing。

在VS 2015和VS 2013上运行相同代码的问题

在Visual Studio 2013和2015中运行一段代码时,会得到两个不同的结果。 在Visual Studio 2015上,我得到一个NullReference,在2013年,它的工作方式应该如此。 此外,Visual Studio 2015在Windows 8.1和Windows 8.1上运行。 这段代码是: private static T FindParentOfType<T>(DependencyObject o) { dynamic parent = VisualTreeHelper.GetParent(o); return parent.GetType().IsAssignableFrom(typeof(T)) ? parent : FindParentOfType<T>(parent); } 代码被调用: Grid RiskGrid = FindParentOfType<Grid>(ChampViewModelSel); 错误是一个Nullreference当它检查IsAssginableFrom因为在VS2015中,它find了一个Canvas而不是在VS2013中find的希望的Grid? 堆栈跟踪 StackTrace " at Microsoft.CSharp.RuntimeBinder.SymbolTable.GetOriginalTypeParameterType(Type t)\r\n at Microsoft.CSharp.RuntimeBinder.SymbolTable.AreTypeParametersEquivalent(Type t1, Type t2)\r\n at Microsoft.CSharp.RuntimeBinder.SymbolTable.LoadMethodTypeParameter(MethodSymbol parent, Type t)\r\n at Microsoft.CSharp.RuntimeBinder.SymbolTable.LoadSymbolsFromType(Type originalType)\r\n at […]

带有更新2安装的Visual Studio Express 2013 for windows在“configuration系统”中占用过多时间

Visual Studio Express 2013 for web已经安装在我的Windows 8.1笔记本电脑上。 现在我正在尝试安装与更新2寡妇的Visual Studio Express 2013。 它工作正常,直到最后一步,但在最后一步“configuration您的系统,这可能需要一个白色的”。 它就像无限循环一样。 它只是显示安装和进度 这需要3个多小时,而且还是一样的进展 。 在我已经决定取消设置后,但取消同样的问题,只是继续下去。 之后,我杀了任务pipe理器的过程。 然后重新启动笔记本电脑。 但重新启动后,安装程序将从其所在的位置开始。 仍然是同样的问题。 请有人帮忙 要么取消设置,要么安装成功。 但没有什么作用,就像无限循环一样。 任何想法我怎么能做到这一点?

Visual Studio 2013:CL.exe退出,代码为-1073741515

我有一个全新的 Windows 8.1 Pro x64安装与全新的 Visual Studio 2013 Pro。 当试图编译一个项目与平台工具集到Windows7.1SDK我越来越 Error 1 error MSB6006: "CL.exe" exited with code -1073741515. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets 57 5 MenuBrowser 我试着运行提供的“Windows SDKconfiguration工具”,除了得到关于Visual Studio 2005和2008未安装错误,我认为它做了它的工作。 我尝试手动编辑registry: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows 我手动将CurrentInstallFolder作为C:\Program Files\Microsoft SDKs\Windows\v7.1\和CurrentVersion作为7.1.7600.0.30514 。 如果我查看项目属性并单击其中的不同path/variables – >更多 – >macros,我可以看到$(WindowsSdkDir)是正确的。 任何想法,我应该尝试什么? 在Windows 7和VS 2012的旧开发计算机上从来没有遇到过这个问题。 LE作为一个笔记,如果我尝试一个新的项目与v120工具,它的工作原理,但我需要Windows7.1SDK工具。

如何诊断Windows上的堆损坏错误?

我正在使用Visual Studio 2013 Ultimate的Windows 8.1 64位。 我将一个程序从Linux移植到使用C ++,OpenGL和SDL的Windows。 我有适当的库自定义编译通过Cmake在Windows上的64位。 当我从Visual Studio运行程序时,IDE说有一个头损坏。 这并不奇怪,因为我使用指针来实例化对象,而且我正在使用原始指针,我打算为了参数而改变为智能指针。 以后我会做魔术。 与此同时,我用我的Linux计算机通过Valgrind诊断任何内存泄漏,Valgrind没有任何严重的报告。 然后我开始使用CppCheck,但是那里也没有任何严重的问题。 也许我在这里太宽松了,Windows可能实际上正在采取比Linux更严肃的东西,这是一个惊喜,因为MSVC比GCC更容易宽容。 所以,这个程序在Linux上工作,而不是在Windows上。 (太棒了!)而Visual Studio并没有通过抛出exception让我讨厌Windows的地方变得更加困难。 我开始search一个解决scheme,碰到这个叫做gflags或页面助手的东西,所以我安装了debugging工具,试图启动gflags,但我不知道如何使用它! 我后来发现,你必须使用一些其他的工具称为adp,然后附加gflags,所以当我启动adp它崩溃。 所以现在我不知道该做什么,并且正在放弃这个端口(这很有趣,因为很多人抱怨把程序从Windows移植到Linux是相当困难的,而事实恰恰相反)。 所以,现在我呼吁这个社区的帮助:我如何debugging/诊断Windows上发生的堆损坏错误,但不是在Linux上? 我真的应该使用gflags,还是应该用我的胆量呢?

无法运行在Windows XP中由VS2013创build的安装程序文件

在VS-2013,Dotnet4框架和32位体系结构中创build了一个用c#开发的安装文件。 它正在安装在Windows 7和Windows 8,但不是在Windows XP(SP3)与pipe理员previllege。 错误:“在安装应用程序之前安装程序中断,您需要重新启动安装程序才能再次尝试。 帮助需要在这方面。 Output of msiexec /i Setup.msi /l*v MyLogFile.txt === Verbose logging started: 2/12/2015 20:19:11 Build type: SHIP UNICODE 3.01.4001.5512 Calling process: C:\WINDOWS\system32\msiexec.exe === MSI (c) (D4:B4) [20:19:11:125]: Resetting cached policy values MSI (c) (D4:B4) [20:19:11:125]: Machine policy value 'Debug' is 0 MSI (c) (D4:B4) [20:19:11:125]: ******* RunEngine: ******* Product: […]

换页(\ f)和垂直标签(\ v)不能在C中工​​作

很长一段时间,我正在写一个C程序。 编写程序时,我不得不使用换页和垂直选项卡。 所以我在程序中使用了\ f和\ v。 但是,而运行代码,而不是填表和垂直选项卡,我可以看到男性和女性的符号。 我不知道为什么它不工作。 以下是我的代码示例: #include<stdio.h> #include<conio.h> void main() { printf("I am \f SpiderCode\n"); printf("I am \v SpiderCode\n"); getch(); } [ 注:我正在使用visual studio 2013上面的代码] 上面代码的输出

多字节到宽string转换函数“mbstowcs”是否在传递string文字时使用源文件的编码?

附录我自己的试探性答案出现在问题的底部。 基于utf8everywhere.org上的build议,我将一个陈旧的VC6 C ++ / MFC项目转换为VS2013和Unicode。 一路上,我一直在研究Unicode,UTF-16,UCS-2,UTF-8,Unicode和UTF-8的标准库和STL支持(或者说,标准库的缺乏支持), ICU , Boost .Locale ,当然还有需要UTF-16 wchar的Windows SDK和MFC的API。 正如我一直在研究上述问题一样,一个问题仍然反复出现,我无法以澄清的方式回答我的满意。 考虑C库函数mbstowcs 。 该function具有以下签名: size_t mbstowcs (wchar_t* dest, const char* src, size_t max); 第二个参数src是(根据文档 )a Cstring与多字节字符进行解释。 多字节序列应从初始转换状态开始。 我的问题是关于这个多字节string 。 我的理解是,多字节string的编码可能因string而异,编码也不是标准规定的。 MSVC文档似乎没有为这个function指定一个特定的编码。 我现在的理解是,在Windows上,这个多字节string需要用活动语言环境的ANSI代码页进行编码。 但是我的清晰度在这一点上开始消失。 我一直在想,源代码文件本身的编码是否会影响mbstowcs的行为,至less在Windows上。 而且,我也对编译时发生的事情和上面的代码片段在运行时发生了什么感到困惑。 假设你有一个传递给mbstowcs的string ,如下所示: wchar_t dest[1024]; mbstowcs (dest, "Hello, world!", 1024); 假设这个代码是在Windows机器上编译的 。 假设源代码文件本身的代码页与编译器运行的机器上当前语言环境的代码页不同 。 编译器会考虑源代码文件的编码吗? 源代码文件的代码页是否与编译器运行的活动语言环境的代码页不同?是否会影响生成的二进制文件? 另一方面,也许我错了 […]