错误 5 error LNK2019: 无法解析的外部符号 "protected: unsigned long __thiscall CMSPStream::InternalAddRef(void)" (?InternalAddRef@CMSPStream@@IAEKXZ),该符号在函数 "public: virtual unsigned long __stdcall ATL::CComObject<class CSampleMSPStream>::AddRef(void)" (?AddRef@?$CComObject@VCSampleMSPStream@@@ATL@@UAGKXZ) 中被引用 SampMsp.obj 错误 6 error LNK2019: 无法解析的外部符号 "protected: unsigned long __thiscall CMSPStream::InternalRelease(void)" (?InternalRelease@CMSPStream@@IAEKXZ),该符号在函数 "public: virtual unsigned long __stdcall ATL::CComObject<class CSampleMSPStream>::Release(void)" (?Release@?$CComObject@VCSampleMSPStream@@@ATL@@UAGKXZ) 中被引用 SampMsp.obj
这两个错误困扰了我很长时间.请高人指点迷津.

解决方案 »

  1.   

    HRESULT hr;
    CMSPComObject<CSampleMSPStream> * pStream;
    hr = CMSPComObject<CSampleMSPStream>::CreateInstance( &pStream );
     
    把上边最后一句注释掉,就可以编译通过.
      

  2.   

    如果你在写CMSPStream的话,你需要实现protected: unsigned long __thiscall CMSPStream::InternalAddRef(void)" (?InternalAddRef@CMSPStream@@IAEKXZ)如果你在使用这个类的话,你不应该直接使用CMSPComObject<CSampleMSPStream>这样的东西,而是应该使用COM的方法间接使用
      

  3.   

    谢谢楼上两位的帮助.按楼上所说我在CSampleMSPStream类中增加了函数 ULONG InternalAddRef(void);的声明和实现还是不行.头文件代码如下:CComModule _Module;  
    #define   DECLARE_CLASSFACTORY()   DECLARE_CLASSFACTORY_EX(ATL::CComClassFactory) 
    #ifndef __SAMPSTRM_H_
    #define __SAMPSTRM_H_#if _MSC_VER >= 1000
    #pragma once
    #endif // _MSC_VER >= 1000class CSampleMSPStream : public CMSPStream
    {
    public:
     BEGIN_COM_MAP(CSampleMSPStream)
         COM_INTERFACE_ENTRY_CHAIN(CMSPStream)
     END_COM_MAP()public:
        CSampleMSPStream();
        virtual ~CSampleMSPStream();
        virtual void FinalRelease();
        STDMETHOD (get_Name) (
            OUT     BSTR *                  ppName
            );
        STDMETHOD (SelectTerminal) (
            IN      ITTerminal *            pTerminal
            );    STDMETHOD (UnselectTerminal) (
            IN     ITTerminal *             pTerminal
            );    STDMETHOD (StartStream) ();    STDMETHOD (PauseStream) ();    STDMETHOD (StopStream) ();
        virtual HRESULT ProcessGraphEvent(
            IN  long lEventCode,
            IN  long lParam1,
            IN  long lParam2
            );
        virtual HRESULT FireEvent(IN MSP_CALL_EVENT        type,
                                  IN HRESULT               hrError,
                                  IN MSP_CALL_EVENT_CAUSE  cause);
        virtual HRESULT ConfigureTransport(void);
    protected:
        ULONG InternalAddRef(void);//<------------------------增加了
        BOOL          m_fTransportConfigured;
        BOOL          m_fTerminalConnected;
        FILTER_STATE  m_DesiredGraphState;
        FILTER_STATE  m_ActualGraphState;private:
        HRESULT ConnectTerminal(ITTerminal * pTerminal);
        HRESULT ConnectToTerminalPin(IPin * pTerminalPin);

    };#endif //__SAMPSTRM_H_
      

  4.   

    InternalAddRef是CMSPStream的,不是你这个类的如果CMSPStream是一个现有的COM对象的话,我估计你不能直接继承它!你需要直接实现CMSPStream所支持的接口,在你实现的类中,构造一个CMSPStream对象,并利用该对象访问CMSPStream的功能