解决exe和DLL直接传递FILE 指针崩溃的问题


EXE程序和DLL之间可能传递FILE指针,但是可能会造成程序崩溃。这是由于_lock_file引起的

  1. void __cdecl _lock_file (  
  2.         FILE *pf  
  3.         )  
  4. {  
  5.         /* 
  6.          * The way the FILE (pointed to by pf) is locked depends on whether 
  7.          * it is part of _iob[] or not 
  8.          */  
  9.         if ( (pf >= _iob) && (pf <= (&_iob[_IOB_ENTRIES-1])) )  
  10.         {  
  11.             /* 
  12.              * FILE lies in _iob[] so the lock lies in _locktable[]. 
  13.              */  
  14.             _lock( _STREAM_LOCKS + (int)(pf - _iob) );  
  15.             /* We set _IOLOCKED to indicate we locked the stream */  
  16.             pf->_flag |= _IOLOCKED;  
  17.         }  
  18.         else  
  19.             /* 
  20.              * Not part of _iob[]. Therefore, *pf is a _FILEX and the 
  21.              * lock field of the struct is an initialized critical 
  22.              * section. 
  23.              */  
  24.             EnterCriticalSection( &(((_FILEX *)pf)->lock) );  
  25. }  

if ( (pf >= _iob) && (pf <= (&_iob[_IOB_ENTRIES-1])) ) 把fp和一个全局变量_iob比较,exe和DLL可能会有不同的全局变量,这导致fp不在_iob数组的范围内,导致出现错误。

解决的颁发是exe和DLL都动态连接到CRT,或者把DLL编译成静态库。

 

转自:http://blog.csdn.net/leechiyang/article/details/6873952

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章