CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

急!如何在非MFC类中引用MFC类, 说的不是很明白,详情见内

楼主wangshuo2k(动乐)2003-09-02 13:51:45 在 VC/MFC / 基础类 提问

#include   "appDlg.h"     //我要引用的MFC类  
  --------------------------  
  #include   "stdafx.h"  
   
  //extern   _ATL_FUNC_INFO   OnTextInfo;  
  #define   IDC_SRCOBJ   0  
  static   const   int DISPID_ONREQUEST   =   1;  
  static   const   int DISPID_ONREQUESTEX   =   2;  
   
  static   _ATL_FUNC_INFO   OnRequestInfo   =   {CC_STDCALL,   VT_EMPTY,   6   ,   {   VT_VARIANT,VT_VARIANT,   VT_VARIANT,VT_VARIANT   ,VT_VARIANT,VT_VARIANT}   };  
     
  class   CAppDlg;           //我要引用的MFC类  
  ---------------  
  //////////////////////////////////////////////////////////////////////  
  //   Construction/Destruction  
  //////////////////////////////////////////////////////////////////////  
  class   CAppObj   :   public   IDispEventSimpleImpl<0,   CAppObj   ,   &__uuidof(IjqtMsgEvents)>  
  {  
  public:  
   
  CAppDlg   *m_pAppDlg;  
   
  CAppObj(CAppDlg   *pAppDlg)  
  {  
  m_pAppDlg   =     pAppDlg;  
  }  
   
  BEGIN_SINK_MAP(CAppObj   )  
  //Make   sure   the   Event   Handlers   have   __stdcall   calling   convention  
  SINK_ENTRY_INFO(IDC_SRCOBJ,   __uuidof(IjqtMsgEvents),   DISPID_ONREQUEST,   OnRequest,   &OnRequestInfo)  
  SINK_ENTRY_INFO(IDC_SRCOBJ,   __uuidof(IjqtMsgEvents),   DISPID_ONREQUESTEX,   OnRequestEx,   &OnRequestExInfo)  
  END_SINK_MAP()  
   
  HRESULT   __stdcall   OnRequest(   VARIANT   FunctionCode,   VARIANT   Header,   VARIANT   Params,    
                                                    VARIANT   OptionalParams,   VARIANT*   Returndata,     VARIANT*   ErrorCode)  
  {  
  return   S_OK;  
   
  }  
     
  virtual   ~CAppObj()  
  {  
  }  
   
  }  
   
  我自己写了一个CPP文件内容如上,生成了一个CAppObj类。  
  我现在想在CAppObj   类中添加CAppDlg的变量   *m_pAppDlg,CAppDlg   是我应用程序的主类。  
  但我现在构造函数中将pAppDlg初始化后,在CAppObj的内部函数中不能使用pAppDlg调用CAppDlg的函数,请问这是为什么?  
   
  谢谢!  
   
  问题点数:45、回复次数:17Top

1 楼wangshuo2k(动乐)回复于 2003-09-02 14:28:36 得分 0

怎么没人理啊?  
  是不是太简单了?Top

2 楼wangshuo2k(动乐)回复于 2003-09-02 14:47:21 得分 0

UP!!Top

3 楼vcforever(累)回复于 2003-09-02 15:04:26 得分 5

在你的Project--Setting选项卡的General页的Microsoft   Foundation   Classes下拉列表  
  中选择Using   MFC   in   Shared   Dll或Using   MFC   in   Static   Library  
  然后再编译整个工程!应该就可以了,试一试吧  
  祝你成功!Top

4 楼wangshuo2k(动乐)回复于 2003-09-02 16:17:58 得分 0

谢谢楼上的,但我试了不行。  
   
  整个工程是基于MFC的,已添加了对ATL的支持。  
  上面那个文件是单另添加的,主要用来支持COM的事件触发接收。  
  但我现在接收到COM事件消息后要做的工作需要用到CAppDlg中的函数。  
  但我现在没发在CAppObj   类中调用CAppDlg类的函数。  
  我想问题只能出在我添加文件方式和对MFC类的支持上,不知道对不对,请教大家!Top

5 楼lzwcom(梅花香自苦寒来)回复于 2003-09-02 16:43:31 得分 40

