exsmartp.cpp
上传用户:weisheen
上传日期:2022-07-09
资源大小:19390k
文件大小:4k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. // exsmartp.cpp : Implementation of DLL Exports.
  2. // Note: Proxy/Stub Information
  3. //      To merge the proxy/stub code into the object DLL, add the file 
  4. //      dlldatax.c to the project.  Make sure precompiled headers 
  5. //      are turned off for this file, and add _MERGE_PROXYSTUB to the 
  6. //      defines for the project.  
  7. //
  8. //      If you are not running WinNT4.0 or Win95 with DCOM, then you
  9. //      need to remove the following define from dlldatax.c
  10. //      #define _WIN32_WINNT 0x0400
  11. //
  12. //      Further, if you are running MIDL without /Oicf switch, you also 
  13. //      need to remove the following define from dlldatax.c.
  14. //      #define USE_STUBLESS_PROXY
  15. //
  16. //      Modify the custom build rule for exsmartp.idl by adding the following 
  17. //      files to the Outputs.
  18. //          exsmartp_p.c
  19. //          dlldata.c
  20. //      To build a separate proxy/stub DLL, 
  21. //      run nmake -f exsmartpps.mk in the project directory.
  22. #include "stdafx.h"
  23. #include "resource.h"
  24. #include <initguid.h>
  25. #include "exsmartp.h"
  26. #include "dlldatax.h"
  27. #include "exsmartp_i.c"
  28. #include "MyAbc.h"
  29. #ifdef _MERGE_PROXYSTUB
  30. extern "C" HINSTANCE hProxyDll;
  31. #endif
  32. CComModule _Module;
  33. BEGIN_OBJECT_MAP(ObjectMap)
  34. OBJECT_ENTRY(CLSID_MyAbc, CMyAbc)
  35. END_OBJECT_MAP()
  36. class CExsmartpApp : public CWinApp
  37. {
  38. public:
  39. // Overrides
  40. // ClassWizard generated virtual function overrides
  41. //{{AFX_VIRTUAL(CExsmartpApp)
  42. public:
  43.     virtual BOOL InitInstance();
  44.     virtual int ExitInstance();
  45. //}}AFX_VIRTUAL
  46. //{{AFX_MSG(CExsmartpApp)
  47. // NOTE - the ClassWizard will add and remove member functions here.
  48. //    DO NOT EDIT what you see in these blocks of generated code !
  49. //}}AFX_MSG
  50. DECLARE_MESSAGE_MAP()
  51. };
  52. BEGIN_MESSAGE_MAP(CExsmartpApp, CWinApp)
  53. //{{AFX_MSG_MAP(CExsmartpApp)
  54. // NOTE - the ClassWizard will add and remove mapping macros here.
  55. //    DO NOT EDIT what you see in these blocks of generated code!
  56. //}}AFX_MSG_MAP
  57. END_MESSAGE_MAP()
  58. CExsmartpApp theApp;
  59. BOOL CExsmartpApp::InitInstance()
  60. {
  61. #ifdef _MERGE_PROXYSTUB
  62.     hProxyDll = m_hInstance;
  63. #endif
  64.     _Module.Init(ObjectMap, m_hInstance, &LIBID_EXSMARTPLib);
  65.     return CWinApp::InitInstance();
  66. }
  67. int CExsmartpApp::ExitInstance()
  68. {
  69.     _Module.Term();
  70.     return CWinApp::ExitInstance();
  71. }
  72. /////////////////////////////////////////////////////////////////////////////
  73. // Used to determine whether the DLL can be unloaded by OLE
  74. STDAPI DllCanUnloadNow(void)
  75. {
  76. #ifdef _MERGE_PROXYSTUB
  77.     if (PrxDllCanUnloadNow() != S_OK)
  78.         return S_FALSE;
  79. #endif
  80.     AFX_MANAGE_STATE(AfxGetStaticModuleState());
  81.     return (AfxDllCanUnloadNow()==S_OK && _Module.GetLockCount()==0) ? S_OK : S_FALSE;
  82. }
  83. /////////////////////////////////////////////////////////////////////////////
  84. // Returns a class factory to create an object of the requested type
  85. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  86. {
  87. #ifdef _MERGE_PROXYSTUB
  88.     if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
  89.         return S_OK;
  90. #endif
  91.     return _Module.GetClassObject(rclsid, riid, ppv);
  92. }
  93. /////////////////////////////////////////////////////////////////////////////
  94. // DllRegisterServer - Adds entries to the system registry
  95. STDAPI DllRegisterServer(void)
  96. {
  97. #ifdef _MERGE_PROXYSTUB
  98.     HRESULT hRes = PrxDllRegisterServer();
  99.     if (FAILED(hRes))
  100.         return hRes;
  101. #endif
  102.     // registers object, typelib and all interfaces in typelib
  103.     return _Module.RegisterServer(TRUE);
  104. }
  105. /////////////////////////////////////////////////////////////////////////////
  106. // DllUnregisterServer - Removes entries from the system registry
  107. STDAPI DllUnregisterServer(void)
  108. {
  109. #ifdef _MERGE_PROXYSTUB
  110.     PrxDllUnregisterServer();
  111. #endif
  112.     return _Module.UnregisterServer(TRUE);
  113. }