描述:
一个activex控件,包容了一个串口通讯的组件
activex控件中有两个方法,例如:
MyOpenCom()
MyCloseCom()
MyOpenCom()方法创建串口通讯组建实例,并且打开串口
MyCloseCom()方法释放串口通讯组建,并且关闭串口
我的问题是,怎么释放这个串口通讯组件?可以重复打开,关闭。
我的串口通讯组件是通过智能指针创建的,一个全局类型。
如下:
IIJucidCommPtr jucid_com;//全局
MyOpenCom()中的创建代码
HRESULT hr = jucid_com.CreateInstance(__uuidof(IJucidComm));
下面是调用接口方法打开串口
MyCloseCom()中的撤销代码
jucid_com->Release();
这样编写后有问题,调用MyCloseCom()后不能重复调用MyOpenCom(),出现非法操作,而且我发现调用MyCloseCom()后我的程序的内存占并没有减小多少。
清高手指点谢谢
谢谢各位~~
解决方案1:
up
解决方案2: InitInstance()中添加 AfxEnableControlContainer();
CoInitialize(NULL);
在ExitInstance()中添加 CoUninitialize(); 看看
那就不要用智能指针,close的时候不要在内部实现Release,客户端调用的时候自己控制记数器的增减。就是自己管理AddRef和Release!
解决方案4:up~
解决方案5: 写个 管理器
管理器
1。create 控件
2。维护 comm
4. 控件向管理器申请 comm
5. 控件消耗管理器申请得 comm
6.管理器消耗,根据 comm 引用计数,消耗 comm