這個BUG調了我一整天-。-
基本原因是,Debug使用了的new調用Release的delete,我還不確定.
BUG的代碼可能如下:
dll: struct Status { int iStatus; CString str; }; void GetStatus (Status* p) { /** do something */; }
調用代碼如下:
Status st; GetStatus (&st);
就這個簡單的,看似沒有錯誤的代碼產生了問題。
st中有個CString,它是個類,析構函數會delete 內存塊,它因為在內部會存在 +, =等操作,而DLL是Release的,調試程序是 DEBUG的,於是它+,=了Release版本的new 的內存塊,當它析構的時候就有問題了---------
貌似解釋不通啊。
------------------
反正換用DEBUG的DLL就不會有問題了。
-------------------
那DLL不是我寫的---調死我了。
和MFC聯系得太緊密,而且CString 在VC6和VC8的實現方式是不一樣的----。它就決定了它只能用VC6進行開發,或者是通過VC6開發一個中間層的DLL才能進行調用---
--------------
悶。