我们最近试图将一些Visual Studio项目拆分成库,一切似乎都在一个测试项目中编译和构建,其中一个库项目作为依赖项.但是,尝试运行该应用程序给了我们以下令人讨厌的运行时错误消息:
运行时检查失败#0 - ESP的值未在函数调用中正确保存.这通常是调用使用不同调用约定声明的函数指针的结果.
我们甚至从未为函数指定调用约定(__cdecl等),使所有编译器开关都处于默认状态.我检查过,项目设置与整个库和测试项目的调用约定是一致的.
更新:我们的一个开发人员将"基本运行时检查"项目设置从"两者(/ RTC1,等同于/ RTCsu)"更改为"默认",运行时间消失,使程序运行正常.我完全不相信这一点.这是一个合适的解决方案,还是一个危险的黑客?
我想强制一个小函数不被编译为内联函数,即使它非常简单.我认为这对于调试目的很有用.有没有关键字可以做到这一点?
我知道我可以编译单个源文件,但有时 - 比如说,在编辑许多文件使用的头.cpp文件时 - 需要重新编译多个源文件.这就是Build的用途.
VC9(Visual C++ 2008)中"Build"命令的默认行为是尝试编译需要它的所有文件.有时这只会导致许多失败的编译.我通常只是观察错误并点击ctrl-break来手动停止构建.
有没有办法配置它,以便构建在第一次编译错误(不是第一次失败的项目构建)自动停止?
c++ visual-studio-2005 visual-studio-2008 visual-studio visual-c++
这似乎是一个常见的问题,虽然我无法在SO上找到它.
我应该在我的应用程序中使用哪个版本的MSXML,更重要的是,我该如何决定?
有MSXML3,4,5和6.
我最近在使用MSXML v4的call-wcf-service-by-vbscript中发布了一些代码.AnthonyWJones发布我不应该使用4,而是使用3或6,但可能是3.当然不是v5!
为什么?我想更多地了解选择在我的应用中使用的MSXML版本的标准.
奖金问题:有没有人总结过各种版本的MSXML随时间的差异?
截至目前的摘要:
我有一个旧的DLL使用Microsoft Visual C++ 2003(7.1)运行时包.不幸的是我不再拥有那个DLL了.没有重新安装VS2003,还有另一种方法可以获得运行时可再发行的dll吗?
删除此处分配的所有内存的正确方法是什么?
const char* charString = "Hello, World";
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Buffer* buf = new(mem) Buffer(strlen(charString));
delete (char*)buf;
Run Code Online (Sandbox Code Playgroud)
要么
const char* charString = "Hello, World";
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Buffer* buf = new(mem) Buffer(strlen(charString));
delete buf;
Run Code Online (Sandbox Code Playgroud)
还是他们都一样?
我通过Visual Studio 2013预处理器运行以下代码.输出令我惊讶.
hello.cpp的内容:
#define A(j) #j
A(A?)
A(B?)
A(C?)
A(D?)
A(E?)
A(F?)
A(G?)
A(H?)
A(I?)
A(J?)
A(K?)
A(L?)
A(M?)
A(N?)
A(O?)
A(P?)
A(Q?)
A(R?)
A(S?)
A(T?)
A(U?)
A(V?)
A(W?)
A(X?)
A(Y?)
A(Z?)
Run Code Online (Sandbox Code Playgroud)
命令:
cl /P hello.cpp
Run Code Online (Sandbox Code Playgroud)
hello.i包含:
#line 1 "hello.cpp"
"A?"
"B?"
"C?"
"D?"
"E?"
"F?"
"G?"
"H?"
"I?"
"J?"
"K?"
"L"
"M?"
"N?"
"O?"
"P?"
"Q?"
"R"
"S?"
"T?"
"U?"
"V?"
"W?"
"X?"
"Y?"
"Z?"
Run Code Online (Sandbox Code Playgroud)
我试着打电话给A(L?p:q)时碰到了这个,这导致了"Lp:q",这对我不利.
这是正确的,定义明确的C++吗?C++中的L和R有什么特别之处?如果文件具有.c扩展名,则L和R被视为与字母表的其余部分相同.这与C++ 11有关吗?它必须是一个新功能,因为旧版本的MSVS不会以特殊方式使用L和R.
我能做些什么来阻止MSVS 2013以这种特殊方式治疗L和R?
我正在整合Matlab,C并Cuda在一个项目中.我使用Matlab mix将c语言编写的matlab mx函数与cuda运行时库连接起来,出现了关于静态发布中的冲突和c文件与库之间的动态发布的链接错误.谁能解决这个问题?
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj.
Run Code Online (Sandbox Code Playgroud) 我的同事正在使用Visual Studio 2002并使用C++ MFC.我正在用C#开发.
它之前没有任何问题,但现在质疑我们的客户是否真的应该在不同的环境中发展.我的同事们(当然)认为我应该转向C++ MFC.我认为他们可以使用.NET而不是MFC.
有没有理由学习MFC?感觉有点过时了,还是我错了?与MFC相比,针对.NET和.NET的争论是什么?
编辑:
我们正在为核工业开发过程系统和辅助应用.主要应用程序是模拟旧计算机系统并使用C++/MFC的模拟器.它是非常关键的时间,也许它应该仍然是原生C++中的核心.但是仿真器和所有周围应用程序的GUI并不是特别关键.
您是否应该更换现有的MFC应用程序?
我正在C++Visual Studio中编写一个简单的应用程序.它还有一个安装项目.它在我的开发机器上运行良好,但是当我在用户的机器上安装此应用程序时,它需要Visual C++ Redistributable Package.我想知道为什么我的申请需要C++ Redistributable?C++Windows附带标准运行时库,不是吗?
redistributable msvcrt visual-studio visual-c++ windows-runtime