• MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题


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

    开发环境:

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

    2. Visual Studio 2008

    问题描述:

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

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

    编译成 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* 类型的参数就会出现问题呢,这是什么原因?有没有解决办法?求路过的大虾指点。

  • 相关阅读:
    参数化2--CSV Data Set Config 参数化配置
    简单的数据库性能测试方法
    localStorage.getItem
    性能测试入门分析
    参数化1--jmeter参数化数据(_csvread函数、用户自定义变量等)
    Jmeter聚合报告分析
    JMeter入门(4):Java Request实例
    JMeter入门(3):录制JMeter脚本
    JMeter入门(2):一个简单实例
    JMeter入门(1):JMeter总体介绍及组件介绍
  • 原文地址:https://www.cnblogs.com/baiynui/p/c20130620.html
Copyright © 2020-2023  润新知