当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·是中国人就看看    »显示摘要«
    摘要: http://tf.xiloo.com/kan.htm ......
    摘要: 谁给我推荐本c#的好书,本人刚上手,要容易理解一点,另外英文不好,要中文的 ......


如何在COM组件的中使用外部定义的类

我写了一个COM组件,该组件要和客户程序进行数据交换  
        我的思路如下:  
        (1)在客户程序中定义一个数据类CDataAdmin  
        (2)在COM对象中:  
              (2.1)定义一个成员指针,CDataAdmin   *m_pData  
              (2.2)定义一个接口IDataExchange  
              (2.3)在IDataExchange中定义方法void   SetData(CDataAdmin   *pData){m_pData=pData;}  
        (3)在客户程序中创建COM对象,通过QueryInterface获取IDataExchange,再通过SetData方法把外部的数据传送到COM内部  
   
        这一切看起来都很正常,应该能办到。但是小弟初学COM,对那个自定义的CDataAdmin类还有很多很大的疑问:  
        CDataAdmin类的CPP文件肯定要加到客户程序,这点应该没有疑问。但是在COM组件中呢?一定要加入CDataAdmin类的实现吗,可以不可以只加入它的头文件呢?  
        我想这样做的原因一是:CDataAdmin类已经在客户程序中实现了。另外一个更重要的原因是:我的CDataAdmin类用到了MFC中的类,而我的COM组件工程使用的是Win32   DLL形式,不支持MFC。将该类加入到COM   DLL中之后,马上出现很多编译链接的错误,我不知道应该加上哪些库,而且怕会出现库的冲突。  
         
        我想请教各位,这种情况应该怎么解决呢?  
  CDataAdmin类的头文件  
  //   DataAdmin.h:   interface   for   the   CDataAdmin   class.  
  ////////////////////////////////////////////////////////////////////////  
   
  #if   !defined(AFX_DATAADMIN_H__25573346_54F8_4E39_8840_5F25A681ACCF__INCLUDED_)  
  #define   AFX_DATAADMIN_H__25573346_54F8_4E39_8840_5F25A681ACCF__INCLUDED_  
   
  #if   _MSC_VER   >   1000  
  #pragma   once  
  #endif   //   _MSC_VER   >   1000  
   
  #include   <afxtempl.h>  
  #include   <afxmt.h>  
   
  class   CFilePack;  
  class   CDataAdmin  
  {  
  //   Attributes  
  public:  
  HANDLE         m_hBufEnough;       //   Buffer   enough   before   run   the   filter   graph  
   
  protected:  
  CMutex   *     m_pMutex;  
  bool             m_bFlushing;  
   
  CTypedPtrList   <CPtrList,   CFilePack*>   DataList;  
  CTypedPtrList   <CPtrList,   CFilePack*>   PoolList;  
   
  //   Operations  
  public:  
  CDataAdmin();  
  virtual   ~CDataAdmin();  
   
  void   SetFlushing(bool   inFlush   =   true);  
  bool   IsFlushing(void);  
  //   List   administrate  
  int   ResetList(void);  
  int   GetListSize(void);  
  CFilePack*   GetDataBuffer(void);  
  int   ReleaseDataBuffer(CFilePack*   pData);  
  CFilePack*   GetWriteBuffer(void);  
  int   ReleaseWriteBuffer(CFilePack*   pData);  
   
  CFilePack*   PointToDataHead(void);  
  int   RollBackDataHead(CFilePack*   pData);  
   
  DWORD   WaitForNext(DWORD     inTimeOut);  
  };  
   
  #endif   //   !defined(AFX_DATAADMIN_H__25573346_54F8_4E39_8840_5F25A681ACCF__INCLUDED_)  
 

NO.1   作者: 88dd

定义一个IDataAdmin   接口,CDataAdmin来实现这个接口  
  在IDataExchange中定义方法void   SetData(IDataAdmin   *pData)  
  但是在COM组件工程中加入IDataAdmin定义文件(.h文件)即可

NO.2   作者: kingzai

http://expert.csdn.net/Expert/topic/1710/1710297.xml?temp=.5333368


    摘要: 我的电脑安装了三系统(98/2000pr/xp) 现在xp一启动进去就出现死机 怎么修复呀( ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE