Tag: visual c ++

sin中的sin v / s sinf函数

我试图在我的C程序中使用sinf函数,但它在MSVC 6.0下给我一个未定义的引用错误,但是sin工作正常。 这让我很好奇地发现sin与sin之间的区别。 sin和sinf之间的逻辑区别是什么? 我怎样才能实现自己的sinffunction?

C运行时静态与动态链接中的内存分配

我的程序架构涉及插件(dll)和exe(显然)。 我们是唯一的插件提供商。 有人告诉我,如果我们静态链接c运行时,在插件中分配内存然后在exe代码中释放它是一个潜在的问题。 但是,如果我们动态链接它,那么只有一个堆,并且c运行时可以访问所有这些堆。 我们根据这个建议切换到动态链接,但是我们从交换机看到的所有内容都是令人头疼的问题,以及与新运行时的分发和安装相关的麻烦。 (不知道我们在内存分配问题上避免了什么。) 内存分配的含义是什么? 假设一个插件分配内存,exe释放它。 静态与动态链接的c运行时之间是否存在不同的行为? 如果我们使用插件,我们是否会在静态链接c运行时时遇到问题? 如果我们切换回静态链接,那会破坏内存泄漏检测和崩溃转储报告吗? 与我选择哪个VC ++运行时版本的注释提出的一些问题一致- 静态还是动态? 具体来说,我选择哪个VC ++运行时版本 – 静态还是动态? 在http://msdn.microsoft.com/en-us/library/abx4dbyh(v=VS.100).aspx上也有一些讨论。

如何从C ++调用VB.NET DLL(也调用函数 – 不是DLL文件)

