1
0

externalMngr.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef NULLSOFT_AUTH_LOGINBOX_EXTERNAL_MANAGER_HEADER
  2. #define NULLSOFT_AUTH_LOGINBOX_EXTERNAL_MANAGER_HEADER
  3. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  4. #pragma once
  5. #endif
  6. #include <wtypes.h>
  7. #include <dispex.h>
  8. #include "../nu/Vectors.h"
  9. class ExternalManager : public IDispatchEx
  10. {
  11. protected:
  12. ExternalManager();
  13. ~ExternalManager();
  14. public:
  15. static HRESULT CreateInstance(ExternalManager **instance);
  16. public:
  17. /* IUnknown */
  18. STDMETHOD(QueryInterface)(REFIID riid, PVOID *ppvObject);
  19. STDMETHOD_(ULONG, AddRef)(void);
  20. STDMETHOD_(ULONG, Release)(void);
  21. /* IDispatch*/
  22. STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgdispid);
  23. STDMETHOD(GetTypeInfo)(unsigned int itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo);
  24. STDMETHOD(GetTypeInfoCount)(unsigned int FAR * pctinfo);
  25. STDMETHOD(Invoke)(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, EXCEPINFO FAR * pexecinfo, unsigned int FAR *puArgErr);
  26. /* IDispatchEx*/
  27. STDMETHOD (GetDispID)(BSTR bstrName, DWORD grfdex, DISPID *pid);
  28. STDMETHOD (InvokeEx)(DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller);
  29. STDMETHOD (DeleteMemberByName)(BSTR bstrName, DWORD grfdex);
  30. STDMETHOD (DeleteMemberByDispID)(DISPID id);
  31. STDMETHOD (GetMemberProperties)(DISPID id, DWORD grfdexFetch, DWORD *pgrfdex);
  32. STDMETHOD (GetMemberName)(DISPID id, BSTR *pbstrName);
  33. STDMETHOD (GetNextDispID)(DWORD grfdex, DISPID id, DISPID *pid);
  34. STDMETHOD (GetNameSpaceParent)(IUnknown **ppunk);
  35. public:
  36. HRESULT AddDispatch(LPCWSTR pszName, IDispatch *pDispatch, DISPID *pid);
  37. protected:
  38. typedef struct __DispatchRecord
  39. {
  40. DISPID id;
  41. LPWSTR name;
  42. IDispatch *object;
  43. } DispatchRecord;
  44. typedef Vector<DispatchRecord> DispatchList;
  45. protected:
  46. ULONG ref;
  47. DispatchList list;
  48. CRITICAL_SECTION lock;
  49. DISPID lastDispId;
  50. };
  51. #endif //NULLSOFT_AUTH_LOGINBOX_EXTERNAL_MANAGER_HEADER