TRACE.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // trace.cpp : Contains TRACE.DLL implementation and initialization
  2. //              code.
  3. //
  4. // This is a part of the Microsoft Foundation Classes C++ library.
  5. // Copyright (C) 1992-1998 Microsoft Corporation
  6. // All rights reserved.
  7. //
  8. // This source code is only intended as a supplement to the
  9. // Microsoft Foundation Classes Reference and related
  10. // electronic documentation provided with the library.
  11. // See these sources for detailed information regarding the
  12. // Microsoft Foundation Classes product.
  13. #include <afxwin.h>
  14. #include "traceapi.h"
  15. #include "traceres.h"       // trace resources
  16. /////////////////////////////////////////////////////////////////////////////
  17. // Dialog class
  18. class CPromptDlg : public CDialog
  19. {
  20. public:
  21. CPromptDlg(BOOL bEnabled, UINT nFlags, CWnd* pParent);
  22. //{{AFX_DATA(CPromptDlg)
  23. enum { IDD = IDD_PROMPT };
  24. BOOL    m_bEnabled;
  25. BOOL    m_b0;
  26. BOOL    m_b1;
  27. BOOL    m_b2;
  28. BOOL    m_b3;
  29. BOOL    m_b4;
  30. //}}AFX_DATA
  31. UINT CombineFlags();
  32. virtual void DoDataExchange(CDataExchange* pDX);
  33. //{{AFX_MSG(CPromptDlg)
  34. //}}AFX_MSG
  35. DECLARE_MESSAGE_MAP()
  36. };
  37. BEGIN_MESSAGE_MAP(CPromptDlg, CDialog)
  38. //{{AFX_MSG_MAP(CPromptDlg)
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. CPromptDlg::CPromptDlg(BOOL bEnabled, UINT nFlags, CWnd* pParent)
  42. : CDialog(CPromptDlg::IDD, pParent)
  43. {
  44. //{{AFX_DATA_INIT(CPromptDlg)
  45. m_bEnabled = bEnabled;
  46. m_b0 = (nFlags & 1) != 0;
  47. m_b1 = (nFlags & 2) != 0;
  48. m_b2 = (nFlags & 4) != 0;
  49. m_b3 = (nFlags & 8) != 0;
  50. m_b4 = (nFlags & 0x10) != 0;
  51. //}}AFX_DATA_INIT
  52. }
  53. void CPromptDlg::DoDataExchange(CDataExchange* pDX)
  54. {
  55. //{{AFX_DATA_MAP(CPromptDlg)
  56. DDX_Check(pDX, IDC_ENABLEALL, m_bEnabled);
  57. DDX_Check(pDX, IDC_BIT0, m_b0);
  58. DDX_Check(pDX, IDC_BIT1, m_b1);
  59. DDX_Check(pDX, IDC_BIT2, m_b2);
  60. DDX_Check(pDX, IDC_BIT3, m_b3);
  61. DDX_Check(pDX, IDC_BIT4, m_b4);
  62. //}}AFX_DATA_MAP
  63. }
  64. UINT CPromptDlg::CombineFlags()
  65. {
  66. UINT nFlags = 0;
  67. if (m_b0)
  68. nFlags |= 1;
  69. if (m_b1)
  70. nFlags |= 2;
  71. if (m_b2)
  72. nFlags |= 4;
  73. if (m_b3)
  74. nFlags |= 8;
  75. if (m_b4)
  76. nFlags |= 0x10;
  77. return nFlags;
  78. }
  79. /////////////////////////////////////////////////////////////////////////////
  80. // Public C interface
  81. extern "C"
  82. BOOL FAR PASCAL EXPORT PromptTraceFlags(HWND hWndParent, TracerData FAR* lpData)
  83. {
  84. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  85. TRACE0("Inside Trace DLLn");
  86. // All DLL entry points should have a top-level TRY/CATCH block.
  87. // Otherwise, it would be possible to throw an uncaught exception from
  88. //  an the DLL.  This would most likely cause a crash.
  89. TRY
  90. {
  91. CPromptDlg dlg(lpData->bEnabled, lpData->flags,
  92. CWnd::FromHandle(hWndParent));
  93. if (dlg.DoModal() != IDOK)
  94. return FALSE;
  95. // update the data
  96. lpData->bEnabled = dlg.m_bEnabled;
  97. lpData->flags = dlg.CombineFlags();
  98. }
  99. CATCH_ALL(e)
  100. {
  101. // a failure caused an exception.
  102. return FALSE;
  103. }
  104. END_CATCH_ALL
  105. return TRUE;
  106. }
  107. /////////////////////////////////////////////////////////////////////////////
  108. // Library init
  109. class CTracerDLL : public CWinApp
  110. {
  111. public:
  112. virtual BOOL InitInstance(); // Initialization
  113. virtual int ExitInstance();  // Termination (WEP-like code)
  114. // nothing special for the constructor
  115. CTracerDLL(LPCTSTR pszAppName) : CWinApp(pszAppName) { }
  116. };
  117. BOOL CTracerDLL::InitInstance()
  118. {
  119. // any DLL initialization goes here
  120. TRACE0("TRACE.DLL initializingn");
  121. return TRUE;
  122. }
  123. int CTracerDLL::ExitInstance()
  124. {
  125. // any DLL termination goes here (WEP-like code)
  126. return CWinApp::ExitInstance();
  127. }
  128. extern "C" BOOL FAR PASCAL EXPORT FilterDllMsg(LPMSG lpMsg)
  129. {
  130. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  131. TRY
  132. {
  133. return AfxGetThread()->PreTranslateMessage(lpMsg);
  134. }
  135. END_TRY
  136. return FALSE;
  137. }
  138. extern "C" void FAR PASCAL EXPORT ProcessDllIdle()
  139. {
  140. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  141. TRY
  142. {
  143. // flush it all at once
  144. long lCount = 0;
  145. while (AfxGetThread()->OnIdle(lCount))
  146. lCount++;
  147. }
  148. END_TRY
  149. }
  150. CTracerDLL  NEAR tracerDLL(_T("trace.dll"));
  151. /////////////////////////////////////////////////////////////////////////////