我想问一下如何从C ++程序调用VB.NET DLL的问题 我已经多次尝试从C ++调用VB.NET DLL文件,它工作正常,但问题是我无法调用VB.NET DLL文件的function(我只能加载VB.NET DLL文件) 在VB.NET DLL中我有以下代码: Public Function example_function1(ByVal i As Integer) As Integer Return 3 End Function Public Function example_function2(ByVal i As Integer) As Integer Return 3 End Function ============================ 我的C ++代码是: typedef int (__stdcall *ptf_test_func_1_type)(int); typedef int (__stdcall *ptf_test_func_2_type)(int*); int i =1; HINSTANCE dll_instance = LoadLibrary(“DLLs7.dll”); int main() { […]

在使用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 […]

如何在Visual Studio项目中引用用户定义的段的开头?

我正在努力转换与gnu工具链的ld链接的C程序,以使其作为visual-studio(2005)项目进行编译。 该程序将.data-symbols放在不同的段中,在初始化阶段,它在段之间复制数据。 指向段开头和结尾的指针在ld链接描述文件中定义。 我理解如何将变量定位到不同的,用户定义的段中,但我还没有弄清楚如何定义链接器常量,如_start_of_my_segment,或者是否有类似于Visual Studio中的链接描述文件。 我的目标是能够编译程序,最好不要修改引用链接器定义的符号的源代码,而是使用我自己的Visual Studio项目中的数据自定义布局。 下面是一些示例C代码,用于说明我想要做什么以及与gcc / ld链接时使用的make脚本的(精简,可能是语法错误)版本。 任何提示将不胜感激! #pragma data_seg( “MY_DATA_FOO” ) #pragma data_seg( “MY_DATA_BAR” ) #pragma comment(linker, “/section:MY_DATA_BAR,R”) __declspec(allocate(“MY_DATA_FOO”)) int foo1; __declspec(allocate(“MY_DATA_FOO”)) int foo2; __declspec(allocate(“MY_DATA_BAR”)) int bar1 = 1; __declspec(allocate(“MY_DATA_BAR”)) int bar2 = 2; #pragma data_seg( ) void test() { foo1 = bar1; foo2 = bar2; // i would rather do […]

MSVC错误的线程安全

在MSVC线程安全上是errno吗? 根据这个问题的答案,POSIX要求errno是线程安全的。 但MSVC可能不符合POSIX, MSDN也没有说明线程安全。 MSDN矛盾提到errno被声明为extern int errno; ,还作为#define errno (*_errno())

编译的.lib文件是否可以为不同版本的Microsoft Visual C ++互换?

有些项目为C(以及可能的C ++ – 不确定)库提供了一组“Windows”二进制文件。 例如,请参阅此libxml相关页面右侧的链接。 我很确定没有办法在VC ++ .lib文件和MinGW GCC .a文件之间进行转换,所以称它们为“Windows”而不是“Microsoft”二进制文件似乎有点误导。 但我也很惊讶,不同的VC ++版本不需要不同的二进制文件。 很多年前,我似乎记得在为跟踪器风格的音乐程序(Jeskola Buzz)编写插件时遇到问题,因为该程序使用的是VC ++ 6,而且我已升级到VC ++ 7。 我不记得确切的问题 – 它可能部分与DLL相关,但我知道那些不需要关心VC ++版本。 我认为这个问题与提供的.lib文件有关,也可能与它们链接到的运行时库有关。 不久之前,这一切都有些模糊。 无论如何,由一个版本的MS VC ++编译的库是否可以链接到用另一个版本构建的项目中? 有什么限制,如果有的话? 我对C和C ++库感兴趣,这些库将从C ++项目调用(我很少使用C,除了从C ++调用的C库)。

将C99代码转换为C89

如何将c99源代码自动转换为c89? 我想用Visual C ++编译c99库,但MSVC只支持c89。 许多更改只是语法,例如struct初始化器,您可以自动编写“de-c99”代码的工具。 这个预处理器是否存在?

如何在exception中使VC ++的调试器中断?

我正在尝试调试用C编写的DLL中的问题,该问题一直导致访问冲突。 我正在使用Visual C ++ 2008,但代码是直的C. 我已经习惯了Delphi,如果在调试器下运行时发生exception,程序将立即断开调试器,它将为您提供检查程序状态的机会。 但是,在Visual C ++中,我得到的只是Output选项卡中的一条消息: First-chance exception at blah blah blah: Access violation reading location 0x04410000. 没有rest,没有。 它只是进入并展开堆栈,直到它回到我的Delphi EXE中,它识别出错误并在那里提醒我,但到那时我已经失去了几层调用堆栈,我不知道发生了什么。 我已经尝试了其他的调试技术,但无论它在做什么,都是在C宏中的嵌套循环内深处进行的,这个循环被调用超过500次,这只是我的技能(或者我的耐心)来追踪。 我认为必须有一些方法来获得“第一次机会”的例外,实际上让我有机会处理它。 可能有一些“在第一次机会exception时立即中断”配置设置我不知道,但它似乎并不是所有可发现的。 有谁知道它在哪里以及如何启用它?

与EINVAL错误代码相关的机器相关_write失败

这在实际问题之前有一些冗长的背景,然而,它有一些解释,希望清除一些红色的鲱鱼。 我们的应用程序是在Microsoft Visual C ++(2005)中开发的,它使用第三方库(我们幸运的是它的源代码)来导出在另一个第三方应用程序中使用的压缩文件。 该库负责创建导出的文件,管理数据和压缩,以及通常处理所有错误。 最近,我们开始得到反馈,在某些机器上,我们的应用程序在写入文件时会崩溃。 基于一些初步探索,我们能够确定以下内容: 崩溃发生在各种硬件设置和操作系统上(尽管我们的客户仅限于XP / 2000) 崩溃总是发生在同一组数据上; 但是它们不会出现在所有数据集上 对于导致崩溃的一组数据,崩溃在所有机器上都不可重现,即使具有类似的特性,即操作系统,RAM的数量等。 该错误仅在应用程序在安装目录中运行时才会显现 – 不是从Visual Studio构建,在调试模式下运行,甚至在用户有权访问的其他目录中运行时 无论是在本地驱动器上还是在映射驱动器上构建文件,都会出现此问题 在调查问题后,我们发现问题出现在以下代码块中(稍作修改以删除一些宏): while (size>0) { do { nbytes = _write(file->fd, buf, size); } while (-1==nbytes && EINTR==errno); if (-1==nbytes) /* error */ throw(“file write failed”) assert(nbytes>0); assert((size_t)nbytes<=size); size -= (size_t)nbytes; addr += (haddr_t)nbytes; buf = (const char*)buf […]