在appdlg的类声明里面加如下代码  
  class   CAppDlg...  
  {  
          friend   class   CAppObj;  
  }  
  这是把CAppObj声明为CAppDlg的友类,这样CAppObj就可以访问CappDlg中的所有成员  
  同时要注意,把AppObj.h包含到AppDlg.h中,但因为你要在AppObj中使用AppDlg,所以你要包含AppDlg.h,这样会出现头文件重复包含的情况,编译无法进行,解决办法如下:  
  class   CAppDlg;//告诉编译器,有CAppDlg这么一个类  
  class   CAppObj..  
  {  
        CAppDlg*   m_pAppDlg;  
  }  
  同时在CAppObj的实现文件AppObj.cpp中,包含AppDlg.hTop

6 楼lzwcom(梅花香自苦寒来)回复于 2003-09-02 16:47:54 得分 0

愚人觉得这跟MFC和No   MFC无关,这是一个C++的语法问题Top

7 楼wangshuo2k(动乐)回复于 2003-09-02 19:20:09 得分 0

谢谢楼上的,但我试了不行。  
  我在#include   "appDlg.h"中添加了  
   
  #include   "CAppObj.cpp"  
   
  class   CAppDlg   :   public   CDialog  
  {  
            friend   class   CAppObj;  
            ……………………  
  我只有CAppObj.cpp没有CAppObj.和,没关系吧?Top

8 楼wangshuo2k(动乐)回复于 2003-09-02 19:22:57 得分 0

谢谢楼上的,但我试了不行。  
  我在#include   "appDlg.h"中添加了  
   
  #include   "CAppObj.cpp"  
   
  class   CAppDlg   :   public   CDialog  
  {  
            friend   class   CAppObj;  
            ……………………  
  我只有CAppObj.cpp没有CAppObj.和,没关系吧?Top

9 楼wangshuo2k(动乐)回复于 2003-09-03 09:21:35 得分 0

UP!Top

10 楼lzwcom(梅花香自苦寒来)回复于 2003-09-03 10:17:34 得分 0

呵呵,应该是#include   "CAppObj.h",建议做过AppObj.h,把CappObj的声明部分放在在CAppObj.h中,这个改动量也不会很大Top

11 楼wangshuo2k(动乐)回复于 2003-09-03 11:33:11 得分 0

#include   "appDlg.h"     //我要引用的MFC类  
  --------------------------  
  #include   "stdafx.h"  
   
  //extern   _ATL_FUNC_INFO   OnTextInfo;  
  #define   IDC_SRCOBJ   0  
  static   const   int DISPID_ONREQUEST   =   1;  
  static   const   int DISPID_ONREQUESTEX   =   2;  
   
  static   _ATL_FUNC_INFO   OnRequestInfo   =   {CC_STDCALL,   VT_EMPTY,   6   ,   {   VT_VARIANT,VT_VARIANT,   VT_VARIANT,VT_VARIANT   ,VT_VARIANT,VT_VARIANT}   };  
     
  class   CAppDlg;           //我要引用的MFC类  
  ---------------  
  //////////////////////////////////////////////////////////////////////  
  //   Construction/Destruction  
  //////////////////////////////////////////////////////////////////////  
  class   CAppObj   :   public   IDispEventSimpleImpl<0,   CAppObj   ,   &__uuidof(IjqtMsgEvents)>  
  {  
  public:  
   
  CAppDlg   *m_pAppDlg;  
   
  CAppObj(CAppDlg   *pAppDlg)  
  {  
  m_pAppDlg   =     pAppDlg;  
  }  
   
  BEGIN_SINK_MAP(CAppObj   )  
  //Make   sure   the   Event   Handlers   have   __stdcall   calling   convention  
  SINK_ENTRY_INFO(IDC_SRCOBJ,   __uuidof(IjqtMsgEvents),   DISPID_ONREQUEST,   OnRequest,   &OnRequestInfo)  
  SINK_ENTRY_INFO(IDC_SRCOBJ,   __uuidof(IjqtMsgEvents),   DISPID_ONREQUESTEX,   OnRequestEx,   &OnRequestExInfo)  
  END_SINK_MAP()  
   
  HRESULT   __stdcall   OnRequest(   VARIANT   FunctionCode,   VARIANT   Header,   VARIANT   Params,    
                                                    VARIANT   OptionalParams,   VARIANT*   Returndata,     VARIANT*   ErrorCode)  
  {  
  return   S_OK;  
   
  }  
     
  virtual   ~CAppObj()  
  {  
  }  
   
  }  
   
   
  这样的CPP应该怎么写。H啊?我还真不会:(  
  Top

12 楼lzwcom(梅花香自苦寒来)回复于 2003-09-03 12:11:31 得分 0

//-------CAppObj.h  
   
  class   CAppObj   :   public   IDispEventSimpleImpl<0,   CAppObj   ,   &__uuidof(IjqtMsgEvents)>  
  {  
  public:  
   
  CAppDlg   *m_pAppDlg;  
   
  inline   CAppObj(CAppDlg   *pAppDlg)  
  {  
  m_pAppDlg   =     pAppDlg;  
  }  
   
  BEGIN_SINK_MAP(CAppObj   )  
  //Make   sure   the   Event   Handlers   have   __stdcall   calling   convention  
  SINK_ENTRY_INFO(IDC_SRCOBJ,   __uuidof(IjqtMsgEvents),   DISPID_ONREQUEST,   OnRequest,   &OnRequestInfo)  
  SINK_ENTRY_INFO(IDC_SRCOBJ,   __uuidof(IjqtMsgEvents),   DISPID_ONREQUESTEX,   OnRequestEx,   &OnRequestExInfo)  
  END_SINK_MAP()  
   
    HRESULT   __stdcall   OnRequest(   VARIANT   FunctionCode,   VARIANT   Header,   VARIANT   Params,   VARIANT   OptionalParams,   VARIANT*   Returndata,     VARIANT*   ErrorCode);  
     
  virtual   ~CAppObj();  
   
  }  
   
  //----AppObj.cpp  
   
  CAppObj::~CAppObj()  
  {  
  }  
   
  HRESULT   __stdcall   CAppObj::OnRequest(   VARIANT   FunctionCode,   VARIANT   Header,   VARIANT   Params,   VARIANT   OptionalParams,   VARIANT*   Returndata,     VARIANT*   ErrorCode)  
  {  
          return   S_OK;  
  }  
  Top

13 楼wangshuo2k(动乐)回复于 2003-09-03 12:23:42 得分 0

报错:  
  'CAppObj::~CAppObj'   :   destructors   not   allowed   a   return   type  
  析构怎么会出错?不明白。Top

14 楼lzwcom(梅花香自苦寒来)回复于 2003-09-03 13:26:13 得分 0

你把appobj.h中的   vitrual   ~CAppObj();改为inline   vitrual   ~CAppObj(){};  
  然后把appobj.cpp中CAppObj::~CAppObj(){}部分删掉,再试试看Top

15 楼wangshuo2k(动乐)回复于 2003-09-03 14:22:33 得分 0

还不行,出来了300多了错误。  
  Top

16 楼dhbo(沉默的石头)回复于 2003-09-03 14:40:15 得分 0

感觉没什么错,但楼主的  
  #include   "appDlg.h"     //我要引用的MFC类  
  应该放在  
  #include   "stdafx.h"  
  后面  
  而且我认为不应该把构造函数写为:  
                    inline   CAppObj(CAppDlg   *pAppDlg)  
  {  
  m_pAppDlg   =     pAppDlg;  
  }  
  //去掉inline  
  同时如果你声明为一个全局的或static的  
  CAppObj   m_dlg;  
  你根本就不会对,因为形式参数始终为NULL,或一个无效的地址  
   
   
  Top

17 楼lzwcom(梅花香自苦寒来)回复于 2003-09-03 14:48:09 得分 0

最后一招:你放弃CAppObj.cpp,把原来(最开始的版本)CAppObj.cpp中的内容全部复制到CAppDlg.cpp文档的最后面.再试试,看看能不能编译通过。Top

相关问题

  • 如何在SDK中引用MFC中的类,
  • 如何引用类??
  • JAVA的类的属性可以直接引用。不用声明对象。C++的类的属性到底能不能直接引用,给个例子行吗?MFC类的属性能直接用吗?
  • 寻找高手~~~ ALT的工程,引用了WTL在引用MFC就出问题
  • 如何相互引用类
  • 用户定义类引用??
  • 引用类的问题。
  • tomcat中类的引用
  • C++ 类的引用问题
  • 类属性引用问题

关键词

  • mfc
  • 函数
  • idc
  • cpp
  • cappobj
  • cappdlg
  • pappdlg
  • appdlg
  • variant
  • onrequest

得分解答快速导航

  • 帖主:wangshuo2k
  • vcforever
  • lzwcom

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo