ATL/WTL
一别情深
不忘初心,方得始终!
展开
-
activex控件开发时如何用ie8进行调试
这阵子在搞一个activex的项目,发现dll型的输出控件比较难调试,导致我郁闷了几天了,调试不进去的话就定位不到错误,后面的工作就受阻了。试了好多种方法都不行,原来是不了解ie所致的。好像自从4.0以后,ie在我们打开一个网页时,会启动一个主的进程,和一个副进程,ie的调试器只touch到副进程是不行的,还得touch到主进程才可以。这个我也不确定是否正确,不过要使vs调试到activex工程里原创 2014-11-18 20:01:40 · 865 阅读 · 0 评论 -
JavaScript与ATL COM返回值问题
最近做了一个基于ATL的控件,设计了一个接口,想返回多个参数,但是通过JavaScript却无法得到返回值,本来以为是自己接口的问题,后来在网上找了很多才发现原来MSDN已经有了明确的说法:JavaScript does not support passing parameters by reference. JavaScript will make copies of these varia原创 2014-11-25 20:04:56 · 1263 阅读 · 0 评论 -
一个笔误引起的问题
最近在做一个ACTIVEX控件,是基于ATL的,在用IE进行测试时,调用其中的一个接口很容易引起IE崩溃,初步判断是因为内存操作引起的。正确代码如下:STDMETHODIMP CIECSChart::createTable(BSTR json){ // TODO: Add your implementation code here wchar_t* t = (_bstr_t)(json原创 2014-11-21 20:22:23 · 682 阅读 · 0 评论 -
BSTR 的内存分配和释放
当创建 BSTR 并在 COM 对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当BSTR 停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果 BSTR 传递出了接口,那么接收对象将负责它的内存管理。一般情况下,分配和释放分配给 BSTR 的内存的规则如下,这个规则也适用于自定义对象的内存分配与释放规则:1.当一个函数的参数是传值进来需要 B原创 2014-11-22 19:09:15 · 2031 阅读 · 0 评论 -
批处理文件的相对路径问题
在注册控件的时候,我一般会在OCX或DLL目录下放一个reg.bat,注册控件的时候就会比较方便些,但遇到WIN7之类对权限有要求的系统,有点让人无奈,总是提示找不到控件依赖的其他二进制文件,例如IECS2.DLL依赖IMAP.DLL,在注册IECS2.DLL时,会出现如下图所示的问题很显然的问题是路径不对,可是路径究竟是怎么一回事呢?一般来说,批处理文件处理相对路径的时候原创 2014-11-29 14:05:20 · 4372 阅读 · 0 评论 -
关于_ATL_MIN_CRT引出的问题
最近的一个ATL/WTL控件工程是用VC6生成的代码,然后在VS2008 EXPRESS EDITION版本中编译的,在Release版本中有两个选项:Release MinSizeRelease MinDependency这两个选项的差异是前者是动态链接到ATL,后者是静态链接到ATL编译后会遇到一个新问题:找不到atlmincrt.lib在VS2008原创 2014-11-29 15:33:57 · 1147 阅读 · 0 评论 -
在注册控件时出现对DllRegisterServer的调用失败的解决办法
最近做了一个控件,在WIN7 32位机子上注册控件时出现如下提示:这样的问题明白人一看就知道这是dll或ocx控件未正确注册的原因,但是怎样解决这个问题,确是比较棘手。 遇到这个问题的时候大家首先能想到的是手动注册该控件。一般有两种方法(1)调用系统本身自带的regsvr32.exe注册器进行注册,但是注册后发现提示注册错误,未能成功注册。这是什么原因呢?难道是没有管理原创 2014-11-29 13:57:33 · 9028 阅读 · 0 评论 -
CreateBitmapIndirect 函数创建位图失败
CBitmap::CreateBitmapIndirect 函数创建位图成功却在CDC::SelectObject 选择位图时却失败,原因是CreateBitmapIndirect不能创建彩色位图,只能创建单色位图,虽然CreateBitmapIndirect创建彩色位图时也能返回成功,但用CDC::SelectObject 的时候失败。MSDN只有在CreateBitmapIndirect原创 2014-12-02 22:53:34 · 1862 阅读 · 0 评论 -
基于ATL的控件中使用加速键(AtlLoadAccelerators)
控件基本情况控件本身+ CMainFrame + View将所有的控件消息全部转发给CMainFrame来处理BEGIN_MSG_MAP(CIECSChart) //CHAIN_MSG_MAP(CComControl) MESSAGE_HANDLER(MSG_SELECTION_CHANGED, MessageHandler) CHAIN_MSG_MAP(_Base) {原创 2014-12-04 00:08:56 · 1118 阅读 · 0 评论