MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题
2013-06-20 15:09
351 查看
今天遇到一个奇怪的问题。
开发环境:
1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库
2. Visual Studio 2008
问题描述:
在 eclipse cdt 中用 gcc 编译了一个 dll,这个 dll 中有一个接收收 FILE* 参数的函数
编译成 dll 后,在 MSVC 下使用这个 dll 中的 thefunc 函数,编译能通过,但运行时就会出现内存不能为 written 的错误。
以下三种调用均是同样的问题:
1.
2.
3.
经过反复尝试,发现:
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* 类型的参数就会出现问题呢,这是什么原因?有没有解决办法?求路过的大虾指点。
相关文章推荐
- 关于如何使用反射声明一个泛型类型变量(泛型参数是动态的)的问题
- cordova插件file使用时遇到的一个平台相关的问题
- 在使用FileReader.readAsDataURL()时,处理不能不能连续选择同一个文件的问题
- C++库研究笔记——使用函数模板还是类模板?+ 一个类型重复问题的两种解决方法
- 使用Collections.emptyMap()引起的一个奇怪的问题
- IDE使用问题:vc2003中类型无法转到声明和定义,按F12提示未定义的符号(CSDN一个帖子)
- Access下“是/否”数据类型在使用NHibernate中的一个问题
- notepad使用时的一个奇怪的问题
- FileReader和FileWriter使用同一个文件源的问题
- 奇怪问题:使用Request.QueryString传递一个中文参数,结果少了一个字!
- Access下“是/否”数据类型在使用NHibernate中的一个问题
- java使用BeanUtils封装file类型表单数据到一个对象中
- 关于空格和回车带来的输入输出不一致问题,使用了一个奇怪的replace
- 使用SQL Developer导入文件时出现的一个奇怪的问题
- Chrome 下,重复使用 XMLHttpRequest进行Post数据时,遇到一个奇怪的问题
- 使用JFace中的FileDialog中奇怪的问题
- 一个关于在vertx中使用jersey框架接收text/xml类型的问题
- 使用PowerBuilder 9编绎DLL类型,有点问题.处理过程记录如下.”Error opening file ‘c:\windows\system32\cgen\en32t.h’”
- 使用CocoaPods遇到一个问题:The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update ....
- 使用PowerBuilder 9编绎DLL类型,有点问题.处理过程记录如下."Error opening file 'c:\windows\system32\cgen\en32t.h'"