main.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // dllmain.cpp : 定义 DLL 应用程序的入口点。
  2. #include <tchar.h>
  3. #import "vgcoreauto.tlb"
  4. BOOL APIENTRY DllMain( HMODULE hModule,
  5. DWORD ul_reason_for_call,
  6. LPVOID lpReserved
  7. )
  8. {
  9. switch (ul_reason_for_call)
  10. {
  11. case DLL_PROCESS_ATTACH:
  12. case DLL_THREAD_ATTACH:
  13. case DLL_THREAD_DETACH:
  14. case DLL_PROCESS_DETACH:
  15. break;
  16. }
  17. return TRUE;
  18. }
  19. class CVGAppPlugin : public VGCore::IVGAppPlugin
  20. {
  21. private:
  22. VGCore::IVGApplication *m_pApp;
  23. ULONG m_ulRefCount;
  24. long m_lCookie;
  25. bool m_bEnabled;
  26. public:
  27. CVGAppPlugin();
  28. // IUnknown
  29. public:
  30. STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject);
  31. STDMETHOD_(ULONG, AddRef)(void)
  32. {
  33. return ++m_ulRefCount;
  34. }
  35. STDMETHOD_(ULONG, Release)(void)
  36. {
  37. ULONG ulCount = --m_ulRefCount;
  38. if (ulCount == 0)
  39. {
  40. delete this;
  41. }
  42. return ulCount;
  43. }
  44. // IDispatch
  45. public:
  46. STDMETHOD(GetTypeInfoCount)(UINT *pctinfo)
  47. {
  48. return E_NOTIMPL;
  49. }
  50. STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
  51. {
  52. return E_NOTIMPL;
  53. }
  54. STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
  55. {
  56. return E_NOTIMPL;
  57. }
  58. STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
  59. // IVGAppPlugin
  60. public:
  61. STDMETHOD(raw_OnLoad)(VGCore::IVGApplication *Application);
  62. STDMETHOD(raw_StartSession)();
  63. STDMETHOD(raw_StopSession)();
  64. STDMETHOD(raw_OnUnload)();
  65. };
  66. CVGAppPlugin::CVGAppPlugin() :
  67. m_pApp(NULL),
  68. m_lCookie(0),
  69. m_ulRefCount(1),
  70. m_bEnabled(false)
  71. {
  72. }
  73. STDMETHODIMP CVGAppPlugin::QueryInterface(REFIID riid, void **ppvObject)
  74. {
  75. HRESULT hr = S_OK;
  76. m_ulRefCount++;
  77. if (riid == IID_IUnknown)
  78. {
  79. *ppvObject = (IUnknown *)this;
  80. }
  81. else if (riid == IID_IDispatch)
  82. {
  83. *ppvObject = (IDispatch *)this;
  84. }
  85. else if (riid == __uuidof(VGCore::IVGAppPlugin))
  86. {
  87. *ppvObject = (VGCore::IVGAppPlugin *)this;
  88. }
  89. else
  90. {
  91. m_ulRefCount--;
  92. hr = E_NOINTERFACE;
  93. }
  94. return hr;
  95. }
  96. STDMETHODIMP CVGAppPlugin::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
  97. {
  98. return S_OK;
  99. }
  100. STDMETHODIMP CVGAppPlugin::raw_OnLoad(VGCore::IVGApplication *Application)
  101. {
  102. m_pApp = Application;
  103. if (m_pApp)
  104. {
  105. m_pApp->AddRef();
  106. }
  107. return S_OK;
  108. }
  109. STDMETHODIMP CVGAppPlugin::raw_StartSession()
  110. {
  111. MessageBox(NULL, _T("插件加载到内存,本CPG使用VC2022 X64编译"), _T("蘭雅CPG64"), MB_ICONSTOP);
  112. return S_OK;
  113. }
  114. STDMETHODIMP CVGAppPlugin::raw_StopSession()
  115. {
  116. MessageBox(NULL, _T("插件结束"), _T("蘭雅CPG64"), MB_ICONSTOP);
  117. return S_OK;
  118. }
  119. STDMETHODIMP CVGAppPlugin::raw_OnUnload()
  120. {
  121. if (m_pApp)
  122. {
  123. m_pApp->Release();
  124. m_pApp = NULL;
  125. }
  126. return S_OK;
  127. }
  128. extern "C" __declspec(dllexport) DWORD APIENTRY AttachPlugin(VGCore::IVGAppPlugin **ppIPlugin)
  129. {
  130. *ppIPlugin = new CVGAppPlugin;
  131. return 0x100;
  132. }