norains的专栏

只专注于WINCE开发

用户操作
[即时聊天] [发私信] [加为好友]
norainsID:norains
142917次访问,排名598,好友0人,关注者53人。
代码其实是一种乐趣
norains的文章
原创 189 篇
翻译 0 篇
转载 10 篇
评论 274 篇
norains的公告
联系方式请看置顶文章
最近评论
dfdf:讨厌MFC!我觉得MFC就是太乱了!看似无用的代码不要不行,MD微软啥都给我们做完了,原理性的东西我们却永远没法搞懂了!
ironox:有个地方 我觉得很别扭,不知道怎么办好

比如说 CReg reg(HKEY_CURRENT_USER,TEXT("ControlPanel\Volume"));
ControlPanel\Volume 有可能不存在呀,这个该怎么处理哦?对象虽然创建了,出错了也没提示
szterry:呵呵,果然工作狂技术狂,同感,一样的感觉……不过我才刚毕业一年……搞IT就是玩……
jinlking:这个botton的实现只是在主窗口画了一块区域,对于事件的处理还要放在主窗口的窗口处理函数之中,在对应的消息处理上调用CheckTap来判断是否是此“按钮”,问一下,这种方法与把按钮封装在子窗口中有什么区别,二者使用那个更好?
KUODY:博主真是好人
文章分类
收藏
    相册
    动漫
    文章图片
    程序交流
    xumercury的BLOG
    狗友们的博客
    清蒸石斑鱼
    美女如刀锋
    茁茁的BLOG
    魅力老姐的窝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 COM宏小结收藏

    新一篇: 写给那些因分手而痛苦的兄弟 | 旧一篇: 四论在C++类中实现Windows窗口的创建

    //========================================================================
    //TITLE:
    //    COM宏小结
    //AUTHOR:
    //    norains
    //DATE:
    //    Wednesday  24-October-2007
    //Environment:
    //        EVC4.0 + Windows CE 5.0 Standard SDK
    //========================================================================
        COM接口用到的宏主要有六个:STDMETHOD,STDMETHODIMP,STDMETHOD_,STDMETHODIMP_,SUCCEEDED,FAILED.
       
        我们首先来看看这六个宏的定义:
       
        STDMETHOD:
      #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
      #ifdef _WIN32 // Win32 doesn't support __export
      #define STDMETHODCALLTYPE __stdcall
      #else
      #define STDMETHODCALLTYPE __export __stdcall
      #endif

      STDMETHODIMP:
      #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
      #ifdef _WIN32 // Win32 doesn't support __export
      #define STDMETHODCALLTYPE __stdcall
      #else
      #define STDMETHODCALLTYPE __export __stdcall
      #endif

      STDMETHOD_:
      #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
      #ifdef _WIN32 // Win32 doesn't support __export
      #define STDMETHODCALLTYPE __stdcall
      #else
      #define STDMETHODCALLTYPE __export __stdcall
      #endif

      STDMETHODIMP_:
      #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
      #ifdef _WIN32 // Win32 doesn't support __export
      #define STDMETHODCALLTYPE __stdcall
      #else
      #define STDMETHODCALLTYPE __export __stdcall
      #endif

      SUCCEEDED:
      #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)

      FAILED:
      #define FAILED(Status) ((HRESULT)(Status)<0)


        由定义我们可以看出两点:
       
        1)STDMETHOD和STDMETHODIMP,STDMETHOD_和STDMETHODIMP_分别为一对,SUCCEEDED和FAILED为相反.
       
        2)STDMETHOD只是STDMETHOD_的简化版.
          比如这两个语句互为等价关系:
          STDMETHOD (QueryInterface) (REFIID riid, LPVOID * ppv);
          STDMETHOD_ (HRESULT,QueryInterface) (REFIID riid, LPVOID * ppv);
         
       
        既然有STDMETHOD,也有STDMETHODIMP,那么应该在什么情况下使用其中一个呢?
       
        如果继承的函数的声明和定义都在类内定义,则只需使用STDMETHOD即可,如:
        //////////////////////////////////////////////
        //Browser.h
        //////////////////////////////////////////////
        class CBrowser:public IOleContainer
        {
          ...
          STDMETHOD(LockContainer)(BOOL){return OK;}    
        }
       
        如果函数的定义在外部,那么声明采用STDMETHOD,定义时使用STDMETHODIMP
        //////////////////////////////////////////////
        //Browser.h
        //////////////////////////////////////////////
        class CBrowser:public IOleContainer
        {
          ...
          STDMETHOD(LockContainer)(BOOL);    
        }
       
        //////////////////////////////////////////////
        //Browser.cpp
        //////////////////////////////////////////////
        STDMETHODIMP CBrowser::LockContainer(BOOL)
        {
         return S_OK;
        }
       
        如果将定义的STDMETHODIMP改为声明的STDMETHOD,则编译出错.同样的情况也出现于STDMETHOD_和STDMETHODIMP_. 

    发表于 @ 2007年10月24日 21:20:00|评论(loading...)|编辑

    新一篇: 写给那些因分手而痛苦的兄弟 | 旧一篇: 四论在C++类中实现Windows窗口的创建

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © norains