这阵子在搞一个activex的项目,发现dll型的输出控件比较难调试,导致我郁闷了几天了,调试不进去的话就定位不到错误,后面的工作就受阻了。试了好多种方法都不行,原来是不了解ie所致的。好像自从4.0以后,ie在我们打开一个网页时,会启动一个主的进程,和一个副进程,ie的调试器只touch到副进程是不行的,还得touch到主进程才可以。这个我也不确定是否正确,不过要使vs调试到activex工程里面去的话,我们还得按照下面的方法做。
第一步:选择activex项目,打开项目属性,在“configuration properties”-> “debugging”中的command 中选择ie浏览器所在位置,一般是C:\Program Files\Internet Explorer\iexplore.exe;在下面的command arguments里面输入你写的html测试页面。
第二步:选择菜单中的“debug“->”start debugging“,或者直接F5;这样调试就开始了,但是我们光这样的话我们调试不进去,我们还需要做下面关键的一步。
第三步:选择菜单中的”debug“->”attacch to process“,在下面的”available processes“中,你可以看到一个ieexplore的进程已被选中,但是还有一个ieexplore进程未被选中,我们选择未被选择ieexplore进程,然后选择”attach“将该进程附加到调试器上,这样我们就能调试activex内部的代码了。
至于如何调试,很简单,在你想要调试的代码前打上断点就可以了。
ATL 无窗口 ActiveX 控件中,得到容器窗口句柄的方法
2010-11-03 19:31
CComPtr < IOleClientSite > spClientSite;
GetClientSite( &spClientSite ); CComQIPtr < IOleInPlaceSite > spSite = spClientSite; HWND hwnd; |