COM FAQ 以后逐日累加
来源:互联网 发布:杭州数游软件 编辑:程序博客网 时间:2024/04/27 18:01
1. Debug 下没问题, Release 版本编译 error LNK2001: unresolved external symbol _main
去掉 _ATL_MIN_CRT
2. Release MiniDependency版本的中文路径问题
修改StatReg.h
CParseBuffer的
AddString函数,
修改
lpszT++
为
lpszT = CharNext(lpszT);
3.. CComBSTR的&(取地址)操作符没有检查m_str是否为空,CComVariant没有重载&操作符,因此下面的用法
CComBSTR或CComVariant Temp;
p->Method1(&Temp);
// 使用Temp...
p->Method2(&Temp);
// 使用Temp...
是错误的,但编译器不会发出任何警告,也不会产生运行时断言。
4. 当方法的out参数是BSTR、VARIANT或接口指针时,
HRESULT MyClass::Method1(BSTR|VARIANT|Interface *pVal)
{
*pVal = m_Val;
return S_OK;
}
上面的做法是错误的,因为out参数在调用方要被释放一次。正确且优美的做法是
HRESULT MyClass::Method1(BSTR|VARIANT|Interface *pVal)
{
return m_Val.CopyTo(pVal); // m_Val是CComBSTR或CComPtr
或
CComVariant Temp(m_Val); // m_Val是CComVariant
return Temp.Detach(pVal);
}
5. nt4提到的问题是ATL3.0的一个BUG,
pvars[0] = &var;
DISPPARAMS disp = { pvars, NULL, 1, 0 };
pDispatch->Invoke(0x2, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL);
上面是框架产生的Fire函数一段代码,因为CComVariant没有形如CComVariant(const VARIANT *pSrc)的构造函数,因此pvars[0] = &var调用的将是CComVariant(bool bSrc),而这可能是错误的,因此编译器发生警告。只要改为pvars[0] = var即可。
6. 安装了 PlatSDK 后,出现
C2668: 'InlineIsEqualGUID' : ambiguous call to overloaded function 问题
修改 InlineIsEqualGUID() 为
::ATL::InlineIsEqualGUID()
详细内容见
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q243/2/98.ASP&NoWebContent=1
7.《COM高手心经》实践19 总是初始化[out] 参数
出口参数先置 NULL
XXX::YYY(ZZZ *pZAAA)
{
if(IsBadWritePtr(pZAAA)) ////// IsBadWritePtr 98 下不能检测到 oxccccccc 这些没初始化的指针 pZAAA
{
return E_POINTER;
}
*pZAAA = NULL; //////////
。。。。。。。。。
}
8。 调试
若要在 ATL 中跟踪引用数,请在包括 atlbase.h 之前添加以下代码行:
#define _ATL_DEBUG_INTERFACES
该语句导致在每次调用 AddRef 或 Release 时,“输出”窗口均显示接口的当前引用数以及对应的类名和接口名称。
若要在 ATL 中调试 QueryInterface 调用,请在包括 atlcom.h 之前添加以下定义:
#define _ATL_DEBUG_QI
然后在调试时,在“输出”窗口中查找在对象上查询的每个接口的名称。
查看器和 Spy 程序允许查看计算机上和内存中的对象和事件。
- OLE/COM 对象查看器
- OLEVIEW 显示计算机上安装的 ActiveX 和 OLE 对象以及它们支持的接口。它还允许编辑注册表和查看类型库。有关更多信息,请参见使用 OLE/COM 对象查看器。
- IDataObject 数据对象查看器
- DOBJVIEW 显示 ActiveX 和 OLE 数据对象(由剪贴板或拖放操作创建)所提供的数据格式的列表。有关更多信息,请参见 DOBJVIEW。
9. AtlInitCommonControls ( ICC_COOL_CLASSES | ICC_BAR_CLASSES);
如果直接用atl 写界面,出现 listview 等控件无法现实,请先检查是否初始化
10. 在线程中用 COM, 需要初始化COM, ::CoInitialize(NULL)
- COM FAQ 以后逐日累加
- Shell FAQ 以后累加
- 逐日
- COM FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 《COM技术内幕》FAQ
- 有滚动条、固定Header的ASP.Net DataGrid实现
- 每个初学者都应该搞懂的问题
- ASP.NET编程习惯
- Eratosthenes筛法求素数
- JDK1.5最新消息
- COM FAQ 以后逐日累加
- 如何让你的VB6 IDE支持鼠标滚轮?
- Review of Debugging the development process 3. Of Strategic Importance
- 权利模型
- 一个推动浙江文化产业与经济发展的创新项目
- 本BLOG关门大吉!
- 野望
- 2004年11月25号 大连,2004年的第一场雪...[今天记昨天之事]
- VB公农历1.02版,不需要任何DLL