EXE程序和DLL之間可能傳遞FILE指針,但是可能會造成程序崩潰。這是由于_lock_file引起的
[cpp] view plain copy PRint?void __cdecl _lock_file ( FILE *pf ) { /* * The way the FILE (pointed to by pf) is locked depends on whether * it is part of _iob[] or not */ if ( (pf >= _iob) && (pf <= (&_iob[_IOB_ENTRIES-1])) ) { /* * FILE lies in _iob[] so the lock lies in _locktable[]. */ _lock( _STREAM_LOCKS + (int)(pf - _iob) ); /* We set _IOLOCKED to indicate we locked the stream */ pf->_flag |= _IOLOCKED; } else /* * Not part of _iob[]. Therefore, *pf is a _FILEX and the * lock field of the struct is an initialized critical * section. */ EnterCriticalSection( &(((_FILEX *)pf)->lock) ); }
if ( (pf >= _iob) && (pf <= (&_iob[_IOB_ENTRIES-1])) ) 把fp和一個全局變量_iob比較,exe和DLL可能會有不同的全局變量,這導(dǎo)致fp不在_iob數(shù)組的范圍內(nèi),導(dǎo)致出現(xiàn)錯誤。
解決的頒發(fā)是exe和DLL都動態(tài)連接到CRT,或者把DLL編譯成靜態(tài)庫。
轉(zhuǎn)自:http://blog.csdn.net/leechiyang/article/details/6873952
新聞熱點
疑難解答