#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 TCPIPSCF_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // TCPIPSCF_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef TCPIPSCF_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment (lib, "TcpipSCFX64D.lib") #else #pragma comment (lib, "TcpipSCFX64.lib") #endif #else #ifdef _DEBUG #pragma comment (lib, "TcpipSCFD.lib") #else #pragma comment (lib, "TcpipSCF.lib") #endif #endif #endif #ifdef TCPIPSCF_EXPORTS #define TCPIPSCF_API __declspec (dllexport) #define TCPIPSCF_C_API extern "C" __declspec (dllexport) #else #define TCPIPSCF_API __declspec (dllimport) #define TCPIPSCF_C_API extern "C" __declspec (dllimport) #endif #include //#include "SCF.h" #include "SCF.Detail.h" #include "ResDataObject.h" namespace eSCF = DIOS::Dev::Communication::Detail; TCPIPSCF_C_API eSCF::SCFDetail * CreateSCF (); namespace DIOS { namespace Dev { namespace Communication { namespace Detail { // 此类是从 TcpipSCF.dll 导出的 class TCPIPSCF_API TcpipSCF : public eSCF::SCFDetail { using super = eSCF::SCFDetail; int ConnectTcpip (const char *ip, WORD port, DWORD timeout); public: TcpipSCF (void); virtual ~TcpipSCF (); //设置连接,参数也由json传过来 /* { "connect":"COM", "port":"COM1", "baudrate":"3200", "bytesize":"8", "parity":"1", "stopbits":"1", } */ int Connect (ResDataObject & Connectprameters, tPacketPredate callback = NULL, SCF_TRANSFERTYPE TransferType = SCF_NORMAL_TRANSFER, DWORD CommunicateTimeout = 75000); //断开连接 void Disconnect (); //判断是否连接 virtual bool isConnected () const override; const char* GetConnectionType (); //将数据包通过SCF进行发送 int SendPacket (const char *pPacket, DWORD length, DWORD timeout); int SendPacket (SCFPacket *pPacket, DWORD timeout); protected: string m_IP; WORD m_Port; bool Connected; hostent hes; servent servs; SOCKET Socketfd; SOCKADDR_IN sa; unsigned long tulong; unsigned long * tulongptr; int Error; int ReadData (char *pPacket, DWORD length, DWORD timeout); struct hostent * Gethostbyname (const char *name1); struct servent * Getservbyname (const char *name, const char *prot); }; } } } }