ATL CCommand在销毁时关闭
ATL CCommand Close on destruction
我使用ATL通过OLEDB与SQL数据库通信。
我的问题是,如果我以前调用过Open
,我是否必须显式调用CCommand::Close
,或者CCommand
析构函数是否会清理。
我有一种感觉,我必须打电话给Close
,但如果我不必打,那就太好了!
谢谢。
请参阅我对Daniel回答的评论。Destructor会把它清理干净,你不必担心。MSDN代码片段将在CoUninitialize
之后调用析构函数,这是他们执行显式ReleaseCommand
以便在关闭COM之前释放接口的唯一原因。
他们可以这样做:
CoInitialize(...);
{
CCustomer rs;
// ...
// rs.ReleaseCommand() <<-- Not needed
// rs.Close() <<-- Not needed
}
// NOTE: ~CCustomer already worked, it is safe to shut COM down
CoUninitialize();
为什么?ATL的atldbcli.h
:
~CAccessorRowset()
{
Close();
}
// ...
~CCommandBase()
{
ReleaseCommand();
}
// ...
class CCommand :
public CAccessorRowset<TAccessor, TRowset>,
public CCommandBase,
public TMultiple
所以CCommand
的析构函数完成了这一切。
您需要调用MSDN中描述的Close
和ReleaseCommand
。
相关文章:
- ATL::CComContainedObject<contained>: C2259 无法实例化抽象类
- ATL OLE DB Consumer Templates 与 Microsoft OLE DB Driver for
- 在Visual Studio 2017上使用VC++ 2015工具链时缺少ATL标头
- C++ ATL | 找不到_InternalQueryInterface标识符
- 迁移到 Visual Studio 2015 时 ATL 不起作用
- COM 事件需要 C3702 atl
- ATL COM - EnumWindows 回调函数不适用于 IDispatch::Invoke
- C++COM ATL VariantChangeType 会导致 WSH 崩溃
- WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0
- MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
- 如何使用 ATL/MSOLEDBSQL 启用连接资源池
- 如何将atl :: cimage转换为cv :: mat
- 错误 C4839:非标准地使用类 'ATL::CW2AEX<520>' 作为可变参数函数的参数
- 如何在ATL项目中使用ActiveX DLL
- 我有一个启用了代理存根支持的 ATL 项目,在哪里可以找到 xdlldata.h 文件中所有方法的实现
- 如何在 ATL COM 模块中打印控制台输出
- 将文本日期和时间转换为 ATL::CTime
- MFC vs ATL for ActiveX
- 带有ATL子类的Windows 10 64位上的随机崩溃
- ATL CCommand在销毁时关闭