Переглянути джерело

导出类和导出接口,不能使用std标准库里的类型,因为会分配内存。

sat23 4 роки тому
батько
коміт
83fa1ef2a1

+ 13 - 0
TCLCommand/TCLCommand/Command.cpp

@@ -6,6 +6,10 @@
 #define MIDSIZE 4096
 #define MAXSIZE 10240
 
+// ºêº¯Êý;
+#define OPEN_CHECK if (!IsOpen()) return false
+
+
 byte* TCLCommand::m_pData = NULL;
 TCLCommand::TCLCommand(bool bSync):CBaseSerial(bSync ? 0 : FILE_FLAG_OVERLAPPED)
 {
@@ -526,6 +530,7 @@ bool TCLCommand::ParseResultString(CommandParam& cmdPara, std::string data, cons
 
 bool TCLCommand::SendCommand(CommandParam& cmdPara)
 {
+    OPEN_CHECK;
     memset(m_pData, 0, MAXSIZE);
     if (_dwIOMode == FILE_FLAG_OVERLAPPED)
     {
@@ -553,6 +558,14 @@ bool TCLCommand::SendCommand(CommandParam& cmdPara)
     return cmdPara._rtnStatus == 0x0A ? true : false;
 }
 
+bool TCLCommand::SendCommand(std::string name, CommandParam& cmdPara, LPVOID data /* = NULL */, int dataLen /* = 0 */)
+{
+    if ( !GetCommandParams(name, cmdPara) )
+        return false;
+    PackingCommand(cmdPara, data, dataLen);
+    return SendCommand(cmdPara);
+}
+
 void TCLCommand::SetInternalCMDParams(DWORD dwResouceID)
 {
     std::string data;

+ 1 - 0
TCLCommand/TCLCommand/Command.h

@@ -27,5 +27,6 @@ public:
     void SetExternalCMDParams(LPCTSTR lpFileName);
     bool GetCommandParams(std::string name, CommandParam& cmdPara);
     bool SendCommand(CommandParam& cmdPara);
+    bool SendCommand(std::string name, CommandParam& cmdPara, LPVOID data = NULL, int dataLen = 0);
     void PackingCommand(CommandParam& cmdPara, LPVOID data = NULL, const int& dataLen = 0);
 };

+ 6 - 3
TCLCommand/TCLCommand/TCLCommand.cpp

@@ -120,10 +120,13 @@ void CTCLCommand::PackingCommand(CommandParam& cmdPara, LPVOID data /* = NULL */
 bool CTCLCommand::SendCommand(std::string name, CommandParam& cmdPara, LPVOID data /* = NULL */, int dataLen /* = 0 */)
 {
     OPEN_CHECK;
-    if ( !g_TCLCommand.GetCommandParams(name, cmdPara) )
+    CommandParam _cmdpara;
+    if ( !g_TCLCommand.GetCommandParams(name, _cmdpara) )
         return false;
-    g_TCLCommand.PackingCommand(cmdPara, data, dataLen);
-    return g_TCLCommand.SendCommand(cmdPara);
+    g_TCLCommand.PackingCommand(_cmdpara, data, dataLen);
+    bool bRet = g_TCLCommand.SendCommand(_cmdpara);
+    cmdPara = _cmdpara;
+    return bRet;
 }
 
 #else