今天遇到一个奇怪的问题。

开发环境:

1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库

2. Visual Studio 2008

问题描述:

在 eclipse cdt 中用 gcc 编译了一个 dll,这个 dll 中有一个接收收 FILE* 参数的函数

  1. void thefunc(FILE* f) {
  2. fprintf(f, "Hello World!\n");
  3. }

编译成 dll 后,在 MSVC 下使用这个 dll 中的 thefunc 函数,编译能通过,但运行时就会出现内存不能为 written 的错误。

以下三种调用均是同样的问题:

1.

  1. #include<stdio.h>
  2.  
  3. int main() {
  4. thefunc(stdout);
  5. }

2.

  1. #include<stdio.h>
  2.  
  3. int main() {
  4. thefunc(stderr);
  5. }

3.

  1. #include<stdio.h>
  2.  
  3. int main() {
  4. FILE* f = fopen("d:\\f.txt", "wb");
  5. thefunc(stdout);
  6. fclose(f);
  7. }

经过反复尝试,发现:

1. dll 和 调用程序都用 gcc 编译,可以正常运行

2. dll 和 调用程序都用 vs2008 编译,也可以正常运行

3. dll 用 gcc 编译,调用程序用 vs2008 编译,编译能通过,但运行是会出现内存为 written 的问题。

4. 目前发现,使用 gcc 这样编译出来的 dll 中的其他大部分函数都可以在 vs2008 中正常使用,但涉及到这个 FILE* 类型的参数时,就会有问题。

疑问:

测试程序已经非常简化,可以排除是代码逻辑上的问题,但为何会出现这种 gcc 编译出来的 dll,在 vs2008 下大部分函数可以正常使用,但使用 FILE* 类型的参数就会出现问题呢,这是什么原因?有没有解决办法?求路过的大虾指点。

MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题的更多相关文章

  1. windows下使用mingw和msvc静态编译Qt5.15.xx

    windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...

  2. 表示一个文件的 File 类型

    从本篇文章开始,我们将开启对 Java IO 系统的学习,本质上就是对文件的读写操作,听上去简单,其实并不容易.Java 的 IO 系统一直在完善和改进,设计了大量的类,也只有理解了这些类型被设计出来 ...

  3. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于“QT + OpenCV + MinGW在windows下配置开发环境”着实让人头疼,单次配置时间相当长,也十分不容易,本人第一次配置成 ...

  4. 关于django中input标签中file类型以及开路由

    0825自我总结 关于django中input标签中file类型 1.input提交图片实时展示 <img src="/static/img/default.png" wid ...

  5. file类型允许的文件格式设置问题,“选择文件”打开缓慢

    1,file类型的input对于打开的选择框的属性是由以下两个属性控制的: ①multiple="multiple" :一次可以选择多个文件 ②accept="image ...

  6. linux FILE 类型.

    stdio.h 头文件中,有以下内容(用内部行号解释): /* The opaque type of streams. This is the definition used elsewhere. * ...

  7. 给“file”类型的input框赋值的问题

    开发"新闻编辑"功能时,会遇到给"file"类型的input框赋值的问题,用来展示之前上传的文件,但由于file类型的input框受到安全限制,所以不能被赋值, ...

  8. 关于ACtion类利用file类型取得上传文件的内容,名字和内容类型

    上面的Action提供了两个属性:uploadFileName和uploadContentType,这个两个属性分别用于封转上传文件的文件名.上传文件的文件类型.Action类直接通过File类型属性 ...

  9. file类型input框设置上传相同文件,并都可以触发change事件。

    在使用file类型input框是,删除了第一次上传到文件,再次上传相同文件,无法触发change事件,所以在删除的js上添加如下js代码: document.getElementById('fileU ...

随机推荐

  1. HTML语义化标签(一)

    总所周知,现在的网页是由HTML.CSS.JS三大元素组成,而HTML是其中最重要的部分,是整个网页的骨架,CSS和js在骨架的基础上进行相应的修饰,使得网页成为一个有血有肉,可以动的“人”.如果HT ...

  2. S5PV210启动过程分析

    一.三星官方推荐方式 1.数据手册<S5PV210_iROM_Application_note>中截取:

  3. 配置linux平台下基于vim的开发环境

    一.vim的基本配置 1.配置文件的位置在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效.而在每个用户的主目录($HOME)下,都可以自己建立私有的 ...

  4. xcode 发展史 及 做iOS 必须知道的小知识

    Xcode 3.0 是开发人员建立 Mac OS X 应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径.Xcode 3.0 将Mac OS X的轻松使用,UNIX 能量以及高性能的开发 ...

  5. plugin

    http://wicky.nillia.ms/headroom.js/ http://makotot.github.io/sidebar/ http://www.nodebeginner.org/in ...

  6. 【HDOJ】2809 God of War

    状态DP. /* 2809 */ #include <iostream> #include <queue> #include <cstdio> #include & ...

  7. 【HDOJ】3587 NUDOTA

    字符串模拟水题. /* 3587 */ #include <iostream> #include <cstdio> #include <cstring> #incl ...

  8. 完美解决VMware Workstation : Could not open /dev/vmmon: No such file or directory

    root@tiger:/usr/bin# cd /etc/init.d root@tiger:/usr/bin# sudo mv /usr/lib/vmware/modules/binary /usr ...

  9. POJ2632 Crashing Robots(模拟)

    题目链接. 分析: 虽说是简单的模拟,却调试了很长时间. 调试这么长时间总结来的经验: 1.坐标系要和题目建的一样,要不就会有各种麻烦. 2.在向前移动过程中碰到其他的机器人也不行,这个题目说啦:a ...

  10. Java---IO加强(3)-IO流的操作规律

    一般写关于操作文件的读取的几个通用步骤!!! 1.明确源和目的. 源:InputStream Reader 一定是被读取的. 目的:OutputStream Writer 一定是被写入的. 2.处理的 ...