AutoRobot.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // AutoRobot.cpp : 定义 DLL 的初始化例程。
  2. //
  3. #include "stdafx.h"
  4. #include <afxdllx.h>
  5. #include "AutoRobot.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. // --以下是全局导出对象--;
  10. CSerialFactory *pSerialImpl = NULL;
  11. // 全局唯一性变量;
  12. HWND ghWnd = NULL; // 程序主窗口句柄;
  13. vector <STRecvMessage> g_vtRecv; // 数据池;
  14. CRITICAL_SECTION g_cs_vt; // 数据池操作的临界值;
  15. DWORD g_dwCID = 0; // 数据池元素的ID;
  16. static AFX_EXTENSION_MODULE AutoRobotDLL = { NULL, NULL };
  17. extern "C" int APIENTRY
  18. DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
  19. {
  20. // 如果使用 lpReserved,请将此移除
  21. UNREFERENCED_PARAMETER(lpReserved);
  22. if (dwReason == DLL_PROCESS_ATTACH)
  23. {
  24. TRACE0("AutoRobot.DLL 正在初始化!\n");
  25. // 扩展 DLL 一次性初始化
  26. if (!AfxInitExtensionModule(AutoRobotDLL, hInstance))
  27. return 0;
  28. // 将此 DLL 插入到资源链中
  29. // 注意: 如果此扩展 DLL 由
  30. // MFC 规则 DLL(如 ActiveX 控件)隐式链接到
  31. // 而不是由 MFC 应用程序链接到,则需要
  32. // 将此行从 DllMain 中移除并将其放置在一个
  33. // 从此扩展 DLL 导出的单独的函数中。使用此扩展 DLL 的
  34. // 规则 DLL 然后应显式
  35. // 调用该函数以初始化此扩展 DLL。否则,
  36. // CDynLinkLibrary 对象不会附加到
  37. // 规则 DLL 的资源链,并将导致严重的
  38. // 问题。
  39. new CDynLinkLibrary(AutoRobotDLL);
  40. }
  41. else if (dwReason == DLL_PROCESS_DETACH)
  42. {
  43. TRACE0("AutoRobot.DLL 正在终止!\n");
  44. // 在调用析构函数之前终止该库
  45. AfxTermExtensionModule(AutoRobotDLL);
  46. }
  47. return 1; // 确定
  48. }
  49. void CreateSerialImpl(void)
  50. {
  51. if ( pSerialImpl == NULL )
  52. {
  53. pSerialImpl = new CSerialFactory;
  54. }
  55. }
  56. BOOL GetMainWnd(HWND &hwnd)
  57. {
  58. if ( hwnd == NULL )
  59. return FALSE;
  60. ghWnd = hwnd;
  61. return TRUE;
  62. }