Tag: visual studio

在项目属性中找不到C / C ++

我正在按照教程进行操作,其中一个步骤是转到我的项目属性并单击c / c ++并添加“Additional Include Directories”属性的路径。 我正在使用visual C ++ Express Edition 2008.该教程使用相同的东西。 有没有得到这个或另类? 这是我的屏幕 这是教程屏幕

如何将Visual Studio宏值转换为预处理器指令?

在我的项目中,我需要在运行时访问$(SolutionDir)宏的值。 为此,我尝试添加预处理器条目,如DEBUG_ROOT=$(SolutionDir)或DEBUG_ROOT=\”$(SolutionDir)\”但由于$(SolutionDir)包含单个\字符,因此由于无效的转义序列而导致各种编译器错误(例如$(SolutionDir) = c:\users\lukas\desktop\sandbox\ )。 有没有一种简单的方法将$(SolutionDir)宏的值传递给我的代码? 底色 我在我的调试版本中使用函数OutputDebugString(..)来查看我的代码正在做什么。 /* debug.h */ #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #define LOCATION __FILE__ “(” TOSTRING(__LINE__) “) : ” #if !defined(DEBUG_ROOT) #define DEBUG_ROOT “#” /* escape string to force strstr(..) to fail */ #endif /* ** DBGMSG macro setting up and writing a debug string. ** Note: copying the […]

我可以从Visual Studio立即窗口调用Win32 API吗?

我正在调试一个C ++ Win32应用程序,我想从该进程的上下文中调用一个任意的Win32 API,就好像该程序运行了这行代码: DestroyWindow(0x00021c0e); 但是进入立即窗口会给出: CXX0017: Error: symbol “DestroyWindow” not found 编辑:使用函数的全名{,,user32.dll}_NtUserDestroyWindow@4 ,我可以使用立即窗口来了解我的意思,并显示函数的地址: {,,user32.dll}_NtUserDestroyWindow@4 0x76600454 _NtUserDestroyWindow@4 但当我尝试调用它时,会发生这种情况: {,,user32.dll}_NtUserDestroyWindow@4(0x00021c0e); CXX0004: Error: syntax error 甚至可以像这样从立即窗口调用C函数,还是我咆哮错误的树?

_itoa和itoa有什么区别?

Visual Studio对我大吼大叫使用itoa()说使用_itoa()代替? 它看起来像他们是相同的function。 是什么赋予了?

我可以在C ++结构上实现.ToString()以进行调试吗?

在C#中,如果我定义了一个struct,我也可以覆盖ToString()。 然后当我调试并添加一个监视或将鼠标hover在结构的一个实例上时,工具提示将是计算的ToString()而不是结构的类型名称。 我能以某种方式在C ++和/或C ++ / CLI中这样做吗? 也就是说,我可以将方法定义为结构的一部分(或做其他任何事情),这会导致监视值/工具提示显示我选择的字符串吗? Visual Studio for C / C ++中的默认字符串呈现是所有结构的字段值的列表(或者可以卡在小框中的数量)。 我的类型都是C风格的结构。 (在我将文件转换为.cpp并修复了一些类型问题之前,它实际上是用C编写的,因此我可以在CLI中运行它。)这是一个示例结构: struct other_dollars_node { struct other_dollars_node *next_other_dollars; override *overrides; long other_dollars_id; tm effective_date; double amount; } 我对C ++ / CLI的经验很少 – 我的大部分经验都是使用原生C / C ++和C#。 我正在使用Visual Studio 2013。 更新:由于几乎所有现有代码都使用本机C语法,并且我更喜欢无需重构的解决方案,因此CLI方面可能不那么重要。

gcc和Microsoft预处理器之间的区别

