1

我试图使用协议层设计模式来实现协议栈: http ://www.eventhelix.com/realtimemantra/patterncatalog/protocol_layer.htm

在我们的项目中,我将所有层作为单独的 dll。我拥有的图层是:

  1. 应用层dll

  2. LLC层dll

  3. MAC层dll

  4. 物理层dll

我在同一个解决方案中有另一个项目,它实现了设计模式并实现了协议层的一般功能。我所有的层都继承自协议层基类。项目之间的依赖关系如下: Protocol Layer Design Pattern dll:无依赖 Physical Layer dll:Protocol Design Pattern dll MAC Layer dll:Protocol Design Pattern dll and Physical Layer dll LLC Layer dll:Protocol Design Pattern dll and MAC Layer dll Application Layer dll:协议设计模式 dll 和 LLC 层 dll

基于设计模式,我们的每一层都有指向它上面和下面的层的指针。我们设计的流程是这样的:在应用层构造函数中,我们创建 LLC 层的对象,然后 LLC 层创建 Mac 层,MAC 层又创建物理层。它们都使用指针链接。

我的协议设计模式项目 dll 和物理层 dll 正确构建。但其他 dll 版本正在给出链接器错误。向底层的构造函数说未解决的外部问题。这些是我得到的错误。

====================================

  1. 1>phLayer.obj : 错误 LNK2019: 无法解析的外部符号“public:
    virtual __thiscall CProtocolLayer::~CProtocolLayer(void)”
    (??1CProtocolLayer@@UAE@XZ) 在函数
    __unwindfunclet$??0CPhysicalLayer@@QAE@PAVCProtocolLayer@中引用@@Z$0 1>phLayer.obj : 错误 LNK2019:函数

    public: __thiscall CPhysicalLayer::CPhysicalLayer(class CProtocolLayer *)" (??0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z) 1>phLayer.obj:错误 LNK2019:未解析的外部符号“公共:__thiscall CTransmitProtocolHandler::CTransmitProtocolHandler(类 CProtocolLayer *)"
    (??0CTransmitProtocolHandler@@QAE@PAVCProtocolLayer@@@Z) 在函数“public: __thiscall CPhysicalLayer::CPhysicalLayer(class CProtocolLayer *)”中引用 (??0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z)
    1>phLayer.obj : 错误 LNK2019: 未解析的外部符号“public:
    __thiscall CProtocolLayer::CProtocolLayer(class CProtocolLayer *,class CProtocolLayer *)” (??0CProtocolLayer@@QAE@PAV0@0@Z) 在函数“public: __thiscall
    CPhysicalLayer::CPhysicalLayer ”中引用(class CProtocolLayer *)"
    (??0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z) 1>phLayer.obj : error LNK2019: unresolved external symbol "public: int __thiscall
    CProtocolPacket::getBodyLength(void)"
    (?getBodyLength@CProtocolPacket@@QAEHXZ) 在函数中引用
    “public: virtual void __thiscall CPhysicalLayer::Data_req(class
    CProtocolPacket *)”
    (?Data_req@CPhysicalLayer@@UAEXPAVCProtocolPacket@@@Z) 1>phLayer.obj: 错误 LNK2019: 无法解析的外部符号“public: void __thiscall CReceiveProtocolHandler::Handle_Receive (class CProtocolPacket *)"
    (?Handle_Receive@CReceiveProtocolHandler@@QAEXPAVCProtocolPacket@@@Z) 在函数 "private: void __thiscall
    CPhysicalLayer::dataRead(void)" (?dataRead@CPhysicalLayer@@AAEXXZ)
    1>phLayer.obj 中引用:错误 LNK2019:

    函数
    “private:类 CProtocolPacket __thiscall
    CPhysicalLayer::convertToProtocolPacket(class
    std::basic_string,class
    std::allocator >)"
    (?convertToProtocolPacket@CPhysicalLayer@@AAE?AVCProtocolPacket@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator @D@2@@std@@@Z) 1>phLayer.obj : 错误 LNK2019: 无法解析的外部符号 "public:
    void __thiscall CProtocolPacket::AddHeader(int,char *)"
    (?AddHeader@CProtocolPacket@@QAEXHPAD@Z ) 在函数
    “private: class CProtocolPacket __thiscall
    CPhysicalLayer::convertToProtocolPacket(class
    std::basic_string,class
    std::allocator >)”
    中引用 (?convertToProtocolPacket@CPhysicalLayer@@AAE?AVCProtocolPacket@@V?$basic_string@DU?$char_traits @D@std@@V?$allocator@D@2@@std@@@Z)
4

1 回答 1

1

你是如何构建exe的?我看到了,您只面临链接器问题。要么你必须以错误的顺序链接,要么一定有什么地方出错了。尝试以正确的顺序链接它们。这应该可以解决问题。如果没有,请提供更多信息。

于 2013-02-24T07:00:22.327 回答