我用vc生成了一个动态链接库,使用时出了这样一个问题:我先自己打开一个文件句柄,就是我调用动态库的函数,把打开的文件句柄做为动态链接库函数参数传过去,但是动态库中的函数老是不能写文件。
我试过了两种方法:
第一种是使用int  _open(const char *filename,int oflag [,int pmode] )函数得到int型的文件句柄,然后在动态库中用int _write(int fd,const void *buffer,unsigned int count)来写文件,结果发现_write函数返回的字节数是-1。
第二种是使用FILE *fopen( const char *filename, const char *mode )函数得到FILE*型的文件描述符,然后在动态库中用size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )函数来写文件,结果程序运行到写文件时就出错退出,还要发什么错误报告。shit
哪位大哥大姐小弟小妹知道怎么解决?是不是动态库不能使用作为参数传过来的文件句柄来写文件?

解决方案 »

  1.   

    我的write函数也没有问题,文件生成路径也没有问题,在动态库外面写文件的时候也没事。但是在动态库里面的函数里就是不能写文件。
    所以我就怀疑动态库不能使用作为参数传过来的文件句柄来写文件了。
    如果按照zhangshengyu(zhangshengyu)说的动态库没有这个限制,和应用程序一样,我就真不知道什么原因了。
      

  2.   

    目前碰到的问题是,如果在动态库函数内打开文件并且读写,则一点问题都没有;但是如果传进去一个文件句柄,那么write函数返回-1,而且经检查在写之前文件句柄还是正常值。现在是一点儿门儿都没有啊
      

  3.   

    因为FILE*是个指针,所以,你要看看你的这个dll是否是和你向它传这个指针的模块在同一个进程,如果不在同一个进程的话,那肯定会出错的(指针指的内容不在同一个进程空间)。