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.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 类型的参数就会呈现题目呢,这是什么原因?有没有解决办法?求路过的大虾指导。
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
今天碰到一个新鲜的题目。
开辟景象:
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 类型的参数就会呈现题目呢,这是什么原因?有没有解决办法?求路过的大虾指导。
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》