Tag: visual studio

在x64 Visual Studio中内联汇编函数

我知道x64模式下的MSVC编译器不支持内联汇编代码片段,并且为了使用汇编代码,你必须在一些外部my_asm_funcs.asm文件中定义你的函数,如下所示: my_asm_func PROC mov rax, rcx ret my_asm_func ENDP 然后在你的.c或.h文件中为这个函数定义一个标题: int my_asm_func(int x); 虽然该解决方案解决了许多问题,但我仍然有兴趣使汇编代码函数内联,换句话说 – 在编译之后我不想对my_asm_func进行任何“调用”,我只是希望这个程序集被粘合进入我的最终编译代码。 我尝试使用inline和__forceinline关键字声明函数 ,但似乎没有任何帮助。 还有什么办法可以做我想要的吗?

原因不明的C ++默认int值

我一直在重构一些代码,我注意到一些涉及未初始化的int数组的不稳定行为: int arr[ARRAY_SIZE]; 我设置了一个断点,似乎所有值都默认为-858993460。 这个价值有什么特别之处吗? 任何想法为什么他们不默认为0?

Visual Studio中的“Step Over”和“Step Into”

我注意到在VS中使用F10 – Step Over会自动跳过我的function。 这是为什么? 我注意到F11- Step Into,确实输入了我的函数,但它输入了我在各种C库中使用的函数的实现代码,这真的很烦人。 有没有什么方法可以在我的函数内部一步一步地运行,而无需输入所包含的库的实现代码?

在使用Microsoft Visual Studio ’08编译libpng时,如何避免“错误LNK2005:”(已经定义了stdlib函数)?

(为什么我要尝试这样做:我没有运气在Windows上使用libpng的预构建二进制文件(尽管经过了数小时的试验和错误),因此我现在正在尝试自己编译它。我发现这个有用的博客关于这个的post ,完成了Microsoft Visual Studio 2008项目文件,但遗憾的是仍然无法使用它。) 它在链接到此处找到的zlib二进制文件时成功编译,但在尝试将其链接到测试文件时,我收到以下内容: C:\ Documents and Settings \ Administrator \ My Documents> cl“C:\ Documents and Settin gs \ Administrator \ My Documents \ test.c“”C:\ Documents and Settings \ Administrator \ M. y Documents \ libpng.lib“-I”C:\ Documents and Settings \ Administrator \ My Documents \ include“ Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01 for 80×86 版权所有(C)Microsoft […]

在MSVC中强制未对齐的位域打包

我有一个位域结构,最多可加48位。 在GCC上,这正确地导致了6字节结构,但在MSVC中,结构出现了8个字节。 我需要找到一些方法来强制MSVC正确打包结构,这既适用于互操作性,也适用于在内存关键环境中使用。 下面看到的结构由三个15位数字,一个2位数字和一个1位符号组成。 15 + 15 + 15 + 2 + 1 = 48,理论上它应该适合六个字节,对吗? struct S { unsigned short a:15; unsigned short b:15; unsigned short c:15; unsigned short d:2; unsigned short e:1; }; 但是,在GCC和MSVC上对此进行编译会导致sizeof(S) == 8 。 考虑到这可能与对齐有关,我尝试在结构声明之前使用#pragma pack(1) ,告诉编译器返回到byte,而不是int,boundary。 在海湾合作委员会, 这工作 ,导致sizeof(S) == 6 。 但是,在MSVC05上,sizeof仍然是8,即使设置了pack(1) ! 在阅读了这个其他的SO答案后 ,我尝试用unsigned char替换unsigned short d ,用bool替换unsigned […]

我可以通过检查DLL本身来判断使用哪个版本的Visual Studio来构建DLL

我需要重建几年前建立的DLL。 我有原始的C源代码,但不是Visual Studio项目或解决方案。 我想尝试使用最初使用的相同Visual Studio版本重建它。 我可以说这是一个普通的旧Windows DLL,而不是.NET。 我也知道源代码在C中。通过检查DLL二进制文件,还有什么我可以告诉原始构建环境和工具吗? 谢谢!

库ABI Visual Studio版本之间的兼容性

我有两个场景。 假设我有3个导出C ++符号的共享库,每个库都使用VS7.1,VS8和VS9构建。 我在VS9中编译了所有3个。 出于某种原因,这是有效的。 我不需要在VS9中为VS9链接器重新编译前两个库,以便成功找到符号并链接它们。 现在,如果我有一个只使用C语法(extern“C”)导出符号的库,这是一样的吗? 我听说有人说ABI for C是标准化的,所以在某种程度上保证你可以在所有版本的Visual Studio中使用Visual Studio 8中编译的C库。 基本上,所有这些事情的结合令人困惑。 我不确定在不同版本的Visual Studio之间链接C ++和基于C的共享库(使用相应的导入库)之间有什么保证。 我想听听关于任何其他版本的Visual Studio上C 和 C ++导入或静态库的向前/向后兼容性的一致意见。 这对我来说是因为我使用的闭源库是在Visual Studio .NET 2003(VS7.1)中编译的。 我的团队认为这将我们锁定到VS 7.1编译器,但是我已经在VS8和VS9中测试了这些库,甚至是VS2010,它们链接得很好。 但是,我不确定这个内在的危险。 请注意,所讨论的库具有C变体和C ++变体。 基本上,C变量是标准C导出,而C ++库是C库和导出类的抽象。

为什么我的C程序中的ws2_32.dll会出现链接器错误?

我在Visual Studio 2010中编写程序。我无法将名为ws2_32.dll的文件与我的项目链接。 谁能告诉我怎么做到这一点?

打印n级callstack?

在Visual Studio中使用C ++,我想知道是否有一个API会为我打印callstack。 最好,我想打印5级深度的callstack。 Windows是否提供了一个简单的API来允许我这样做?

如何在命令行中使用Visual Studio编译x64代码?

我想使用Windows命令行编译一个简单的hello-world风格的程序。 cl file_name.c 很容易。 现在我想在64位中做同样的事情。 我该怎么办?