我发现Microsoft Visual Studio编译器和gcc以不同的方式预处理以下小片段: # define M3(x, y, z) x + y + z # define M2(x, y) M3(x, y) # define P(x, y) {x, y} # define M(x, y) M2(x, P(x, y)) M(a, b) ‘gcc -E’给出以下内容: a + {a + b} ,’cl / E’发出关于缺少宏参数的警告并产生以下输出: a + {a, b} + 似乎来自嵌套宏扩展的逗号不被视为参数分隔符。 不幸的是,我没有找到cl预处理器中实现的算法的描述,所以我不确定我的建议是否正确。 有谁知道cl预处理器是如何工作的,它的算法和gcc之间有什么区别? 以及如何解释观察到的行为?

Visual Studio 2010中的SOIL设置

我无法使用Visual Studio 2010正常工作 – 我远不是VS的专家,但据我所知,只有以下步骤才能使环境正常工作: 属性>> C / C ++>常规>>其他包含目录添加到SOIL.h的路径中 属性>>链接器>>常规>>附加库目录添加到libSOIL.a的路径 我也使用免费的GLUT,并且这里也设置了glut文件的路径 – 我还将Dubugging >> Environment Path设置为GLUT bin文件。 当我使用SOIL_load_OGL_texture时,我收到以下错误: 错误LNK2019:函数“void __cdecl init(void)”中引用了未解析的外部符号_SOIL_load_OGL_texture(?init @@ YAXXZ) 尝试将libSOIL.a重命名为libSOIL.lib和SOIL.lib,但它不起作用。 然后我构建了VC8项目并使用了.lib,如此处所示, SOIL没有正确链接,但也没有用。 我在他们的主页上使用示例代码 GLuint tex_2d; tex_2d = SOIL_load_OGL_texture ( ” C:\\Sunset.png”, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT ); /* check for an error during the load process […]

如何统一处理所有错误,包括内部C库错误

我想优雅地处理所有内部错误,无需程序终止。 如此处所述,使用_set_se_translator捕获被零除错误。 但它没有捕获,例如,C运行时库错误-1073740777(0xc0000417) ,这可能是由printf的格式字符串引起的,它们不应该有百分号。 (这只是一个例子;当然我们应该检查这样的字符串)。 要处理这些,需要_set_invalid_parameter_handler 。 此处列出了大约十个其他此类处理程序。 此外,这个将捕获未捕获的C ++exception: SetUnhandledExceptionFilter 。 因此,它可以与__set__ …函数一起使用。 (关于在MSVC 2008中使用它的文章。) 我想捕获任何和所有错误,以便我可以处理它们(通过记录,抛出现代C ++标准exception并返回特定于应用程序的错误代码)。 是否有一个捕获一切的处理程序? 另请参阅StackOverflow 。 我正在使用Visual Studio 2008。

更改字节序的最快方法

什么是反转16位和32位整数的字节顺序的最快方法。 我经常做类似的事情(这个编码是在C ++的Visual Studio中完成的): union bytes4 { __int32 value; char ch[4]; }; union bytes2 { __int16 value; char ch[2]; }; __int16 changeEndianness16(__int16 val) { bytes2 temp; temp.value=val; char x= temp.ch[0]; temp.ch[0]=temp.ch[1]; temp.ch[1]=x; return temp.value; } __int32 changeEndianness32(__int32 val) { bytes4 temp; temp.value=val; char x; x= temp.ch[0]; temp.ch[0]=temp.ch[1]; temp.ch[1]=x; x= temp.ch[2]; temp.ch[2]=temp.ch[3]; temp.ch[3]=x; return temp.value; } […]

C / C ++:如何找出给定定义的头文件链?

在Visual C ++中,可以通过按F12或选择Go to Definition来找到定义任何名称 (变量或类型)的头文件。 此function非常有用,但它仅显示定义名称的最终位置 (头文件)。 有没有办法找出从我的源文件到给定名称的最终头文件的头文件链 ? 例如,考虑以下代码: // main.cpp #include int main() { size_t s; return 0; } 在Visual C ++ 2010中,如果我在上面的main.cpp查找size_t的定义,它会将我放在一个名为sourceannotations.h文件中。 我知道这个标题链以stddef.h (我已经包含)开头,并以sourceannotations.h结尾。 如何弄清楚这条链中间的链接?