MinGW 和 MSVC 下,应用 FILE 类型的一个新鲜的题目

    添加时间:2013-6-21 点击量:

    今天碰到一个新鲜的题目。


    开辟景象:


    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.txtwb);
    thefunc(stdout);
    fclose(f);
    }


    经过反复测验测验,发明:


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


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


    3. dll 用 gcc 编译,调用法度用 vs2008 编译,编译能经由过程,但运行是会呈现内存为 written 的题目。


    4. 今朝发明,应用 gcc 如许编译出来的 dll 中的其他大项目组函数都可以在 vs2008 中正常应用,但涉及到这个 FILE 类型的参数时,就会有题目。


    疑问:


    测试法度已经很是简化,可以打消是代码逻辑上的题目,但为何会呈现这种 gcc 编译出来的 dll,在 vs2008 下大项目组函数可以正常应用,但应用 FILE 类型的参数就会呈现题目呢,这是什么原因?有没有解决办法?求路过的大虾指导。

    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: