我试图使用协议层设计模式来实现协议栈: http ://www.eventhelix.com/realtimemantra/patterncatalog/protocol_layer.htm
在我们的项目中,我将所有层作为单独的 dll。我拥有的图层是:
应用层dll
LLC层dll
MAC层dll
物理层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>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)