我有一个friend从我那里接手了一个VisualC++项目,但在运行它时遇到了问题。它是一个图形应用程序,它使用QtGUI库。我提到这个的原因是因为下面的错误。他可以使用VisualStudio2010构建和链接该程序,但是当他运行它时,事件查看器中会出现以下消息:Activationcontextgenerationfailedfor"D:\Test\Qt\4.2.2\bin\QtGuid4.dll".DependentAssemblyMicrosoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3
我有一个依赖于MSVCR80并分配我需要清理的资源的第三方DLL。该库不公开用于执行此操作的免费函数。相反,我需要加载相同的运行时库并手动调用free函数。作为解决方法,我正在尝试编写一个“包装器”DLL,它加载正确的运行时并公开free函数。此DLL是使用VisualStudio2010创建的,并且依赖于单独的运行时库。执行LoadLibrary("msvcr80.dll")失败并出现错误R6034,我猜这是因为明显的问题。甚至可以使用LoadLibrary加载msvcr80.dll吗?我是否需要创建一个list,将其嵌入DLL并将msvcr80.dll存储在与我的包装器DLL相同的
我的解决方案是昨天构建的。今天,除了.hpp和.cpp文件外,它没有改变任何东西。VisualStudio2013的完整错误文本(使用2013年11月CTP):Error1errorLNK2005:__xi_aalreadydefinedinMSVCRT.lib(cinitexe.obj)C:\Users\drtwox\dev\repos\game\trunk\engine\game\LIBCMT.lib(crt0init.obj)gameError2errorLNK2005:__xi_zalreadydefinedinMSVCRT.lib(cinitexe.obj)C:\Users\
MSVisualC++运行时库中有什么?我的意思是,我用谷歌搜索了一下,我总能找到帮助,appxxxx给我MSVisualC++运行时库错误,没有任何解释。我以为WindowsC运行时库是Windows自带的?不是用VC++吗?谢谢。编辑:首先,感谢您的回答。我现在对Windows中的运行时库有一个坏主意。我的意思是,第一部分,Windows内部有它的win32API,所以,没关系,我知道。此外,Win32API来自内核和用户部分。但我一直认为像GDI这样的函数是作为DLL访问的(我仍然相信它们是)。但我认为甚至像printf这样的函数也存在于某些Windows文件中。所以,我是对的,
在我的VS2012中,我有4个可用的工具集:v90、v100、v110和v110_xp。我用两个项目teSTLib(静态库)和testexe(控制台应用程序)做了一个简单的测试。该接口(interface)只是一个带有签名的函数voidtest().结果:teSTLib(v90),testexe(v90以外的任何东西)->不链接teSTLib(v100),testexe(v110orv110_xp)->链接但是,我觉得v100和v110会链接起来有点奇怪,所以我试着让场景复杂一点。现在我的方法是这样的:std::maptest(conststd::string&arg).正如预期的那样
我正在使用VS2008开发默认使用CRT版本9的COMdll但我使用的是与新CRT不兼容的TSF(文本服务框架)。我认为解决方案是使用兼容版本,那么如何指定CRT版本? 最佳答案 我衷心地支持不要手动更改链接所针对的CRT版本的建议。但是,如果由于某种原因(我无法想象)这对您来说是正确的做法,那么这样做的方法是更改manifest为您的项目。首先确保list不是在每次构建时生成(在VS2005上:配置属性/链接器/list文件/生成list),因为它会覆盖您的手动更改。还要确保在那里启用了隔离。接下来,找到list文件-应该位于
我从Google了解到它用于控制应用程序级别的缓冲区溢出,并由CRT调用。它还说"本质上,在进入一个受溢出保护的函数时,cookie被放入堆栈,而在退出时,堆栈上的值将与全局cookie进行比较。它们之间的任何差异都表明发生了缓冲区溢出并导致程序立即终止。”但我不太明白它是如何工作的?请帮忙。 最佳答案 “cookie”基本上只是一个任意值。因此,基本思想是在调用函数之前将选择的值写入堆栈。虽然它可能不是一个很好的值,但我们可以任意选择0x12345678作为值。然后调用函数。当函数返回时,它返回到堆栈中的正确位置,并将该值与0x1
WindowsSDK中是否有工具可以检查库使用的CRT?例如我有一个*.lib文件,如何检查它是用/MDd标志还是/MT编译的?还有如何检查dll或exe是否相同?这可以用dumpbin来完成吗? 最佳答案 如果是.lib文件,静态链接库,那你对CRT还一无所知。它还没有链接。你可以了解一下原程序员的意图,使用十六进制查看器查看.lib文件,记事本也可以。您将看到用于编译嵌入在.lib文件中的.obj文件的原始命令行。只需搜索“cl.exe”,您就会很好地了解从cl.exe的路径使用的编译器版本。你可以看到命令行选项,这样你就会知道
当您在使用CreateFile()或_get_osfhandle()创建的句柄上调用WaitForSingleObject()时会发生什么?出于不值得解释的原因,我想使用WaitForSingleObject()来等待我用_get_osfhandle(fd)创建的HANDLE,其中fd来自对_open()的常规调用。这可能吗?我在实践中尝试过,在某些机器上它按预期工作(HANDLE始终处于信号状态,因为您可以从中读取更多数据),而在某些机器上WaitForSingleObject()如果你愿意,将无限期地阻止。WaitForSingleObject()的MSDN页面说它处理的唯一受支持
使用多个DLL和QT的C++程序应该配备malloc替代品(如tcmalloc),以解决可以验证是由Windowsmalloc引起的性能问题。对于linux,没有问题,但对于windows,有几种方法,我发现它们都不吸引人:1。将新的malloc放入lib并确保首先链接它(OtherSO-question)这有缺点,例如strdupwillstillusetheoldmallocandafreemaycrashtheprogram.2。使用lib.exe(Chrome)从静态libcrt库中删除malloc这是为chrome/chromium测试/使用(?)的,但它的缺点是它只适用于静