// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SERIALSCF_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // SERIALSCF_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef SERIALSCF_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "SerialSCFX64D.lib") #else #pragma comment(lib, "SerialSCFX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "SerialSCFD.lib") #else #pragma comment(lib, "SerialSCF.lib") #endif #endif #endif #ifdef SERIALSCF_EXPORTS #define SERIALSCF_API __declspec(dllexport) #define SERIALSCF_C_API extern "C" __declspec(dllexport) #else #define SERIALSCF_API __declspec(dllimport) #define SERIALSCF_C_API extern "C" __declspec(dllimport) #endif #include "SCF.h" #include "ResDataObject.h" SERIALSCF_C_API SCF* GetSCF(); SERIALSCF_C_API void ReleseSCF(SCF* p); // 此类是从 SerialSCF.dll 导出的 class SERIALSCF_API SerialSCF : public SCF{ HANDLE hCom; string *m_pPortName; DWORD m_BaudRate; DWORD m_ByteSize; DWORD m_Parity; DWORD m_StopBits; DWORD m_ReadTimeout; DWORD m_WriteTimeout; int ConnectCOM(const char *pCom, DWORD BaudRate, DWORD ByteSize, DWORD Parity, DWORD StopBits); public: SerialSCF(void); virtual ~SerialSCF(); //设置连接,参数也由json传过来 /* { "connect":"COM", "port":"COM1", "baudrate":"3200", "bytesize":"8", "parity":"1", "stopbits":"1", } */ int Connect(ResDataObject & Connectprameters, PacketParser callback = NULL, SCF_TRANSFERTYPE TransferType = SCF_NORMAL_TRANSFER, DWORD CommunicateTimeout = 0); //断开连接 void Disconnect(); //判断是否连接 bool isConnected(); const char* GetConnectionType(); //将数据包通过SCF进行发送 int SendPacket(const char *pPacket, DWORD length, DWORD timeout); int SendPacket(SCFPacket *pPacket, DWORD timeout); protected: //继承类的读包流程,直接从SCF接口中读取数据,通常由SCF的读取线程调用,当上层直接调用的时候需要锁住读取线程,再调用该函数 int ReadData(char *pPacket, DWORD length, DWORD timeout); //int ReadData(SCFPacket *pPacket, DWORD timeout); };