这个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才能进行调用---
--------------
闷。