ATL问题集-#26 ~#29

类别:VC语言 点击:0 评论:0 推荐:

/*此文是我将网上的一些文章,自已遇到的问题进行整理,有些是翻译,所有只供学习讨论,如有版权还属于原作者——作者:黄森堂*/

#26 在ATL发行版本中出错信息:“unresolved external symbol _main”

答:这是VC6的一个BUG,由于VC6在ATL使用_ATL_MIN_CRT_宏,该宏会使CRT启动代码无效,去掉该宏就可以了,如下做法:Project->Setting->C/C++ 的Category中选择Preprocessor的Preprocessor definitions:中去掉_ATL_MIN_CRT_。

#27 如何在ATL中取得windowsless窗口的HWND?

答:windowsless 就是没有窗口。你的ATL控件没有窗口, m_hWnd不是NULL能是什么。 至于Ondraw得到的 hdc 实际是父窗口的hdc。huhu 你注意看 M$ 的form 系列控件(就是IE页面中的那些textbox checkbox ....), 都是windwosless的。
if (m_bWndLess) 

HDC hDC; 
HWND hWnd; 
// Get the HDC from the client 
m_spInPlaceSite->GetDC(NULL, OLEDC_NODRAW, &hDC); 
// Get the HWND from the HDC 
hWnd = WindowFromDC(hDC); 
m_spInPlaceSite->ReleaseDC(hDC); 

注意:不要乱动那个hWnd因为这个东西不是你的。

#28 如何在客户端中使用CoCreateInstanceEx()?

答:stdafx.h的最前面加入#define _WIN32_DCOM
 

#29 为何在Visual C++ Compoents中找不到ATL proxy Generator组件?

答:这是VC5为支持Connection Point的做法,VC6已整合到Wizard里面。具体位置:选择编译你的项目,然后直接在你的类中击鼠标右键选择Implement Connection Point,后面的界面与VC5的一模一样。

本文地址:http://com.8s8s.com/it/it3346.htm