描述:
1.初始化
CUGXxx:: CUUXxx (): m_pIHttpdown (NULL),...
HRESULT CUGXxx::FinalConstruct(){ }
2.销毁
void CUUXxx::FinalRelease()
{
if(m_pIHttpdown)
{
m_pIHttpdown ->Release();
}
}
3.字符串 处理
接口参数使用BSTR ,类或函数变量使用 CComBSTR
4. 进入函数的第一步就应该检测指针是否为空。
STDMETHODIMP CUUXxx::Attach(REFIID riid, void **ppv)
{
ATLASSERT(!IsBadReadPtr(ppv, 4));
ATLASSERT(!IsBadReadPtr(*ppv, 4));
if (IsBadReadPtr(ppv, 4) || IsBadReadPtr(*ppv, 4))
{
return E_POINTER;
}
。。。
}
解决方案1:
C++有成文的编程规范,可是ATL并没有遵循
ATL遵循的唯一规范是,小小小,更小.只要能把程序的"体积"缩小,他什么什么都愿意做
很多很晦涩的代码把人折磨得半死.
我花了几天地时间才弄明白,ATL怎么把窗口消息调度到他的消息处理器,寒一把
大家讨论了半天好像也没有个所以然,看看大多是ATL文档上希望我们这么做的,还有些就是C++本身的规范
所以我觉得这个讨论意义不大,不成文叫什么规范?
C++有成文的编程规范,ATL的文档中说了他的类的安全的使用方法,有这些就够了
STDMETHOD(get_Name)(BSTR* pVal)
{
*pVal = NULL; // getProg must be set NULL frist!!!
...
}
把 BSTR作为参数传递给一个方法时,调用方负责在调用方法之前先调用SysAllocString,然后在方法完成之后调用SysFreeString
HRESULT SetString([in] BSTR bstr);
BSTR bstr = SysAllocString(OLESTR("hello"));
HRESULT hr = SetString(bstr);
SysFreeString(bstr);
if(m_pIHttpdown)
{
m_pIHttpdown ->Release();
m_pIHttpdown = NULL;
}
脑袋发麻了,越来越笨,都不记得还要注意些啥子,想起来再来补充。
楼下的兄弟继续补充哈。