DLL导出类的析构函数执行有关问题

DLL导出类的析构函数执行问题
第一次写DLL导出类
.h
#ifndef _NIPID_FILE_
#define CLASS_DECLSPEC __declspec( dllimport )
#else
#define CLASS_DECLSPEC __declspec( dllexport )
#endif

class   CLASS_DECLSPEC  CNIPID
{
    protected:
        ……
    public:
        CNIPID();
        virtual ~CNIPID();
        ……
};

.cpp
CNIPID::CNIPID()
{
    ……
}
CNIPID::~CNIPID()
{
    ……
}

好了,编译通过,一切都貌似没问题,可在主程序
m_NIMotionCard  = new   CNIPID();
使用结束后
delete  m_NIMotionCard;
完了,这个delete运行报错咧,大概就是失效位置无法访问的意思。
然后全力百度至
http://support.microsoft.com/kb/122675/zh-cn
大概理解了,要解决此问题,要么不用虚函数式的析构函数且必须内联;要使用虚函数式的析构函数则必须通过另两个变通的方法来实现。一个我看懂了,使用包装类;另一个我看得稀里糊涂……直接看英文原版说明,更加糊涂。
我想知道为什么会出现这种问题(文中有解释,我看不懂,尤其不知道什么是helper function,望解答)

------解决方案--------------------
DLL最好不要包装类, 存在潜在双重CRT资源泄露问题.
谨慎使用, 需要严格控制构造析构已经中间的内存分配释放也可以. 

建议包装成普通struct结构类型(不存在构造析构), 已经配套的API形式作为成员函数来处理. 
------解决方案--------------------
珍惜生命,远离dll导出类
------解决方案--------------------
I once used this kind of method, it works on visual studio.
------解决方案--------------------
DLL 提供Create 和Destory函数;