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

开发环境:

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

2. Visual Studio 2008

问题描述:

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

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

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

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

1.

#include<stdio.h>

int main() {
thefunc(stdout);
}

2.

#include<stdio.h>

int main() {
thefunc(stderr);
}

3.

#include<stdio.h>

int main() {
FILE* f = fopen("d:\\f.txt", "wb");
thefunc(stdout);
fclose(f);
}

经过反复尝试,发现:

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. 优化HTTP前端请求构建高性能ASP.NET站点

    HTTP请求的优化  在一个网页的请求过程中,其实整个页面的html结构(就是页面的那些html骨架)请求的时间是很短的,一般是占整个页面的请求时间的10%-20%.在页面加载的其余的时间实际上就是在 ...

  2. js学习笔记之:时间(三)

    今天来学习一个简单的时间应用:时间的倒影,如图所示:   主要知识点: 1  获取系统的时间值:2 建立一个div的倒影 div的倒影主要利用css来控制,函数值为:filter:flipv() 步骤 ...

  3. 通过 Xshell 5 连接 centOS 7 服务器

    一. 在安装好了centOS 7 的服务上,打开终端 运行 ip -s addr 命令 获取服务的IP地址 [root@localhost ~]# ip -s addr1: lo: <LOOPB ...

  4. Python的多线程实现

    概述 Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来实现互斥线程对共享资源的访问,暂时无法利用多处理器的优势. Python中,thread和threa ...

  5. Apache 相关配置

    1. HTTP缓存设置 ExpiresActive On #ExpiresDefault 设置全局缓存时间,将导致一些get请求不能连续执行 #ExpiresDefault "access ...

  6. 转:MySQL导入.sql文件及常用命令

    在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令: mysql> source   d:/myprogram ...

  7. 001Spark文件分析测试

    使用spark-1.4.1-bin-hadoop2.6进行处理,测试文件大小为3G, 测试结果: 1:统计一个文件中某个字符的个数 scala> sc.textFile("/home/ ...

  8. Couchbase 上手nosql for .net

    由于项目需要,准备上手nosql数据库,比对了一番之后终于决定使用 couchbase.好了开始吧: 安装 地址:http://www.couchbase.com/get-started-develo ...

  9. redis 基本使用

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  10. Wi-Fi定位,AP定位

    Wi-Fi实时定位系统 基于Wi-Fi的无线局域网实时定位系统(Wi-Fi RTLS)结合无线局域网络(WLAN).射频识别(RFID)和实时定位等多种技术,广泛地应用在有无线局域网覆盖的区域,实现复 ...