我写了一个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 graphprotected:
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_)

解决方案 »

  1.   

    我的project setting / Link下面的库如下:strmbasd.lib msvcrtd.lib strmbasd.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib 并且在Ignore All default libraries前面打了一个勾。我想知道CTypedPtrList <CPtrList, CFilePack*> DataList(其中的CFilePack是一个自定义的类,不涉及MFC)和CTypedPtrList <CPtrList, CFilePack*> PoolList,CMutex *  m_pMutex这三个成员的库是哪一个,如果包含到我的工程中会不会和前面的库发生冲突(先告诉我库名,让我试试看)另外,我使用同步的时候还使用了CSingleLock这个类。这些类我查了MSDN,只发现它们的头文件,但是不知道lib文件是哪一个。求求大家给我指明一条生路
      

  2.   

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

  3.   

    关键是:这个工程是一个win32 DLL 工程,但是CDataAdmin中间使用了MFC类。我想知道这些类的lib文件是什么?
    在project settings->Link中我选择了Ignore All default libraries,我想知道这个Ignore到底省略了什么?
      

  4.   

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