CFunExportForCSharp.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. #pragma once
  2. #pragma managed
  3. //支持C++.net的混合类型
  4. //#include<iostream>
  5. //#include<string>
  6. using namespace System; //for String^
  7. using namespace System::Runtime::InteropServices; // for Marshal 使用
  8. // 注意: 修改 配置属性->常规->公共语言运行时支持 修改为: 使用公共语言扩展 /clr
  9. #include "CLogFile.h"
  10. #include "COTSUtilityDllFunExport-old.h"
  11. namespace NSFunExport
  12. {
  13. namespace MethodFunction
  14. {
  15. class MFunction
  16. {
  17. public:
  18. MFunction() {}
  19. ~MFunction() {}
  20. //将托管字符串转换成非托管的ANSI字符串
  21. public:
  22. wchar_t* ManagedString2UnmanagedStringA(String^ strIn)
  23. {
  24. IntPtr ip = Marshal::StringToHGlobalAnsi(strIn);
  25. const wchar_t* pTemp = static_cast<const wchar_t*>(ip.ToPointer());
  26. wchar_t *pOut = new wchar_t[wcslen(pTemp) + 1];
  27. wcscpy_s(pOut, pTemp);
  28. Marshal::FreeHGlobal(ip);
  29. return pOut;
  30. }
  31. //将托管字符串转换成非托管的ANSI字符串
  32. char* ManagedString2UnmanagedAcllStringA(String^ strIn)
  33. {
  34. IntPtr ip = Marshal::StringToHGlobalAnsi(strIn);
  35. const char* pTemp = static_cast<const char*>(ip.ToPointer());
  36. char *pOut = new char[strlen(pTemp) + 1];
  37. strcpy_s(pOut, pTemp);
  38. Marshal::FreeHGlobal(ip);
  39. return pOut;
  40. }
  41. //将非托管的ANSI字符串转换成托管字符串
  42. String^ UnmanagedStringA2ManagedString(wchar_t *pIn)
  43. {
  44. String^ strOut = Marshal::PtrToStringAnsi(static_cast<IntPtr>(pIn));
  45. return strOut;
  46. }
  47. };
  48. }
  49. }
  50. namespace NSFunExport
  51. {
  52. using namespace NSFunExport::MethodFunction;
  53. public ref class CFunExportClass
  54. {
  55. public:
  56. CFunExportClass()
  57. {
  58. m_LpFunMethod = new MFunction();
  59. // m_LpUTools = new CUtilityTools();
  60. }
  61. ~CFunExportClass()
  62. {
  63. /* if (NULL != m_LpFunMethod)
  64. {
  65. delete m_LpFunMethod;
  66. m_LpFunMethod = NULL;
  67. } */
  68. // if (NULL != m_LpUTools)
  69. // {
  70. // delete m_LpUTools;
  71. // m_LpUTools = NULL;
  72. // }
  73. }
  74. void InitLog(String^ LogName)
  75. {
  76. /* if (NULL != m_LpLogFile)
  77. {
  78. delete m_LpLogFile;
  79. m_LpLogFile = NULL;
  80. }
  81. char * lpStr = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(LogName);
  82. m_LpLogFile = new CCLogFile(lpStr); */
  83. char * lpStr = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(LogName);
  84. InitLogFile_U(lpStr);
  85. if (NULL != lpStr)
  86. {
  87. delete[] lpStr;
  88. lpStr = NULL;
  89. }
  90. }
  91. void EndCSharpLogFile()
  92. {
  93. if (NULL != m_LpFunMethod)
  94. {
  95. delete m_LpFunMethod;
  96. m_LpFunMethod = NULL;
  97. }
  98. EndLogFile_U();
  99. /* if (NULL != m_LpUTools)
  100. {
  101. delete m_LpUTools;
  102. m_LpUTools = NULL;
  103. } */
  104. }
  105. // 打印Log信息
  106. BOOL TraceLog(String^ TraceData)
  107. {
  108. /* if (NULL == m_LpLogFile)
  109. {
  110. return FALSE;
  111. }
  112. char * lpTraceData = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(TraceData);
  113. m_LpLogFile->TraceProgress(__FILE__, __LINE__, lpTraceData); */
  114. char * lpTraceData = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(TraceData);
  115. LogTrace_U(__FILE__, __LINE__, lpTraceData);
  116. if (NULL != lpTraceData)
  117. {
  118. delete[] lpTraceData;
  119. lpTraceData = NULL;
  120. }
  121. return TRUE;
  122. }
  123. // 打印LogError信息
  124. BOOL TraceErrorLog(String^ TraceData)
  125. {
  126. /* if (NULL == m_LpLogFile)
  127. {
  128. return FALSE;
  129. }
  130. char * lpTraceData = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(TraceData);
  131. m_LpLogFile->TraceError(__FILE__, __LINE__, lpTraceData); */
  132. char * lpTraceData = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(TraceData);
  133. LogErrorTrace_U(__FILE__, __LINE__, lpTraceData);
  134. if (NULL != lpTraceData)
  135. {
  136. delete[] lpTraceData;
  137. lpTraceData = NULL;
  138. }
  139. return TRUE;
  140. }
  141. /*
  142. // 打印Log异常信息
  143. BOOL TraceExceptionLog(String^ TraceData)
  144. {
  145. if (NULL == m_LpLogFile)
  146. {
  147. return FALSE;
  148. }
  149. char * lpTraceData = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(TraceData);
  150. m_LpLogFile->TraceException(__FILE__, __LINE__, lpTraceData);
  151. return TRUE;
  152. }
  153. // 打印LogMessage信息
  154. BOOL TraceMessageLog(String^ TraceData)
  155. {
  156. if (NULL == m_LpLogFile)
  157. {
  158. return FALSE;
  159. }
  160. char * lpTraceData = m_LpFunMethod->ManagedString2UnmanagedAcllStringA(TraceData);
  161. m_LpLogFile->TraceMessage(__FILE__, __LINE__, lpTraceData);
  162. return TRUE;
  163. }
  164. */
  165. // 打印Log二进制信息信息
  166. BOOL LogBinaryDataLog(array<System::Byte>^ byteArray)
  167. {
  168. /* if (NULL == m_LpLogFile)
  169. {
  170. return FALSE;
  171. }
  172. pin_ptr<System::Byte> LpData = &byteArray[0];
  173. int ilen = byteArray->Length;
  174. m_LpLogFile->LogBinaryData("Binarry", LpData, ilen); */
  175. pin_ptr<System::Byte> LpData = &byteArray[0];
  176. int ilen = byteArray->Length;
  177. LogBinaryTrace_U("Binarry", LpData, ilen);
  178. return TRUE;
  179. }
  180. //延迟时间
  181. BOOL Waiting(int iMilliseconds)
  182. {
  183. /* if (NULL == m_LpUTools)
  184. {
  185. return FALSE;
  186. }
  187. m_LpUTools->WaitingWithEventLoop(iMilliseconds); */
  188. WaitingTime_U(iMilliseconds);
  189. return TRUE;
  190. }
  191. /* int GetAdd(int x, int y)
  192. {
  193. return x + y;
  194. }
  195. void LogString(String^ GetStr)
  196. {
  197. CString str = GetStr;
  198. AfxMessageBox(__T("C# 调用C++(clr)打印Log 成功"));
  199. } */
  200. private:
  201. // CCTest* m_Impl;
  202. //CCLogFile* m_LpLogFile;
  203. //CUtilityTools* m_LpUTools;
  204. //String^ csRev;
  205. // BYTE* lpBData;
  206. //LPCWSTR lpLog;
  207. MFunction* m_LpFunMethod;
  208. };
  209. }